Oracle 11 g2 版本下,duplicating a database 有兩種方法:
1. Active database duplication
2. Backup-based duplication
通過duplicate 一個數據庫的好處在於:
Test backup and recovery procedures
Test an upgrade to a new release of Oracle Database
Test the effect of applications on database performance
Create a standby database
Generate reports
先學習基於Backup-based duplication ,比較好理解一些,測試環境:異機同目錄
環境準備前提:
現在有兩臺oracle server,一臺:192.168.1.249 一臺:192.168.1.248
讓192.168.1.249 作爲primary A, 192.168.1.248上就作爲auxiliary B
爲了操作的便捷,我就以auxiliary B爲主要操作點來完成duplicate操作
一:在primary A上操作
現在呢,就通過dbca來創建一個新的oracle database_name和SID,也是再通觀的學習下oracle 創建表和插入數據
通過dbca,會默認創建一個表空間和臨時表空間,測試的就不再創建表空間了,創建表空間的語法:
create tablespace 空間名稱 datafile ' 數據文件的路徑' 大小 size 200m ;
創建一個表:
create table employees (employee_id number(6), first_name varchar2(20),last_name varchar2(25),phone_number varchar2(15),salary number(8,2),department_id number(4), constraint emp_salary_min check (salary > 0) );
在創建表的過程中插入了一些約束
插入數據:
insert into employees (employee_id,first_name,last_name,phone_number,salary,department_id) values (1189,'wang','ying',18920782475,4900,2);
insert into employees (employee_id,first_name,last_name,phone_number,salary,department_id) values (1109,'zhang','ying',18920482475,4900,3);
隨意插入兩條數據就好了,證明表裏有數據就好
二:啓動監聽和打開數據庫:
分別執行:
Lsnrctl start
Sqlplus / as sysdba
Startup;
三:在B上通過netmgr實現遠程庫A的訪問,也就是修改
/opt/oracle/product/11.2.0/dbhome_1/network/admin下的
Tnsnames.ora 和listener.ora 文件
Netmgr
配置listener
之後點擊關閉窗口,保存退出
之後來嘗試下是否在B server上能連接到Aserver上的test05庫
[oracle@test1 ~]$ rman
RMAN> connect target sys/biao_123@test05;
RMAN 連接的格式是: username/password@監聽名(就是上步netmgr建立的到A庫上的監聽名稱)
connected to target database: TEST05 (DBID=4183336084) (表示連接成功)
注意:如果這一步,你不記得在安裝database的時候,記錄的sys、system的密碼的話,解決辦法:
在目標數據庫上,在操作系統的級別登陸數據庫是不需要密碼的
所以可以使用sqlplus / as sysdba (登錄)
更改user sys和system的密碼
Alter user sys identified by 密碼; 這個密碼儘量不要含有‘點號’字符
四:對主庫做備份,完整備份
備份腳本:
run {
########backup databse datafile####
allocate channel ch1 type disk
maxpiecesize=4G;
crosscheck backup;
delete expired backup;
backup
incremental level 0 database
tag 'full_weekly_backup' format '/opt/oracle/rman/backup/dbf_%n_%I_%U.bkp';
delete obsolete;
#########backup archive log #####
sql " alter system archive log current";
backup
archivelog all
format '/opt/oracle/rman/backup/arc_%n_%I_%U.arch'
delete all input;
delete obsolete;
release channel ch1 ;
}
這個是大致寫了一點的備份腳本,通過RMAN去執行RUN就可以了
在主庫A上創建PFILE
Sqlplus登錄
Create pfile from spfile (創建test05 庫的PFILE文件 inittest05.ora ),之後將這個文件同步到auxiliary B上:路徑?/dbs/下 (如果沒有這個文件,auxiliary B上無法識別到test05 這個數據庫)
問號”?”代表的是ORACLE_HOME
需要將備份後的文件同步到auxiliary B上,所以需要在B上創建和A一樣的rman路徑
注意:因爲我們之前插入的數據很少,數據文件很少,通過scp copy就行了。如果是正式的數據庫的話,你備份的文件可能是幾十GB,甚至會上T,這樣的話,基於RMAN-Based duplicate 一個數據庫就會佔用很多的資源,這個問題等下我們會講述到,
五:配置auxiliary B庫
創建和primary A庫一樣的備份路徑
Mkdir -p /opt/oracle/rman/backup
Mkdir -p /opt/oracle/oradata/test05 (數據庫 文件的存放位置)
mkdir -p /opt/oracle/admin/test05/{pfile,adump,bdump}
將primary A上剛纔RMAN備份的文件全部copy過來(這一步是必須要的)
之後,就是要通過RMAN 來進行duplicate 了
在此之前,需要將auxiliary B 將數據庫置於nomount狀態
先shutdown immediate
再 startup nomount pfile=?/dbs/inittest05.ora;
使用RMAN
RMAN> connect target sys/biao_123@test05; (連接到主庫上)
connected to target database: TEST05 (DBID=4183336084)
RMAN> connect auxiliary / ; (auxiliary 標記)
connected to auxiliary database: TEST05 (not mounted)
DUPLICATE CASE
duplicate target database to test05 nofilenamecheck
Logfile
‘/opt/oracle/oradata/test05/redo1.dbf’ size 50m,
‘/opt/oracle/oradata/test05/redo2.dbf’ size 50m; (回車就會執行)
如果RMAN備份的文件很大的話,這個執行的時間是比較長的
在duplicate 日誌的輸出過程中:
Alter clone database open resetlogs;
說明在duplicate的過程中已經對database進行 resetlogs了,這裏指的是archive log 都會清空
executing Memory Script
database opened (數據庫已經打開,通過SQL*PLUS 可以直接操作)
Finished Duplicate Db at 07-AUG-13
以上的日誌輸出表示我們的操作時正確的,成功的
下面就是在auxiliary B上使用SQL * PLUS操作 auxiliary test05 庫了
這樣,基於RMAN-based 操作就完成了
錯誤解決一:
[oracle@test1 ~]$ netmgr
Xlib: connection to ":0.0" refused by server
Xlib: No protocol specified
Exiting
java.lang.NullPointerException
解決辦法:切換到root 賬戶下,執行命令
[ root@test1 rman]# export DISPLAY=:0.0
[root@test1 rman]# xhost +
access control disabled, clients can connect from any host (提示這個是正確的)
之後再切換到oracle賬戶下,執行netmgr
錯誤解決二:
ORA-19504: failed to create file "/opt/oracle/oradata/test05/system01.dbf"
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 2: No such file or directory
failover to previous backup
這個錯誤表示,一要麼是沒有空間,要麼是沒有恰當的權限
沒有權限的話呢
Mkdir -p /opt/oracle/oradata/test05
Chown -R oracle:oinstall /opt/oracle/test05
錯誤解決三:
ORA-09925: Unable to create audit trail file
解決辦法:
mkdir -p /opt/oracle/admin/test05/{pfile,adump,bdump}
運維轉DBA,新手學習交流羣:329638713