24июл
Как организовать резервирование базы данных?
Процесс эксплуатации моего сервера позволяет останавливать базу данных на некоторое время – ночью в выходные. Поэтому у меня есть возможность создавать холодную копию, по крайней мере, один раз в неделю. Процесс создания резервной копии выглядит следующим образом:
- Подключиться к базе данных
- Выполнить скрипт для генерации командного файла
- Выполнить командный файл:
- Остановить базу данных
- Создать архивы всех файлов данных кроме тех, что составляют табличное пространство TEMP
- Создать архив, в который включить файл паролей, init.ora, spfile.ora.
- Заархивировать с удалением архивные файлы журнализации
- Поднять базу данных
- Выполнить экспорт и архивацию каждой схемы
Выполняю командный файл backup.cmd:
sqlplus /nolog @backup.sql
call my_backup.cmd
Содержимое скрипта backup.sql:
conn sys/password@my_db as sysdba
SET SERVEROUTPUT ON
SET FEEDBACK OFF
SET LINESIZE 200
SET PAGESIZE 1000
SPOOL my_backup.cmd
DECLARE
CURSOR x_tablespace IS
SELECT a.tablespace_name FROM dba_tablespaces a ORDER BY 1;
CURSOR x_datafiles (in_ts_name IN VARCHAR2) IS
SELECT a.file_name FROM dba_data_files a WHERE a.tablespace_name = in_ts_name ORDER BY 1;
CURSOR x_archive_redo IS
SELECT a.value FROM v$parameter a WHERE a.name = 'log_archive_dest_1';
CURSOR x_control_files IS select name from sys.p_$controlfile;
CURSOR x_log_files IS
SELECT a.member FROM sys.p_$logfile a;
CURSOR x_users IS
SELECT username FROM dba_users WHERE username NOT IN ('SYS', 'DBA', 'CTXSYS', 'DBSNMP', ‘и прочие по вашему желанию’);
p_backup_com VARCHAR2(100) := 'rar a';
p_mbackup_com VARCHAR2(100) := 'rar m';
p_remove_com VARCHAR2(100) := '!rm';
p_dest_loc VARCHAR2(100) := 'l:\backup\MY_DB\'||to_char(sysdate,'yyyymmdd')||'\';
p_edest_loc VARCHAR2(100) := 'l:\backup\MY_DB\'||to_char(sysdate,'yyyymmdd')||'\EXPORT\';
BEGIN
SELECT name into p_sid FROM v$database;
DBMS_Output.Disable;
DBMS_Output.Enable(1000000);
DBMS_Output.Put_Line('rem останов экземпляра');
DBMS_Output.Put_Line('oradim -shutdown -sid '||p_sid||' -USRPWD my_password -SHUTTYPE inst -SHUTMODE i');
DBMS_Output.Put_Line('mkdir '||p_dest_loc);
DBMS_Output.Put_Line('mkdir '||p_edest_loc);
DBMS_Output.Put_Line('rem архивация дата файлов);
FOR cursor_ts IN x_tablespace LOOP
FOR cursor_df IN x_datafiles (in_ts_name => cursor_ts.tablespace_name) LOOP
DBMS_Output.Put_Line(p_backup_com || ' ' ||p_dest_loc||substr(cursor_df.file_name,instr(cursor_df.file_name,'\',-1,1)+1)|| '.rar ' || cursor_df.file_name);
END LOOP;
END LOOP;
DBMS_Output.Put_Line('rem упаковка архивных жупналов);
FOR cursor_ar IN x_archive_redo LOOP
DBMS_Output.Put_Line(p_mbackup_com||' ' ||p_dest_loc||'arx_redo_logs.rar ' || substr(cursor_ar.value,10) || '\*.*');
END LOOP;
DBMS_Output.Put_Line('rem архивация spfile и pwdfile');
FOR cursor_ar IN x_archive_redo LOOP
DBMS_Output.Put_Line(p_backup_com||' ' ||p_dest_loc||'spfile_pwdfile.rar ' || 'C:\oracle\ora92\database\*.ora');
END LOOP;
DBMS_Output.Put_Line('rem архивация управляющих файлов);
FOR cursor_cf IN x_control_files LOOP
DBMS_Output.Put_Line(p_backup_com || ' ' ||p_dest_loc||substr(cursor_cf.name,instr(cursor_cf.name,'\',-1,1)+1)|| '.rar ' || cursor_cf.name);
END LOOP;
DBMS_Output.Put_Line('rem—архивация оперативных журналов);
FOR cursor_lf IN x_log_files LOOP
DBMS_Output.Put_Line(p_backup_com || ' ' ||p_dest_loc||substr(cursor_lf.member,instr(cursor_lf.member,'\',-1,1)+1)|| '.rar ' || cursor_lf.member);
END LOOP;
DBMS_Output.Put_Line('rem экземпляр поднимается);
DBMS_Output.Put_Line('oradim -startup -sid '||p_sid||' -USRPWD my_password ');
DBMS_Output.Put_Line('rem экспорт всех схем);
DBMS_Output.Put_Line('rem ----------------------');
FOR cursor_uf IN x_users LOOP
DBMS_Output.Put_Line('C:\oracle\ora92\bin\exp.exe parfile=sys.par owner='||cursor_uf.username||' file='||p_edest_loc||cursor_uf.username||'.dmp log='||p_edest_loc||cursor_uf.username||'.log');
DBMS_Output.Put_Line(p_mbackup_com||' ' ||p_edest_loc||cursor_uf.username||' '||p_edest_loc||cursor_uf.username||'.*');
END LOOP;
END;
/
SPOOL off
SET FEEDBACK ON
EXIT
Это все. Хотелось бы получить замечания.