ORACLE 11G 之Rman Duplicating a database

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 A192.168.1.248上就作爲auxiliary B

爲了操作的便捷,我就以auxiliary B爲主要操作點來完成duplicate操作

一:在primary A上操作

現在呢,就通過dbca來創建一個新的oracle database_nameSID,也是再通觀的學習下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.oralistener.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的時候,記錄的syssystem的密碼的話,解決辦法:

在目標數據庫上,在操作系統的級別登陸數據庫是不需要密碼的

所以可以使用sqlplus / as sysdba (登錄)

更改user syssystem的密碼

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章