源庫RHEL4.5:192.168.137.199 GLOBAL_NAME=WENDING.LK Oracle_SID=WENDING
複製庫RHEL4.5:192.168.137.200 GLOBAL_NAME=STRM.LK ORACLE_SID=STRM
1. 全備份源庫
$ sqlplus '/as sysdba'
記下備份前的SCN,規複的時間就規複到這個點。
SQL> select DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
181557
SQL> exit
$ mkdir -p /orahome/backup
$ cd /orahome
$ vi backup.rcv
run{
allocate channel c1 type disk;
backup full database format '/orahome/backup/db_t%t_s%s_p%p.bak';
backup archivelog all format '/orahome/backup/arch_u%u.bak';
backup current controlfile format '/orahome/backup/cf_u%u.bak';
release channel c1;
}
$ nohup rman target / @backup.rcv log backup.log &
$ tail -50f backup.log
參照源庫參數檔案建立一個複製庫參數檔案:
SQL> create pfile = '/orahome/backup/initSTRM.ora' from spfile;
得到源庫資料檔案的編號和寄放職位 資訊,是為了預備複製庫參數db_file_name_convert或rman規複時set newname的設定:
$ sqlplus '/as sysdba'
SQL> col name format a60
SQL> set lines 1024
SQL> select file#,name from v$datafile union all select file#,name from v$tempfile;
FILE# NAME
---------- ------------------------------------------------------------
1 /orahome/oradata/WENDING/system.dbf
2 /orahome/oradata/WENDING/undotbs1.dbf
3 /orahome/oradata/WENDING/sysaux.dbf
4 /orahome/oradata/WENDING/users01.dbf
1 /orahome/oradata/WENDING/temp01.dbf
SQL> exit
拷貝備份檔案到複製庫主機的同一職位 ,確保複製庫主機也有目次 /orahome/backup。
$ cd /orahome/backup
$ scp *.bak 192.168.137.200:/orahome/backup
$ scp initSTRM.ora 192.168.137.200:/orahome/backup
2. 複製庫預備事變
複製庫上設定干係 的環境 變數:
$ vi .bash_profile (思量 從源庫主機拷貝一份,然後批改ORACLE_SID參數值)
export ORACLE_BASE=/u01/app/oracle;
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1;
export ORACLE_SID=STRM;
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
$ . .bash_profile
3. 批改複製庫參數檔案
$ vi /orahome/backup/initSTRM.ora
:%s/WENDING/STRM/g
一樣平常批改以下參數:
audit_file_dest,background_dump_dest,core_dump_dest,user_dump_dest,db_name,db_unique_name,log_archive_dest_1,control_files.
並確保以下參數:
*.remote_login_passwordfile = exclusive
*.DB_FILE_NAME_CONVERT = '/orahome/oradata/WENDING/', '/orahome/oradata/STRM/'
4. 按照步調 3批改的路徑資訊在複製庫主機建立須要的目次
$ mkdir -p /orahome/flash_recovery_area
$ mkdir -p /orahome/arch/STRM
$ mkdir -p /orahome/oradata/STRM/
$ mkdir -p /u01/app/oracle/admin/STRM/adump
mkdir -p /u01/app/oracle/admin/STRM/bdump
mkdir -p /u01/app/oracle/admin/STRM/cdump
mkdir -p /u01/app/oracle/admin/STRM/dpdump
mkdir -p /u01/app/oracle/admin/STRM/udump
5. 在複製庫建立 一個新的password檔案
(unix/Linux下暗碼檔案技倆必需是orapw<SID>)
$ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=iamwangnc force=y
6. 複製庫startup nomount
$ sqlplus '/as sysdba'
SQL> create spfile from pfile='/orahome/backup/initSTRM.ora';
SQL> startup nomount;
SQL> exit
7. 複製庫用rman規複
$ cd /orahome
$ vi recover.rcv (由於源庫在全備後還也許發生歸檔檔案,以是規複的時間要設定set until值,不然會發生過錯 RMAN-06025)
run{
allocate auxiliary channel c1 type disk;
# set until time '2008-11-21.11:33:31';
# set until sequence 21254 thread 1;
set until scn 181557;
duplicate target database to STRM
LOGFILE
group 1 ('/orahome/oradata/STRM/REDO01.DBF') SIZE 50M,
group 2 ('/orahome/oradata/STRM/REDO02.DBF') SIZE 50M,
group 3 ('/orahome/oradata/STRM/REDO03.DBF') SIZE 50M;
}
其它set newname和LOGFILE後頭的檔案職位 資訊可以按照本身必要 設定。
起頭規複:(wending.lk是源庫做事名,確保源庫的監聽已經啟動)
$ nohup rman target sys/iamwangnc@192.168.137.199:1521/wending.lk auxiliary / @recover.rcv log recover.log &
$ tail -50f recover.log
…
database opened
Finished Duplicate Db at 2008-11-21 13:02:39
規複資料庫時發生如下過錯:RMAN-06025: no backup of log thread 1 seq 21255 scn 4144283685 found to restore
多次執行備份﹐然後複製﹐發現有時候出錯﹐有時候不出錯。非常費解。後來在仔細觀察發現,在短缺末了一個歸檔日記檔案會出錯。而這個日記檔案是在備份之後產
生的﹐目標資料的備份中沒有。把這個檔案傳遞到目標主機就可以了。而假如產生備份之後﹐短時間之內複製﹐原資料庫沒有歸檔檔案﹐則不會出現錯誤。這個在很多
操縱文檔中﹐沒有講到。
8. 測試複製庫
$ sqlplus '/as sysdba'
SQL> select status from v$instance;
SQL> archive log list;