日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

一次使用duplicate创建测试数据库的过程

發布時間:2025/3/15 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一次使用duplicate创建测试数据库的过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于管理不善,測試機的環境和生產機的環境已經相差甚遠了,于是一狠心重建測試機,重建的第一步,重建數據庫,我采用rman的duplicate命令從生產數據庫復制到測試數據庫的方式,雖然過程不太順利,還是有一定的參考性的。

?

飛鴿傳書:http://www.freeeim.com/

1。找出數據庫相關文件的位置

spfile/pfile

我用的是spfile,如果您用的是pfile,過程類似,這里就不熬了,先找到這個spfile,通常來說是 $ORACLE_HOME/dbs/spfile$ORACLE_SID 。

view source print?
1sys$ora8i@4.20 SQL> show parameter spfile
2??
3NAME????????????? TYPE??????? VALUE
4----------------- ----------- ------------------------------------
5spfile??????????? string????? /u01/app/oracle/dbs/spfileora8i.ora

數據文件、日志文件和控制文件

view source print?
01sys$ora8i@4.20 SQL> select name from v$datafile
02??2? union all?
03??3? select name from v$controlfile
04??4? union all
05??5? select member from v$logfile;
06??
07NAME
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?
01# 在測試機中確保這些目錄都存在:?
02[oracle@test-server ora8i]$ ls? /u01/app/oracle/dbs/???
03hc_ora8i.dat? initdw.ora? init.ora? lkORA8I? old? orapwora8i? spfileora8i.ora
04[oracle@test-server ora8i]$ ls /u02/oradata/ora8i/?
05ls: /u02/oradata/ora8i/: 沒有那個文件或目錄
06# 不存在的目錄就創建它:
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`
3oracle@10.168.4.74's password:?
4spfileora8i.ora??????????????????????????????????????????????????????? 100% 3584???? 3.5KB/s?? 00:00????
5orapwora8i???????????????????????????????????????????????????????????? 100% 1536???? 1.5KB/s?? 00:00

在測試機中可以這樣檢測這兩個文件是否可用:

檢查spfile:將數據庫啟動到nomount;

由于測試機和生產機的存在硬件上的差異(主要是內容)要將SGA調小一點[跳過]:

view source print?
01SQL> show parameter sga;
02??
03NAME???????????????????????????????? TYPE?????????????????? VALUE
04------------------------------------ ---------------------- ------------------------------
05lock_sga???????????????????????????? boolean??????????????? FALSE
06pre_page_sga???????????????????????? boolean??????????????? FALSE
07sga_max_size???????????????????????? big integer??????????? 1600M
08sga_target?????????????????????????? big integer??????????? 1600M
09SQL> alter system set sga_target=400M;
10??
11alter system set sga_target=400M
12*
13ERROR at line 1:
14ORA-02097: parameter cannot be modified because specified value is invalid
15ORA-00827: could not shrink sga_target to specified value
16??
17SQL> alter system set sga_target=400M scope=spfile;??
18??
19System altered.
20??
21SQL> alter system set sga_max_size=500M scope=spfile;??
22??
23System altered.
24??
25SQL> shutdown immediate;??
26ORA-01507: database not mounted
27??
28ORACLE instance shut down.
29SQL> startup nomount;?
30ORA-00821: Specified value of sga_target 400M is too small, needs to be at least 788M
31??
32-- 沒辦法,創建pfile,改吧
33SQL> 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 就可以了。
39??
40SQL> startup nomount pfile='/u01/app/oracle/dbs/initora8i.ora'?
41ORACLE instance started.
42??
43Total System Global Area? 524288000 bytes
44Fixed Size????????????????? 2072472 bytes
45Variable Size???????????? 205521000 bytes
46Database Buffers????????? 310378496 bytes
47Redo Buffers??????????????? 6316032 bytes
48SQL> shutdown immediate ;???
49ORA-01507: database not mounted
50??
51??
52ORACLE instance shut down.
53??
54-- 參數沒有問題后,可以創建spfile,以后啟動的時候可以使用spfile了
55SQL> create spfile from pfile;?
56??
57File created.
58??
59SQL> startup ;?
60ORACLE instance started.
61??
62Total System Global Area? 524288000 bytes
63Fixed Size????????????????? 2072472 bytes
64Variable Size???????????? 205521000 bytes
65Database Buffers????????? 310378496 bytes
66Redo Buffers??????????????? 6316032 bytes
67ORA-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
2SQL*Plus: Release 10.2.0.2.0 - Production on Mon May 10 14:01:47 2010
3Copyright (c) 1982, 2005, Oracle.? All Rights Reserved.
4??
5Connected to an idle instance.
6??
7SQL>

如果上述兩部有問題的話請認真調試。

5。準備數據

在生產機上面做一個全備,由于機器比較空閑,壓一壓,要依據實際情況寫腳本哦。

view source print?
01RMAN> run
022> {
033>?? allocate channel c1 device type disk ;
044>?? backup
055>?? as compressed backupset
066>?? tag 'build_test_db'
077>?? database
088>?? INCLUDE CURRENT CONTROLFILE
099>?? format '/u01/app/backup/backup_4.20_%I_%T_%s' ;
1010>?? release channel c1 ;
1111> }
12....
13....
14....
15rman> list backup ;?
16BS Key? Type LV Size?????? Device Type Elapsed Time Completion Time????
17------- ---- -- ---------- ----------- ------------ -------------------
18856???? 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
34??
35BS Key? Type LV Size?????? Device Type Elapsed Time Completion Time????
36------- ---- -- ---------- ----------- ------------ -------------------
37857???? 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`?
3oracle@10.168.4.74's password:?
4backup_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`
6oracle@10.168.4.74's password:?
7backup_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?
2關鍵是這兩句,最后確定一下兩個數據的狀態:
3connected to target database: ORA8I (DBID=57919146)
4connected to auxiliary database: ORA8I (not mounted)
5??
6RMAN> DUPLICATE TARGET DATABASE TO ORA8I NOFILENAMECHECK;

我建議,此時在生產機上作一次日志切換,并將從全備開始時到剛生成的所有日志文件復制到測試服務器相對應的目錄中,否則有可能出現以下問題[跳過]

view source print?
01channel ORA_AUX_DISK_1: starting datafile backupset restore
02channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
03.....
04.....
05channel ORA_AUX_DISK_1: reading from backup piece /u01/app/backup/backup_4.20_57919146_20100510_886
06ORA-19870: error reading backup piece /u01/app/backup/backup_4.20_57919146_20100510_886
07ORA-19505: failed to identify file "/u01/app/backup/backup_4.20_57919146_20100510_886"
08ORA-27037: unable to obtain file status
09Linux-x86_64 Error: 2: No such file or directory
10Additional information: 3
11failover to previous backup
12??
13channel ORA_AUX_DISK_1: starting datafile backupset restore
14channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
15.....
16.....
17channel ORA_AUX_DISK_1: reading from backup piece /u01/app/backup/backup_4.20_57919146_20100509_884
18ORA-19870: error reading backup piece /u01/app/backup/backup_4.20_57919146_20100509_884
19ORA-19505: failed to identify file "/u01/app/backup/backup_4.20_57919146_20100509_884"
20ORA-27037: unable to obtain file status
21Linux-x86_64 Error: 2: No such file or directory
22Additional information: 3
23failover to previous backup
24??
25RMAN-00571: ===========================================================
26RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
27RMAN-00571: ===========================================================
28RMAN-03002: failure of Duplicate Db command at 05/10/2010 14:47:54
29RMAN-03015: error occurred in stored script Memory Script
30RMAN-06026: some targets not found - aborting restore

原因是不能在測試機(auxiliary)找不到備份集,仔細看一下rman是從“最近”的備份集開始找的,但就是跳過了最最新的,這是由于在歸檔模式下的備份是非一致性備份,還需要redo的信息才能使之變成一致性的,而這些信息暫時還在online redo log中,簡單來說就是還沒有出生(歸檔),我們可以切換一下日志文件,使之生成歸檔日志文件,并傳到測試服務器上,對應的目錄下面。

將剛才duplicate在測試機上生成的文件統統刪掉,再次duplicate

view source print?
1RMAN> DUPLICATE TARGET DATABASE TO ORA8I NOFILENAMECHECK;
2??
3........
4contents of Memory Script:
5{
6???Alter clone database open resetlogs;
7}
8executing Memory Script

?

rman停在這里了。此時可以從測試機的alert文件中找到這么一句話:

view source print?
1Active process 6260 user 'oracle' program 'oracle@test-server (TNS V1-V3)'
2SHUTDOWN: waiting for logins to complete.

現在只要登錄到數據庫中就大功告成了。

總結

以上是生活随笔為你收集整理的一次使用duplicate创建测试数据库的过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。