Здравствуйте.
Задался целью написать батник для того, что бы было легче обслуживать базу. И вот прошу квалифицированной помощи.
Вот что у меня получилось.
[SPOILER]
@Echo Off echo 1. Начало. Запрос даты и времени и запись в файл с пометкой "# Начало работы" echo %date% %time% # Начало работы>> "Z:\PSQLDump\dump & restore.log" echo 3.1. Запрос даты и времени и запись в файл с пометкой "# Рук перед началом создания файла резервной копии базы данных." echo %date% %time% # Рук перед началом создания файла резервной копии базы данных.>> "Z:\PSQLDump\dump & restore.log" echo 3.2. Подключение к базе и запрос общего количества рук в выводом в файл "D:/PostgreSQL/9.0/bin/psql.exe" --host localhost --port 5433 --username postgres --dbname Newdatabase --tuples-only --command "SELECT count(*) FROM pokerhands" >> "Z:\PSQLDump\dump & restore.log" echo 3.2.1. Информирование об ошибках и логирование в файл. IF NOT %ERRORLEVEL%==0 GOTO Error GOTO Successfull :Error MSG * /Time:86400 "Ошибка при запросе количества рук. Смотрите 'dump & restore.log'." ECHO %date% %time% Ошибка при запросе количества рук перед созданием файла резервной копии базы данных. Проверьте возможность запуска PostgreSQL>> "Z:\PSQLDump\dump & restore.log" GOTO Start_log :Successfull ECHO %date% %time% Успешный запрос количества рук перед созданием файла резервной копии базы данных>> "Z:\PSQLDump\dump & restore.log" echo 4.1. Создание резервной копии "D:/PostgreSQL/9.0/bin/pg_dump.exe" --host localhost --port 5433 --username postgres --format custom --blobs --oids --verbose --file "Z:\PSQLDump\Dump\Newdatabase_backup.b" Newdatabase echo 4.1.1. Информирование об ошибках и логирование в файл IF NOT %ERRORLEVEL%==0 GOTO Error GOTO Successfull REM В случае ошибки удаляется резервная копия :Error DEL /q "Z:\PSQLDump\Dump\" MSG * /Time:86400 "Ошибка при создании файла резервной копии базы данных. Смотрите 'dump & restore.log'." ECHO %date% %time% Ошибка при создании файла резервной копии базы данных 'Newdatabase_backup.b'. Файл был удален>> "Z:\PSQLDump\dump & restore.log" GOTO Start_log :Successfull ECHO %date% %time% Успешное создание файла резервной копии базы данных>> "Z:\PSQLDump\dump & restore.log" echo 4.2. Восстановление из резервной копии "D:/PostgreSQL/9.0/bin/pg_restore.exe" --host localhost --port 5433 --username postgres --dbname Newdatabase --clean --verbose "Z:\PSQLDump\Dump\Newdatabase_backup.b" echo 4.2.1. Информирование об ошибках и логирование в файл IF NOT %ERRORLEVEL%==0 GOTO Error GOTO Successfull :Error MSG * /Time:86400 "Ошибка при восстановлении из файла резервной копии базы данных. Смотрите 'dump & restore.log'." ECHO %date% %time% Ошибка при восстановлении из файла резервной копии базы данных 'Newdatabase_backup.b'>> "Z:\PSQLDump\dump & restore.log" GOTO Start_log :Successfull ECHO %date% %time% Успешное восстановление из файла резервной копии базы данных>> "Z:\PSQLDump\dump & restore.log" echo 5.1. Запрос даты и времени и запись в файл с пометкой "# Рук после восстановления из файла резервной копии базы данных." echo %date% %time% # Рук после восстановления из файла резервной копии базы данных.>> "Z:\PSQLDump\dump & restore.log" echo 5.2. Подключение к базе и запрос общего количества рук в выводом в файл "D:/PostgreSQL/9.0/bin/psql.exe" --host localhost --port 5433 --username postgres --dbname Newdatabase --tuples-only --command "SELECT count(*) FROM pokerhands" >> "Z:\PSQLDump\dump & restore.log" echo 5.2.1. Информирование об ошибках и логирование в файл IF NOT %ERRORLEVEL%==0 GOTO Error GOTO Successfull :Error MSG * /Time:86400 "Ошибка при запросе количества рук. Смотрите 'dump & restore.log'." ECHO %date% %time% Ошибка при запросе количества рук после восстановления из файла резервной копии базы данных>> "Z:\PSQLDump\dump & restore.log" GOTO Start_log :Successfull ECHO %date% %time% Успешный запрос количества рук после восстановления из файла резервной копии базы данных>> "Z:\PSQLDump\dump & restore.log" echo 7. Запуск файла лога :Start_log start Z:\PSQLDump\"dump & restore.log" pause
Вопрос в следующем.
1. Нужны ли параметры "--blobs --oids" при создании бекапа?
2. Посоветовали не использовать параметр "--clean" при восстановлении базы из бекапа, а удалять базу старую, создать новую и в нее выполнить восстановление из бекапа.
Как правильно это прописать в батнике?
Заранее благодарен.
ЗЫ. я не программист, поэтому прошу не пинать больно, а объяснить как для чайника.
> 1. Нужны ли параметры
> 1. Нужны ли параметры "--blobs --oids" при создании бекапа?
на ваше усмотрение. смотря какая у вас БД
> 2. Посоветовали не использовать параметр "--clean" при восстановлении базы из бекапа, а удалять базу старую, создать новую и в нее выполнить восстановление из бекапа.
Как правильно это прописать в батнике?
Да действительно так лучше. Через DROP DATABASE, CREATE DATABASE
Очень советую, после создания бакапа, восстановить его на другой базе, затем снова сделать дамп и сравнить. Отличий быть не должно, если они есть, имеет смысл понять все ли ключики были указаны при создании/восстановлении дампа
Подскажите пожалуйста
Подскажите пожалуйста неопытному пользователю как однозначно сравнить две базы данных по указанной вами схеме?
В UNIX'ах есть утилита diff.
В UNIX'ах есть утилита diff. Думаю и для Windows её можно найти
а запросами это не решается?
а запросами это не решается? можно ли сравнить не бэкапы а развёрнутые базы?
Решается, но вы что на каждый
Решается, но вы что на каждый объект в БД собираетесь запросы писать? Типа надо узнать если ли такая хранимая процедура в БД - запрос! А если таких процедур сотня? А если ещё надо проверить наличие триггеров, наличие, структуру и количество записей в таблицах да ещё и их идентичность? Сколько запросов вам нужно будет сделать вручную? Тысячи? Десятки тысяч?
я понял:) а насчёт "можно ли
я понял:)
а насчёт "можно ли сравнить не бэкапы а развёрнутые базы?"
Нет, нельзя.
Из-за многих вещей, долго объяснять, но нельзя.