Category Archive: Базы данных

PostgreSQL размер таблиц и индексов

Надыбал такой запрос, который вытягивает размеры таблиц и их индексов, а также суммарный размер:
SELECT
    TABLE_NAME,
    pg_size_pretty(table_size) AS table_size,
    pg_size_pretty(indexes_size) AS indexes_size,
    pg_size_pretty(total_size) AS total_size
FROM (
    SELECT
        TABLE_NAME,
        pg_table_size(TABLE_NAME) AS table_size,
        pg_indexes_size(TABLE_NAME) AS indexes_size,
        pg_total_relation_size(TABLE_NAME) AS total_size
    FROM (
        SELECT ('"' || table_schema || '"."' || TABLE_NAME || '"') AS TABLE_NAME
        FROM information_schema.tables
    ) AS all_tables
    ORDER BY total_size DESC
) AS pretty_sizes

SQL6031N Ошибка в файле db2nodes.cfg

Несколько раз сталкивался с подобной проблемой, когда при запуску DB2 выходило следующее сообщение:
SQL6031N Ошибка в файле db2nodes.cfg
SQL6031N В моих случаях причина была в том, что у компьютера (сервера) менялось имя, а в файле db2nodes.cfg было старое название компьютера. Нужно либо вернуть компьютеру прежнее название, либо переписать название в файле db2nodes.cfg. Для это любым текстовым редактором откройте файл db2nodes.cfg, который по умолчанию расположен в папке:
C:\Program Files\IBM\SQLLIB\DB2\
Примерное содержимое этого файла:
0 microsof-0a0782 MICROSOF-0A0782 0
db2nodes cfg Допустим, теперь имя компьютера TEST, внесем соответствующие изменения:
0 test TEST 0
Обратите внимание, что имя компьютера нужно заменить в двух местах, при чем в первом случае название в нижнем регистре, а во втором - в верхнем. Почему это так - не знаю)). Все! После сохранения внесенных изменений можно запускать DB2.

Перенос файлов базы данных DB2 v8.1

Перед нами встала задача перенести базу данных DB2 v8.1 со старого компьютера на новый. Сразу оговорюсь, существуют более простые и надежные способы переноса база данных DB2, чем описанный ниже способ. Но кому-то он может пригодиться. Например, в том случае, если от базы данных остались лишь файлы. Данный способ описывает перенос базы путем копирования файлов базы данных. 1) Нужно установить на новом компьютере DB2 той же версии, что и на старом компьютере 2) Следующий шаг - копирование папок, в которых содержаться файлы базы данных DB2. Для начала просмотрим какие есть табличные пространства, выполним следующий запрос:
list tablespaces
Будет выведена информация о существующих табличных пространств: ID табличного пространства, название табличного пространства и другая информация.
ID табличного пространства = 0
Имя                        = SYSCATSPACE

ID табличного пространства = 1
Имя                        = TEMPSPACE1

ID табличного пространства = 2
Имя                        = USERSPACE1

ID табличного пространства = 3
Имя                        = USERSPACE2

ID табличного пространства = 4
Имя                        = SYSTOOLSPACE

т.е. в данном случае у нас 5 табличных пространств. Остается определить расположение этих табличных пространств на жестком диске. Для каждого табличного пространства нужно выполнить запрос, указав в качестве параметра ID табличного пространства.
list tablespace containers for 0;
list tablespace containers for 1;
list tablespace containers for 2;
list tablespace containers for 3;
list tablespace containers for 4;
Будет выведен список контейнеров табличных пространств:
Контейнеры табличных пространств для табличного пространства 0
 Имя = C:\DB2\NODE0000\SQL00008\SQLT0000.0

Контейнеры табличных пространств для табличного пространства 1
 Имя  = C:\DB2\NODE0000\SQL00008\SQLT0001.0

Контейнеры табличных пространств для табличного пространства 2
Имя = C:\DB2\NODE0000\SQL00008\SQLT0002.0

Контейнеры табличных пространств для табличного пространства 3
Имя = C:\project\USER_DB_CONTAINER

Контейнеры табличных пространств для табличного пространства 4
Имя = C:\DB2\NODE0000\SQL00008\SYSTOOLSPACE

Обратите внимание, что кроме стандартного размещения файлов в папке C:\DB2, также используется контейнер C:\project\USER_DB_CONTAINER. Из этого делается вывод: нужно перенести на новый компьютер папку C:\DB2 и папку C:\project. 3) Скопировав все необходимые папки на новый компьютер, открываем Центр управления DB2. Находим элемент "Базы данных": развернуть список В контекстном меню этого пункта выберите "Добавить..." добавить Откроется окно добавления базы данных: выбрать бд Для начала выберите диск, автоматически будут считаны доступные базы данных на этом диске. Выберите свою базу и нажмите "OK". Если у вас несколько баз, то проделайте операцию для каждой базы данных. Добавленные базы появятся в списке: список баз данных 4) В случае, если у вас имеются распределенные (федеративные, federated) базы данных, то нужно включить поддержку федеративных баз и настроить user mapping. Поддержка федеративных баз включается командой:
UPDATE DBM CFG USING FEDERATED YES DEFERRED;
После этого нужно перегрузить DB2. Это можно сделать через значок в трее: db2 in tray У DB2 есть особенность: он берёт пользователей из операционной системы. После того, как мы заходим под своей учеткой на компьютер, база будет доступна и она не требует отдельного подключения к базе данных. Но не будут доступны псевдонимы, которые настроены на таблицы из федеративных баз данных. При попытке обратиться к псевдониму выйдет следующая ошибка.
com.ibm.db.DataException: Ошибка менеджера баз данных. : [IBM][CLI Driver][DB2/NT] 
SQL1101N Не удалось получить доступ к удаленной базе данных  на узле "" 
при указанном ID авторизации и пароле. SQLSTATE=08004
Нужно настроить пользователя и пароль для доступа к федеративной базе, не смотря на то, что базы находятся на одном компьютере и в одном инстансе. Если быть точнее, то нужно настроить отображение пользователя на удаленного пользователя с пароле (user mapping). Для начала просмотрим существующие отображения пользователей:
select * from syscat.useroptions
user_mapping_table Столбец AUTHID - имя пользователя из операционной системы. Столбец SERVERNAME - имя федеративной базы Столбец OPTION храним одну из опций: REMOTE_AUTHID или REMOTE_PASSWORD Столбец SETTING - значение настройки: для REMOTE_AUTHID - удаленный пользователь, для REMOTE_PASSWORD - кэш от пароля удаленного пользователя. В нашем случае данные пользователя операционной системы совпадают с данными удаленного пользователя. Здесь возможно три случая: a) Просто обновить пароль
ALTER USER MAPPING FOR DB2ADMIN SERVER COMMON OPTIONS 
(SET REMOTE_PASSWORD  'your_password');
б) Обновить учетку удаленного пользователя и пароля
ALTER USER MAPPING FOR DB2ADMIN SERVER COMMON OPTIONS 
(SET REMOTE_AUTHID 'new_remote_user_login', SET REMOTE_PASSWORD 'your_password');
в) Добавление нового(дополнительного) пользователя в таблицу отображений
CREATE USER MAPPING FOR YOUR_USER SERVER COMMON OPTIONS 
(REMOTE_AUTHID 'remote_user', REMOTE_PASSWORD  'remote_password');
На этом перенос баз данных завершен! p.s. Даже, если на новом компьютере у вас будут аналогичные удаленные пользователь с таким же паролями, советую обновить кэши паролей для всех пользователей в таблице отображений.

SQuirrel SQL Client подключание к базе данных SQLite

SQLite — легковесная встраиваемая реляционная база данных Для начала скачаем драйвер SQLite: sqlite-jdbc-3.7.2.jar Найдите папку, в которую установлен SQuirrel. В папку lib поместите файл sqlite-jdbc-3.7.2.jar. Если SQuirrel открыт, то закройте его, а затем снова откройте, и драйвер будет доступен. По умолчанию в SQuirrel настройки подключения к SQLite не установлены. Создать новый драйвер Перейдите во вкладку Drivers и нажмите синий плюсик ("Создать новый драйвер") Добавить драйвер Заполните поля следующим образом: Name: SQLite Example URL: jdbc:sqlite://DRIVE:/dirA/dirB/db.sqlite Class Name: org.sqlite.JDBC Где Class Name указывается пакет и класс, реализующий JDBC-драйвер, а Example URL указывается шаблон строки подключения, который будет показан как подсказка при создании подключения к SQLite. 03 Нажмите OK и драйвер появиться в списке загруженных драйверов. 04 Теперь перейдите во вкладку Aliases, нажмите синий плюсик для добавления нового подключения. 05 Придумайте название, выберите наш созданный драйвер "SQLite" и укажите путь к файлу, в котором хранится база данных SQLite. Также можете указать флаг Auto logon. Нажмите OK. 06 Созданное подключение можно увидеть в списке. Щелкните по нему мышкой два раза для открытия подключения. 07 Здесь мы видим открывшуюся базу. Также будьте внимательны при указании пути к файлу SQLite. Если вы укажете на несуществующий файл, то по указанному пути будет создана пустая база.

Установка и настройка SQuirreL SQL Client

Рассмотрим установку моего любимого sql-клиента SQuirreL SQL Client на Windows 8 Скачиваем свежую версию файла squirrel-sql-<версия>-install.jar с официального сайта http://www.squirrelsql.org/#installation Начнем с того, что SQuirreL SQL Client написан на java. Поэтому на компьютере должна быть установлена Java (см. статью Установка JDK (Windows)). Не удивляйтесь, что установщик представлен jar-файлом, это все благодаря IzPack. Установщик нужно запустить с правами администратора, иначе установщик не сможет создать папку и записать данные в папку C:\Program Files. Можно, конечно, установить в папку, на которую у вас есть доступ, но мы все же установим в папку C:\Program Files. Нажмите кнопку Windows, затем наберите cmd, должна появиться строка запуска командной строки. Вызовите на ней контекстное меню и выберите пункт Запуск от имени администратора. Наберите следующую команду, указав полный путь к jar-файлу.
java -jar c:\temp\squirrel-sql-3.5.0-install.jar
Если в пути есть пробелы, то заключите путь в кавычки:
java -jar "C:\Program Files\Java\jdk1.6.0_43\bin\squirrel-sql-3.5.0-install.jar"
Должно появиться окно приветствия: 1 В окне приветствия просто нажмите Next. 2 В следующием окне также нажмите Next 3 Директорию установки оставим без изменения, нажмем Next. Установщик сообщит, что будет создана новая директория, согласитесь с этим, нажатием кнопки OK. 4 В окне выбора пакетов можно выбрать дополнительные плагины для СУБД, которые планируем использовать. Я выбрал плагины для MySQL, Oracle, Microsoft SQL Server и DB2. Также выбрал плагин русского языка. 5 После копирования и установки файлов нажмите Next. 6 Можно разрешить установку ярлыка на рабочий стол и нажать Next. 7 Установка завершена, нажимаем Done. Установка драйверов "Голый" squirrel содержит только драйвер "JDBC ODBC Bridge". Для подключения драйвера скопируйте файл драйвера в директорию C:\Program Files\squirrel-sql-3.5.0\lib в соответствии со следующей таблицей:
СУБД Файл драйвера
MySQL mysql-connector-java-5.1.5-bin.jar
Oracle ojdbc14.jar
Microsoft SQL Server sqljdbc.jar
DB2 db2java.zip db2jcc.jar db2jcc_license_cu.jar (нужны все три файла)
Для проверки подключения драйверов откройте Squirrel, выберите вкладку Drivers и нажмите кнопку Показывать только загруженные драйверы. Вы увидите список доступных драйверов: 8 Подключение к базе данных 9 Выберите вкладку Aliases и нажмите синий плюс для добавления нового подключения. Выберите произвольное название для подключения, выберите нужны драйвер из списка, укажите строку подключания, пользователя и пароль. Также вы можете установить флаг "Auto logon", чтобы при открытий, созданного подключения, автоматически происходила авторизация. Нажмите OK. Созданный alias появиться в списке: 10 Подключение устанавливается двойных щелчком по alias. При успешном подключении с базой данных можно работать в двух режимах: Objects (работа с объектами базы данных) и SQL (режим sql-запросов). 11 Ниже приведены примеры для создания подключений к некоторым СУБД:
СУБД Драйвер Строка подключения
MySQL MySQL Driver jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF8
Oracle Oracle Thin Driver jdbc:oracle:thin:@localhost:1521:TEST
Microsoft SQL Server Microsoft MSSQL Server JDBC Driver jdbc:sqlserver://localhost:1433;characterEncoding=UTF8;databaseName=test
DB2 IBM DB2 Net Driver jdbc:db2://localhost:50000/TEST
Microsoft Access JDBC ODBC Bridge jdbc:odbc:test