7.手工備份恢復--復制數據庫(練習9)
復制數據庫成為復本或克隆數據庫,數據庫的副本名稱與原數據庫相同,克隆數據庫與原數據庫名稱不同。我們可以運用前面講過的還原和恢復技術,可以方便復制數據庫。通過復制數據庫可以為自己以及開發團隊帶來好處:
- 開發團隊擁有一個用于編程和測試的模擬數據庫;
- 可以驗證當前數據庫備份的質量;
- 可以練習數據庫恢復技能
利用Oracle工具,可以用三種方式復制數據庫:
- 可以使用操作系統的文件拷貝進行物理數據庫的還原和恢復;
- 可以用Oracle Export和Oracle Import工具將原數據庫邏輯還原到一個新的數據庫;
- 用Oracle的恢復管理其進行數據文件和控制文件的一個物理文件還原。
復制數據庫看上去很簡單,如MS SQLServer只需要把MDF文件復制到另一個地方即可,Oracle的復制實際上并沒有那么簡單。復制Oracle數據庫包括數據文件、重做日志文件和控制文件三類文件類型的處理。
練習9:克隆打開的PRACTICE數據庫
克隆數據庫大致的步驟:首先建立CLNE數據庫存放的路徑、參數文件、口令文件和Windows服務,接著把PRACTICE數據文件復制到CLNE數據庫的數據文件目錄下,然后將生成為CLNE數據庫創建一個新的控制文件所需的命令腳本,最后運行這個命令完成CLNE數據庫的創建。
步驟一:準備CLNE數據庫
首先,創建CLNE數據庫所需的路徑:
2 set ORACLE_BASE=D:\oracle
3 set ORACLE_HOME=D:\oracle\product\10.1.0
4 set ORACLE_DATA=D:\oracle\%ORACLE_SID%
5 set ORACLE_ADMIN=%ORACLE_HOME%\admin\%ORACLE_SID%
6 md %ORACLE_ADMIN%
7 md %ORACLE_ADMIN%\pfile
8 md %ORACLE_ADMIN%\bdump
9 md %ORACLE_ADMIN%\cdump
10 md %ORACLE_ADMIN%\udump
11 md %ORACLE_ADMIN%\create
12 md %ORACLE_DATA%\
13 md %ORACLE_DATA%\ARCHIVE

可以通過這個命令創建數據庫路徑接口,如果有差別可以調整相關參數的路徑,當然可以通過Window系統建立文件夾建立需要的文件夾。
接著,進入D:\oracle\product\10.1.0\Db_1\database文件夾,復制PRACTICE參數文件SPFILEPRACTICE.ORA并命名為SPFILEPCLNE.ORA,使用寫字板打開,將文件中出現”PRACTICE”替換為”CLNE”。
再次,為CLNE創建一個名為OracleSerciveCLNE的數據庫服務,使用CLNE口令:
最后,配置TNS服務:打開D:\oracle\product\10.1.0\Db_1\NETWORK\ADMIN\ tnsnames.ora添加目標數據庫服務;
步驟二:備份打開的PRACTICE數據庫對第5節練習5創建的腳本進行調整:
- 在PRACITCE數據庫打開時,把數據文件拷貝到CLNE數據目錄下;
- 刪除用于創建控制文件復制命令的行。
刪除后如下(具體用戶參見練習5):
2 define dir = 'D:\oracle\CLNE'
3 define fil = 'D:\oracle\CODE\tmp\copy_database_commands.sql'
4 define spo = '&dir\open_backup_output.lst'
5 prompt *** Spooling to &fil
6 set serveroutput on
7 spool &fil
8 prompt spool &spo
9 prompt archive log list;;
10 prompt alter system switch logfile;;
11 DECLARE
12 CURSOR cur_tablespace IS
13 SELECT tablespace_name
14 FROM dba_tablespaces
15 WHERE status <> 'READ ONLY';
16 CURSOR cur_datafile (tn VARCHAR) IS
17 SELECT file_name
18 FROM dba_data_files
19 WHERE tablespace_name = tn;
20 BEGIN
21 FOR ct IN cur_tablespace LOOP
22 dbms_output.put_line('alter tablespace ' || ct.tablespace_name || ' begin backup;');
23 FOR cd IN cur_datafile(ct.tablespace_name) LOOP
24 dbms_output.put_line('host copy ' || cd.file_name || ' &dir');
25 END LOOP;
26 dbms_output.put_line('alter tablespace ' || ct.tablespace_name || ' end backup;');
27 END LOOP;
28 END;
29 /
30 prompt alter system switch logfile;;
31 prompt archive log list;;
32 prompt spool off;;
33 spool off;
34 @&fil
步驟三:配置控制文件腳本
有一個捷徑可以讓數據庫產生創建一個新的控制文件所需要的指令:
使用這個命令Oracle會創建包含創建控制文件所需要的全部命令,文件的位置由user_dump_dest初始化參數確定。
2 SQL>SHOW PARAMETER user_dump_dest
這個文件可能以ora123.trc之類的名稱命名,尋找一個日期/時間與提交跟蹤命令時刻相同的文件,打開該文件將看到創建一個控制文件和啟動數據庫所需要的全部命令。把該文件命名為create_control_open.sql,并剪切到D:\oracle\product\10.1.0\admin\CLNE\create目錄下,并做如下改動:
- 刪除腳本的注釋行;
- 將CREATE CONTROLFILE命令中的REUSE關鍵字換成SET關鍵字;
- 將CREATE CONTROLFILE命令中的”PRACTICE”換成”CLNE”;
- 將每個數據文件和重做日志的所在位置從D:\oracle\PRACTICE更為換為D:\oracle\CLNE
完成修改后,文件如下:
2 CREATE CONTROLFILE SET DATABASE "CLNE" RESETLOGS ARCHIVELOG
3 MAXLOGFILES 16
4 MAXLOGMEMBERS 3
5 MAXDATAFILES 100
6 MAXINSTANCES 8
7 MAXLOGHISTORY 454
8 LOGFILE
9 GROUP 1 'D:\ORACLE\CLNE\REDO01.LOG' SIZE 10M,
10 GROUP 2 'D:\ORACLE\CLNE\REDO02.LOG' SIZE 10M,
11 GROUP 3 'D:\ORACLE\CLNE\REDO03.LOG' SIZE 10M
12 DATAFILE
13 'D:\ORACLE\CLNE\SYSTEM01.DBF',
14 'D:\ORACLE\CLNE\UNDOTBS01.DBF',
15 'D:\ORACLE\CLNE\SYSAUX01.DBF',
16 'D:\ORACLE\CLNE\USERS01.DBF',
17 'D:\ORACLE\CLNE\USERS02.DBF',
18 'D:\ORACLE\CLNE\TOOLS01.DBF',
19 'D:\ORACLE\CLNE\TS4DROP01.DBF'
20 CHARACTER SET ZHS16GBK;
- 第1行啟動數據庫實例,并打開控制文件??梢杂肞FILE選項制定數據庫參數文件,若不指定參數文件,Oracle服務器會根據ORACLE_SID設置以及操作系統打開某一個默認位置下的文件;
- 第2行創建控制文件,當創建控制文件時,將會重新命名數據庫。由于不能改變重做日志中的數據庫名稱,因此這些重做日志必須重新創建。為了改變控制文件中的數據庫名稱,可以在CREATE CONTROLFILE命令中使用SET和RESETLOGS關鍵字,控制文件中的RESETLOGS選項將創建新的重做日志;
- 第8-11行用創建日志文件,用RESETLOGS選項表示重新創建;
- 第12-20行定義組成數據庫的那些數據文件。
步驟四:運行控制文件腳本
使用SYSDBA登錄SQL*Plus數據庫,運行D:\oracle\product\10.1.0\admin\CLNE\create路徑下的create_control_open.sql腳本,創建一組新的控制文件。
2 WIN>sqlplus /nolog
3 SQL>conn sys/CLNE as sysdba
4 SQL>@D:\oracle\product\10.1.0\admin\CLNE\create\create_control_open.sql
步驟五:恢復克隆數據庫
步驟四已經為CLNE數據庫創建了一組新的控制文件,由于數據文件是打開數據庫備份的,所以必須對這些歸檔日志進行恢復。無論采用完全或不完全恢復,需使用PRACTICE的歸檔日志文件:
命令通知CLNE實例在PRACTICE數據庫的歸檔目的路徑中尋在用于恢復的歸檔日志,在這里采用取消式恢復:
在提示下至少應用過一個歸檔日志文件,通過應用重做日志,所有的數據文件都將提升到同樣的SCN。如果要進行完全恢復,可以采用如下兩種選擇:
- 在PRACTICE數據庫上進行強制數據庫切換,將新歸檔的日志應用于CLNE數據庫;
- 關閉PRACTICE數據庫,把其數據庫的當前重做日志應用于CLNE數據庫上。
如果恢復了CLNE數據庫,將看到MEDIA RECOVERY COMPLETE。需要注意數據庫不斷寫入到當前聯機日志,所以在PRACTICE數據庫打開是不要嘗試應用PRACITCE當前重做日志到CLNE中。
步驟六:打開克隆數據庫
截至恢復被取消或完成的消息之后,使用RESETLOG選項打開數據庫:

浙公網安備 33010602011771號