生活随笔
收集整理的這篇文章主要介紹了
一次使用duplicate创建测试数据库的过程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
由于管理不善,測試機的環境和生產機的環境已經相差甚遠了,于是一狠心重建測試機,重建的第一步,重建數據庫,我采用rman的duplicate命令從生產數據庫復制到測試數據庫的方式,雖然過程不太順利,還是有一定的參考性的。
?
飛鴿傳書:http://www.freeeim.com/
1。找出數據庫相關文件的位置
spfile/pfile
我用的是spfile,如果您用的是pfile,過程類似,這里就不熬了,先找到這個spfile,通常來說是 $ORACLE_HOME/dbs/spfile$ORACLE_SID 。
view source print?
| 1 | sys$ora8i@4.20 SQL> show parameter spfile |
| 3 | NAME????????????? TYPE??????? VALUE |
| 4 | ----------------- ----------- ------------------------------------ |
| 5 | spfile??????????? string????? /u01/app/oracle/dbs/spfileora8i.ora |
數據文件、日志文件和控制文件
view source print?
| 01 | sys$ora8i@4.20 SQL> select name from v$datafile |
| 03 | ??3? select name from v$controlfile |
| 05 | ??5? select member from v$logfile; |
| 08 | -------------------------------------------- |
| 09 | /u02/oradata/ora8i/system01.dbf |
| 10 | /u02/oradata/ora8i/undotbs01.dbf |
| 11 | /u02/oradata/ora8i/sysaux01.dbf |
| 12 | /u02/oradata/ora8i/users01.dbf |
| 13 | /u02/oradata/ora8i/E3.dbf |
| 14 | /u02/oradata/ora8i/switch01.dbf |
| 15 | /u02/oradata/ora8i/PSS.dbf |
| 16 | /u02/oradata/ora8i/CTXSYS.dbf |
| 17 | /u02/oradata/ora8i/e3_02.dbf |
| 18 | /u02/oradata/ora8i/CMS_1.dbf |
| 19 | /u02/oradata/ora8i/control01.ctl |
| 20 | /u02/oradata/ora8i/control02.ctl |
| 21 | /u02/oradata/ora8i/control03.ctl |
| 22 | /u02/oradata/ora8i/redo01.log |
| 23 | /u02/oradata/ora8i/redo02.log |
| 24 | /u02/oradata/ora8i/redo03.log |
| 25 | /u02/oradata/ora8i/redo04.log |
| 26 | /u02/oradata/ora8i/redo05.log |
| 27 | /u02/oradata/ora8i/redo06.log |
從以上信息來看spfile放在/u01/app/oracle/dbs/ ,數據文件、重做日志文件和控制文件都放在/u02/oradata/ora8i/。
2。在測試機中建立對應的目錄
在測試機中檢查這些目錄,確保這些目錄都存在:
view source print?
| 02 | [oracle@test-server ora8i]$ ls? /u01/app/oracle/dbs/??? |
| 03 | hc_ora8i.dat? initdw.ora? init.ora? lkORA8I? old? orapwora8i? spfileora8i.ora |
| 04 | [oracle@test-server ora8i]$ ls /u02/oradata/ora8i/? |
| 05 | ls: /u02/oradata/ora8i/: 沒有那個文件或目錄 |
| 07 | [root@test-server ~]# cd / |
| 08 | [root@test-server /]# mkdir u02 |
| 09 | [root@test-server /]# chown oracle:dba /u02 |
| 10 | [root@test-server /]# mkdir -p /u02/oradata/ora8i/? |
| 11 | [root@test-server /]# chown -R oracle:dba /u02 |
3。清理好測試服務器
測試服務器裝好的時候還有個數據,所以 /u01/app/oracle/dbs/ 中還有文件。
在測試機上關閉數據庫,然后將相關的數據文件都備份好,由于這個不是重點,這里就不熬述了。
4。配置測試服務器
將spfile和密碼文件copy到測試機上面,目錄要對應好。
view source print?
| 1 | [oracle@localhost dbs]$ cd /u01/app/oracle/dbs? |
| 2 | [oracle@localhost dbs]$ scp ./spfileora8i.ora ./orapwora8i? 10.168.4.74:`pwd` |
| 3 | oracle@10.168.4.74's password:? |
| 4 | spfileora8i.ora??????????????????????????????????????????????????????? 100% 3584???? 3.5KB/s?? 00:00???? |
| 5 | orapwora8i???????????????????????????????????????????????????????????? 100% 1536???? 1.5KB/s?? 00:00 |
在測試機中可以這樣檢測這兩個文件是否可用:
檢查spfile:將數據庫啟動到nomount;
由于測試機和生產機的存在硬件上的差異(主要是內容)要將SGA調小一點[跳過]:
view source print?
| 01 | SQL> show parameter sga; |
| 03 | NAME???????????????????????????????? TYPE?????????????????? VALUE |
| 04 | ------------------------------------ ---------------------- ------------------------------ |
| 05 | lock_sga???????????????????????????? boolean??????????????? FALSE |
| 06 | pre_page_sga???????????????????????? boolean??????????????? FALSE |
| 07 | sga_max_size???????????????????????? big integer??????????? 1600M |
| 08 | sga_target?????????????????????????? big integer??????????? 1600M |
| 09 | SQL> alter system set sga_target=400M; |
| 11 | alter system set sga_target=400M |
| 14 | ORA-02097: parameter cannot be modified because specified value is invalid |
| 15 | ORA-00827: could not shrink sga_target to specified value |
| 17 | SQL> alter system set sga_target=400M scope=spfile;?? |
| 21 | SQL> alter system set sga_max_size=500M scope=spfile;?? |
| 25 | SQL> shutdown immediate;?? |
| 26 | ORA-01507: database not mounted |
| 28 | ORACLE instance shut down. |
| 30 | ORA-00821: Specified value of sga_target 400M is too small, needs to be at least 788M |
| 33 | SQL> create pfile from spfile;? |
| 34 | [oracle@test-server dbs]$ cd /u01/app/oracle/dbs? |
| 35 | [oracle@test-server dbs]$ vim initora8i.ora? |
| 36 | -- 將開頭那幾行ASMM動態修改的參數去掉, |
| 37 | -- 順便把 pga_aggregate_target,db_cache_size,shared_pool_size 也改小, |
| 38 | -- 總之就是改到能啟動Oracle 就可以了。 |
| 40 | SQL> startup nomount pfile='/u01/app/oracle/dbs/initora8i.ora'? |
| 41 | ORACLE instance started. |
| 43 | Total System Global Area? 524288000 bytes |
| 44 | Fixed Size????????????????? 2072472 bytes |
| 45 | Variable Size???????????? 205521000 bytes |
| 46 | Database Buffers????????? 310378496 bytes |
| 47 | Redo Buffers??????????????? 6316032 bytes |
| 48 | SQL> shutdown immediate ;??? |
| 49 | ORA-01507: database not mounted |
| 52 | ORACLE instance shut down. |
| 54 | -- 參數沒有問題后,可以創建spfile,以后啟動的時候可以使用spfile了 |
| 55 | SQL> create spfile from pfile;? |
| 60 | ORACLE instance started. |
| 62 | Total System Global Area? 524288000 bytes |
| 63 | Fixed Size????????????????? 2072472 bytes |
| 64 | Variable Size???????????? 205521000 bytes |
| 65 | Database Buffers????????? 310378496 bytes |
| 66 | Redo Buffers??????????????? 6316032 bytes |
| 67 | ORA-00205: error in identifying control file, check alert log for more info |
| 68 | -- 這個錯誤是肯定了,spfile只能把oracle帶到nomount階段。 |
?
檢查密碼文件: 先確定listener啟動了,然后再用sys用戶遠程登錄到測試機。
view source print?
| 1 | [oracle@test-server admin]$ sqlplus sys/oracle@ora8i_4_74? as sysdba |
| 2 | SQL*Plus: Release 10.2.0.2.0 - Production on Mon May 10 14:01:47 2010 |
| 3 | Copyright (c) 1982, 2005, Oracle.? All Rights Reserved. |
| 5 | Connected to an idle instance. |
如果上述兩部有問題的話請認真調試。
5。準備數據
在生產機上面做一個全備,由于機器比較空閑,壓一壓,要依據實際情況寫腳本哦。
view source print?
| 03 | 3>?? allocate channel c1 device type disk ; |
| 05 | 5>?? as compressed backupset |
| 06 | 6>?? tag 'build_test_db' |
| 08 | 8>?? INCLUDE CURRENT CONTROLFILE |
| 09 | 9>?? format '/u01/app/backup/backup_4.20_%I_%T_%s' ; |
| 10 | 10>?? release channel c1 ; |
| 16 | BS Key? Type LV Size?????? Device Type Elapsed Time Completion Time???? |
| 17 | ------- ---- -- ---------- ----------- ------------ ------------------- |
| 18 | 856???? Full??? 824.35M??? DISK??????? 00:06:14???? 2010-05-10 14:24:34 |
| 19 | ????????BP Key: 856?? Status: AVAILABLE? Compressed: YES? Tag: BUILD_TEST_DB |
| 20 | ????????Piece Name: /u01/app/backup/backup_4.20_57919146_20100510_888 ******************* |
| 21 | ??List of Datafiles in backup set 856 |
| 22 | ??File LV Type Ckp SCN??? Ckp Time??????????? Name |
| 23 | ??---- -- ---- ---------- ------------------- ---- |
| 24 | ??1?????? Full 121784138? 2010-05-10 14:18:20 /u02/oradata/ora8i/system01.dbf |
| 25 | ??2?????? Full 121784138? 2010-05-10 14:18:20 /u02/oradata/ora8i/undotbs01.dbf |
| 26 | ??3?????? Full 121784138? 2010-05-10 14:18:20 /u02/oradata/ora8i/sysaux01.dbf |
| 27 | ??4?????? Full 121784138? 2010-05-10 14:18:20 /u02/oradata/ora8i/users01.dbf |
| 28 | ??5?????? Full 121784138? 2010-05-10 14:18:20 /u02/oradata/ora8i/E3.dbf |
| 29 | ??7?????? Full 121784138? 2010-05-10 14:18:20 /u02/oradata/ora8i/switch01.dbf |
| 30 | ??8?????? Full 121784138? 2010-05-10 14:18:20 /u02/oradata/ora8i/PSS.dbf |
| 31 | ??11????? Full 121784138? 2010-05-10 14:18:20 /u02/oradata/ora8i/CTXSYS.dbf |
| 32 | ??13????? Full 121784138? 2010-05-10 14:18:20 /u02/oradata/ora8i/e3_02.dbf |
| 33 | ??16????? Full 121784138? 2010-05-10 14:18:20 /u02/oradata/ora8i/CMS_1.dbf |
| 35 | BS Key? Type LV Size?????? Device Type Elapsed Time Completion Time???? |
| 36 | ------- ---- -- ---------- ----------- ------------ ------------------- |
| 37 | 857???? Full??? 1.13M????? DISK??????? 00:00:02???? 2010-05-10 14:24:37 |
| 38 | ????????BP Key: 857?? Status: AVAILABLE? Compressed: YES? Tag: BUILD_TEST_DB |
| 39 | ????????Piece Name: /u01/app/backup/backup_4.20_57919146_20100510_889 ******************* |
| 40 | ??Control File Included: Ckp SCN: 121785222??? Ckp time: 2010-05-10 14:24:35 |
| 41 | ??SPFILE Included: Modification time: 2010-05-08 00:11:48 |
將這兩個新生成的備份集的文件到copy到測試機對應的目錄中,當然做之前要檢查目錄是否存在:
view source print?
| 1 | [oracle@localhost backup]$ cd /u01/app/backup/ |
| 2 | [oracle@localhost backup]$ scp /u01/app/backup/backup_4.20_57919146_20100510_888 10.168.4.74:`pwd`? |
| 3 | oracle@10.168.4.74's password:? |
| 4 | backup_4.20_57919146_20100510_888????????????????????????????????????? 100%? 824MB? 14.7MB/s?? 00:56???? |
| 5 | [oracle@localhost backup]$ scp /u01/app/backup/backup_4.20_57919146_20100510_889 10.168.4.74:`pwd` |
| 6 | oracle@10.168.4.74's password:? |
| 7 | backup_4.20_57919146_20100510_889????????????????????????????????????? 100% 1168KB?? 1.1MB/s?? 00:00 |
6。開始duplicate
確定一下測試機(在rman的角度來說是auxiliary)處于nomount 階段,生產機(在rman的角度來說是target)處于mount或open階段。在生產機的rman中執行:
view source print?
| 1 | [oracle@localhost backup]$ rman target /? auxiliary sys/oracle@ora8i_4_74? |
| 3 | connected to target database: ORA8I (DBID=57919146) |
| 4 | connected to auxiliary database: ORA8I (not mounted) |
| 6 | RMAN> DUPLICATE TARGET DATABASE TO ORA8I NOFILENAMECHECK; |
我建議,此時在生產機上作一次日志切換,并將從全備開始時到剛生成的所有日志文件復制到測試服務器相對應的目錄中,否則有可能出現以下問題[跳過]
view source print?
| 01 | channel ORA_AUX_DISK_1: starting datafile backupset restore |
| 02 | channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set |
| 05 | channel ORA_AUX_DISK_1: reading from backup piece /u01/app/backup/backup_4.20_57919146_20100510_886 |
| 06 | ORA-19870: error reading backup piece /u01/app/backup/backup_4.20_57919146_20100510_886 |
| 07 | ORA-19505: failed to identify file "/u01/app/backup/backup_4.20_57919146_20100510_886" |
| 08 | ORA-27037: unable to obtain file status |
| 09 | Linux-x86_64 Error: 2: No such file or directory |
| 10 | Additional information: 3 |
| 11 | failover to previous backup |
| 13 | channel ORA_AUX_DISK_1: starting datafile backupset restore |
| 14 | channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set |
| 17 | channel ORA_AUX_DISK_1: reading from backup piece /u01/app/backup/backup_4.20_57919146_20100509_884 |
| 18 | ORA-19870: error reading backup piece /u01/app/backup/backup_4.20_57919146_20100509_884 |
| 19 | ORA-19505: failed to identify file "/u01/app/backup/backup_4.20_57919146_20100509_884" |
| 20 | ORA-27037: unable to obtain file status |
| 21 | Linux-x86_64 Error: 2: No such file or directory |
| 22 | Additional information: 3 |
| 23 | failover to previous backup |
| 25 | RMAN-00571: =========================================================== |
| 26 | RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== |
| 27 | RMAN-00571: =========================================================== |
| 28 | RMAN-03002: failure of Duplicate Db command at 05/10/2010 14:47:54 |
| 29 | RMAN-03015: error occurred in stored script Memory Script |
| 30 | RMAN-06026: some targets not found - aborting restore |
原因是不能在測試機(auxiliary)找不到備份集,仔細看一下rman是從“最近”的備份集開始找的,但就是跳過了最最新的,這是由于在歸檔模式下的備份是非一致性備份,還需要redo的信息才能使之變成一致性的,而這些信息暫時還在online redo log中,簡單來說就是還沒有出生(歸檔),我們可以切換一下日志文件,使之生成歸檔日志文件,并傳到測試服務器上,對應的目錄下面。
將剛才duplicate在測試機上生成的文件統統刪掉,再次duplicate
view source print?
| 1 | RMAN> DUPLICATE TARGET DATABASE TO ORA8I NOFILENAMECHECK; |
| 4 | contents of Memory Script: |
| 6 | ???Alter clone database open resetlogs; |
?
rman停在這里了。此時可以從測試機的alert文件中找到這么一句話:
view source print?
| 1 | Active process 6260 user 'oracle' program 'oracle@test-server (TNS V1-V3)' |
| 2 | SHUTDOWN: waiting for logins to complete. |
現在只要登錄到數據庫中就大功告成了。
總結
以上是生活随笔為你收集整理的一次使用duplicate创建测试数据库的过程的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。