Oracle備份與恢復系列(四)複製資料庫 使用原有的控制檔案

snowdba發表於2014-08-02
克隆Open狀態下的PRACTICE資料庫

實驗目的:在源資料庫PRACTICEopen狀態下,用alter tablespace .. begin backup 的方式備份全庫。 用該備份在一臺新的資料庫伺服器上恢復,驗證備份的有效性。為了操作簡便,克隆資料庫端採用了dbca建立資料庫,用源資料庫的備份來覆蓋所有檔案,執行恢復操作來完成此次克隆。
源資料庫:  192.168.1.20
克隆資料庫:192.168.1.21

此次試驗分為5個步驟

1 準備克隆資料庫
2 備份開啟的PRACTICE資料庫
3 從源庫複製備份到克隆庫
4 恢復克隆的資料庫
5 開啟克隆的資料庫

step1 準備克隆資料庫

在克隆資料庫主機上建立資料檔案、歸檔日誌、備份檔案目錄
mkdir /oradata
mkdir /archive
mkdir /backup
chown oracle:oinstall /oradata
chown oracle:oinstall /archive
chown oracle:oinstall /backup

dbca建庫

step2 備份Open狀態下的PRACTICE資料庫

該指令碼是在源資料庫open狀態下執行alter tablespace begin backup方式進行的。
@/backup/scripts/open_backup.sql

指令碼如下
vi /backup/scripts/open_backup.sql

set feedback off
set pagesize 0
set heading off
set verify off
set linesize 100
set trimspool on
define dir = '/backup/open_backup'
define fil = '/backup/scripts/open_backup_commands.sql'
define spo = '&dir/open_backup_output.lst'
set serveroutput on
spool &fil
prompt spool &spo
prompt archive log list;;
prompt alter system switch logfile;;
prompt alter system archive log all;;
DECLARE
rem不備份臨時表空間
CURSOR cur_tablespace IS
  SELECT tablespace_name
    FROM dba_tablespaces where tablespace_name<>'TEMP';

CURSOR cur_datafile (tn VARCHAR) IS
  SELECT file_name
    FROM dba_data_files
   WHERE tablespace_name = tn;
BEGIN
  FOR ct IN cur_tablespace LOOP
    dbms_output.put_line ('alter tablespace '||ct.tablespace_name||' begin backup;');
    FOR cd IN cur_datafile (ct.tablespace_name) LOOP
       dbms_output.put_line ('host cp '||cd.file_name||' &dir');
    END LOOP;
    dbms_output.put_line ('alter tablespace '||ct.tablespace_name||' end backup;');
  END LOOP;
END;
/
prompt alter system switch log file;;
rem 注意此處只備份了一個控制檔案,需要手工複製一份到快速恢復區/u01/app/oracle/fast_recovery_area/PRACTICE
prompt alter database backup controlfile to '&dir./control01.ctl' REUSE;; 
prompt archive log list;;
prompt spool off
spool off;
@&fil


step3 從源庫複製備份到克隆庫

在源資料庫端root使用者下執行以下複製操作
複製spfile檔案
scp /u01/app/oracle/product/11.2.0/db_1/dbs/spfilePRACTICE.ora 192.168.1.21:/u01/app/oracle/product/11.2.0/db_1/dbs/
複製資料檔案、控制檔案
scp /backup/open_backup/* 192.168.1.21:/backup/
複製歸檔日誌檔案
scp -r /archive/ 192.168.1.21:/

在克隆資料庫端修改組屬
chown oracle:oinstall /u01/app/oracle/product/11.2.0/db_1/dbs/spfilePRACTICE.ora
chown oracle:oinstall /oradata
chown oracle:oinstall /archive

在克隆資料庫端複製一份複製過來的控制檔案到閃回區
cp /backup/control01.ctl /u01/app/oracle/fast_recovery_area/PRACTICE/control02.ctl

step4 恢復克隆的資料庫

recover database until cancel using backup control file;

ORA-00279: change 1304004 generated at 08/02/2014 10:52:46 needed for thread 1
ORA-00289: suggestion : /archive/1_2_854446453.arc
ORA-00280: change 1304004 for thread 1 is in sequence #2

Specify log: {=suggested | filename | AUTO | CANCEL}

ORA-00279: change 1304100 generated at 08/02/2014 10:53:08 needed for thread 1
ORA-00289: suggestion : /archive/1_3_854446453.arc
ORA-00280: change 1304100 for thread 1 is in sequence #3
ORA-00278: log file '/archive/1_2_854446453.arc' no longer needed for this
recovery

Specify log: {=suggested | filename | AUTO | CANCEL}

ORA-00279: change 1304837 generated at 08/02/2014 11:03:41 needed for thread 1
ORA-00289: suggestion : /archive/1_4_854446453.arc
ORA-00280: change 1304837 for thread 1 is in sequence #4
ORA-00278: log file '/archive/1_3_854446453.arc' no longer needed for this
recovery

Specify log: {=suggested | filename | AUTO | CANCEL}

Log applied.
Media recovery complete.
SYS@PRACTICE >
SYS@PRACTICE >
SYS@PRACTICE >alter database open resetlogs;


step5 開啟克隆的資料庫
alter database open resetlogs;

由於dbca建庫包含了temp01.dbf臨時表空間檔案,所以不需要再次新增了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29047826/viewspace-1244325/,如需轉載,請註明出處,否則將追究法律責任。

相關文章