Копіювання і відновлення бази даних в interbase

Базу даних рекомендується регулярно копіювати (back up) і відновлювати (restore). При цьому відбувається переупорядочивание індексів, прибирання сміття, більш компактне використання дискового простору. В процесі відновлення бази даних з резервної копії ви можете змінити розмір сторінки, кількість і розмір файлів бази даних. Для цих цілей може використовуватися як утиліта командного рядка gbak, так і програма графічного інтерфейсу, наприклад: IBExpert або BlazeTop (він же SQLHammer). Ви також можете написати власну програму для виконання копіювання і відновлення бази даних.

Базу даних може копіювати тільки власник бази даних або користувач SYSDBA.

Відновлювати базу даних з резервної копії може будь-який користувач, однак тільки власник бази даних або користувач SYSDBA можуть відновлювати копію поверх існуючої бази даних. Так сказано в документації, проте досвід показує, що відновлювати копію поверх існуючої бази даних може будь-який користувач.

Якщо база даних використовується в мережі декількома клієнтами, то щоб уникнути руйнування даних буває корисним виконати її останов (shut down) перед відновленням, щоб закрити доступ клієнтам до бази даних на час виконання операції. Після виконання необхідних дій базу даних можна знову перевести в оперативний стан (on line).

Створення резервної копії

Для виконання копіювання бази даних утилітою gbak потрібно викликати вікно командного рядка і перейти в каталог \ Bin кореневого каталогу інсталяції сервера бази даних, наприклад:

Запустіть утиліту gbak:

Перемикачі утиліти для створення резервної копії представлені в табл. 1.

Увага. У документації по InterBase 6 невірно вказані скорочення для деяких перемикачів утиліти.

Таблиця 1. Перемикачі утиліти gbak. використовувані при створенні резервної копії

Копіює базу даних на ту машині в локальній мережі, де розміщується база даних. При цьому використовується Service Manager.

Останні аргументи в командному рядку задають шлях до первинного файлу бази даних і шляхи до файлів резервної копії. Якщо файли копії вже існують, вони будуть замінені новими.

Слід нагадати, що копіювати базу даних може тільки її власник (користувач, який створив базу даних) або користувач SYSDBA.

Якщо потрібне створення багатофайлову копії, то в кінці командного рядка перераховуються файли копії із зазначенням їх розміру:

Файл - це повний шлях до файлу та ім'я файлу.

Увага. Операційні системи дозволяють в іменах файлів і каталогів використовувати літери кирилиці. Однак це може привести до великих неприємностей при створенні, зміні, копіювання та відновлення бази даних. Наприклад, при використанні утиліти isql ви взагалі не зможете створити базу даних, вказуючи шлях, який містить символи кирилиці. В інших програмах ви можете отримувати абсолютно загадкові повідомлення про помилки, наприклад, що у вас неправильна назва або пароль користувача.

Це пов'язано з особливостями реалізації сервера бази даних.

Розмір - розмір файлу копії. Може здаватися в байтах (суфікс відсутній), в кілобайтах (суфікс k), мегабайтах (m) або гігабайтах (g). Мінімальний розмір 2048 байтів.

Щоб зробити копію бази даних в два файли, попередній приклад потрібно переписати у вигляді:

Тут розмір першого файлу копії задається 2К, для другого зазначено той же розмір, проте реально його розмір буде розширено до величини, необхідної для зберігання всіх даних копії.

Для останнього файлу копії розмір можна не ставити, проте його завдання не приводить до помилки.

Не страшно, якщо під час копіювання бази даних з нею працюють інші користувачі. Копіюватися будуть тільки підтверджені зміни даних, які існували на момент початку копіювання.

Зупинка і запуск бази даних

Самим дурним заняттям, яке можна собі придумати, є відновлення бази даних з резервної копії поверх існуючої бази даних в той час, коли з нею працюють інші користувачі. Це гарантовано веде до руйнування бази даних. З цієї причини перед відновленням бази даних з резервної копії необхідно зупинити базу даних - перевести її в стан shutdown, - виконати відновлення, а потім зробити базу даних доступною для користувачів.

Зупинка бази даних можна виконати за допомогою утиліти gfix. Синтаксис зупинки:

Перемикач - attach запобігає нові з'єднання з базою.

  • tran запобігає запуск нових транзакцій.
  • force зупиняє базу даних через вказану кількість секунд.

У рядок також потрібно включити ім'я користувача (перемикач - user), пароль (- pa [ssword]) і повний шлях до первинного файлу бази даних. наприклад:

Створює відновлювану базу даних на тій машині в локальній мережі, де розміщується резервна копія. При цьому використовується Service Manager.

Останні аргументи в командному рядку задають шлях до файлів резервних копій і шлях до файлів бази даних. Якщо виконується відновлення бази даних на іншому комп'ютері в мережі, то файли резервних копій повинні розміщуватися на диску з дозволеним доступом. Для кожного файлу відновлюваної бази даних (крім останнього) потрібно вказати розмір файлу в сторінках бази даних. Мінімальним розміром є 200 сторінок. Якщо ви вкажете меншу кількість, утиліта попередить про це і все одно виконає відновлення, встановивши розмір файлу 200 сторінок.

При відновленні бази даних з копії, що складається з декількох файлів, необхідно вказати всі файли копії в тому порядку, в якому створювалася копія.

У наступному прикладі відновлюється база даних, що складається з двох файлів. Копія включає в себе три файли:

При відновленні задається розмір сторінки 1024 байти, розмір первинного файлу встановлюється в 200 сторінок.

Якщо копія бази даних знаходиться на іншій машині в локальній мережі, то можна використовувати перемикач - service, після якого вказати ім'я Service Manager. При використанні протоколу TCP / IP для відновлення копії на тій же машині в мережі можна задати наступне:

Тут Server - ім'я іншої машини в мережі, де розташовується копія і куди потрібно відновити базу даних.

Використання Service Manager є єдиним способом створювати копію бази даних на диску із забороненим доступом засобами gbak. У IBExpert все набагато простіше.

Створення резервної копії

Для виконання копіювання бази даних запустіть IBExpert. База даних повинна бути зареєстрована в програмі. У вікні Database Explorer клацніть по рядку вашої бази даних:

Копіювання і відновлення бази даних в interbase

Ріс.1.Окно Database Explorer. Вибір бази даних

В меню Services виберіть Backup Database. З'явиться вікно Database Backup, в якому в закладці Backup Files вже встановлені деякі необхідні значення. Ви можете змінити ім'я файлу копії і його розмір.

Копіювання і відновлення бази даних в interbase

Мал. 2. Вікно Database Backup

У нижній частині екрана в розділі Output зі списку виберіть варіант On Screen, щоб протокол копіювання виводився на екран в закладці Output.

Клацніть по кнопці Start Backup. Поточної стане закладка Output, в якій будуть відображені всі повідомлення копіювання.

Відновлення бази даних з резервної копії

Для відновлення бази даних в меню Services виберіть Restore Database. З'явиться вікно Database Restore. У закладці Files вже встановлені всі необхідні значення. В поле Restore into вказано Existing database.

Копіювання і відновлення бази даних в interbase

Мал. 3. Вікно Database Restore

Клацніть по рядку File Name. У правій частині поля з'явиться кнопка з трьома крапками. Клацніть по цій кнопці і в діалоговому вікні відкриття файлу виберіть файл копії. Позначте прапорцем поле Replace existing database (замінювати існуючу базу даних). Ви можете також змінити розмір сторінки бази даних, вибравши його зі списку Page Size.

Клацніть по кнопці Start Restore. З'явиться вікно введення імені і пароля користувача. Ви можете виконати відновлення в якості користувача SYSDBA. База даних буде відновлена ​​з резервної копії.

Якщо ви хочете відновити резервну копію в базу даних з іншим ім'ям, то в списку, що випадає Restore into потрібно вибрати New database, в поле Database File потрібно ввести повний шлях до нового (або існуючого) файлу бази даних, в поле File Name потрібно ввести шлях до файлу резервної копії або скористатися кнопкою огляду для вибору цього файлу.

На жаль, ми не зуміли розібратися, чи дозволяє програма відновлювати копію в многофайловий базу даних, отже, нам потрібно написати свої програми, які будуть виконувати всі необхідні дії по копіюванню і по відновленню баз даних.

Створення власних програм копіювання і відновлення бази даних з використанням компонентів FIBPlus

Програма резервного копіювання бази даних

У Delphi або в C ++ Builder створимо форму, розмістивши на ній необхідні компоненти. Покладемо на форму компонент ListBox. У нього будемо розміщувати дані про файлах копії. У нижній частині форми помістимо компонент Memo. У нього будуть виводитися повідомлення про процес копіювання.

Копіювання і відновлення бази даних в interbase

Мал. 4. Програма копіювання бази даних

Компонент TpFIBErrorHandler дозволить нам видавати повідомлення про помилки в процесі створення резервної копії. Для компонента у властивості Options встановіть в True значення всіх подсвойств. Напишіть наступний оброблювач помилок в базі даних.

При використанні цього компонента вам потрібно явно вказати включення в програму модуля FIB. Для Delphi його потрібно поставити в реченні uses.

Слід передбачити можливість видалення зі списку окремих файлів копії. Для цього потрібно написати обробник події клацання по кнопці Delete Backup:

Тут встановлюються значення властивостей компонента TpFIBBabkupService: ім'я первинного файлу бази даних, вид протоколу, параметри з'єднання з базою даних (ім'я користувача і пароль). Формується список файлів копії у властивості BackupFile, яке є об'єктом класу TStrings.

Процес копіювання починається при виклику методу ServiceStart компонента TpFIBBabkupService. Інформаційні повідомлення про виконуваному копіюванні програмою поміщаються в поле Memo. Чергова рядок виходить при використанні методу GetNextLine компонента TpFIBBabkupService. Коли процес завершується, властивості Eof присвоюється значення True.

При роботі в локальній мережі використовуючи цю програму можна копіювати базу даних, що знаходиться на дискових пристроях, до яких заборонений доступ з інших комп'ютерів мережі. Точно також файли копії можуть розміщуватися на дисках із забороненим доступом. Таке можливо, тому що компоненти FIBPlus використовують при копіюванні і при відновленні баз даних Services Manager.

Програма відновлення бази даних з резервної копії

У Delphi або в C ++ Builder створимо нову форму. Покладемо на форму компонент PageControl з двома закладками. На другу закладку покладемо тільки компонент Memo, куди будемо виводити повідомлення про процес відновлення. На першу закладку покладемо два компонента ListBox. У них будемо розміщувати дані про файлах копії і файлах бази даних.

Копіювання і відновлення бази даних в interbase

Мал. 5. Програма відновлення бази даних

Обробники різних подій форми і її компонентів схожі на те, що було в попередній програмі. Головна робота - виконання відновлення:

Компонент TpFIBRestoreService містить властивості BackupFile і DatabaseName, є екземплярами класу TString і призначені для зберігання списків файлів копій і файлів бази даних, відповідно. У програмі ці властивості заповнюються даними, введеними користувачем (і зберігаються в компонентах ListBox). Зверніть увагу, що на відміну від програми IBExpert тут ми можемо відновлювати копію і в многофайловий базу даних.

Відновлення починається при зверненні до методу ServiceStart.

При роботі в локальній мережі файли копії і файли бази даних можуть розташовуватися також і на дискових пристроях, для яких заборонений доступ з інших комп'ютерів мережі.

Ми навчилися копіювати і відновлювати базу даних за допомогою утиліти gbak і програми графічного інтерфейсу IBExpert. Ми також написали цілком пристойні фрагменти програм, які з успіхом можемо використовувати і в промислових розробках.

Перед відновленням бази даних поверх існуючої слід зупинити базу даних - перевести її в стан shutdown, а потім знову зробити її доступною всім клієнтам. Однак кращим рішенням буде видалити базу даних перед її відновленням.

В іменах файлів, як бази даних, так і файлів копії, не використовуйте букв кирилиці.

Опис засобів створення і зміни баз даних см. В статті на нашому сайті: «Створення та зміна бази даних в InterBase / Firebird».

Схожі статті