使用RMAN執行oracle ASM資料遷移

湖湘文化發表於2013-12-16
 

8、使用RMAN執行oracle  ASM資料遷移

Oracle ASM資料遷移概述

Oracle ASM資料遷移的目的

Oracle ASM的替代品包括檔案系統、裸裝置和SAN配置。和這些替代品相比,Oracle ASM有一些超越的優點,包括效能最佳化、冗餘包含和負載均衡。不再需要第三方的邏輯卷管理器,因為oracle ASM為你管理磁碟。Oracle RAC資料庫受益於oracle ASM,因為它提供現成的共享儲存。在ASM和非ASM中遷移。

本地作業系統命令例如linuxcp或者windowscopy,不能讀寫oracle ASM儲存中的檔案。RMAN可以讀寫oracle ASM檔案,可以使用rman來複製資料檔案到oracle ASM儲存裡或者外、或者在oracle ASM磁碟組之間。如果必須儲存備份到使用者管理的磁碟上,這項技術非常有用。

Oracle ASM資料遷移的基礎概念

遷移需要一個rman資料庫備份。遷移快速恢復區到oracle ASM儲存。遷移一個資料庫從oracle ASM到非ASM,步驟差不多。

使用RMAN資料遷移到oracle ASM的基本步驟

從本地儲存遷移整個資料庫和快速恢復區到oracle ASM,執行如下步驟:

1)  備份資料庫和伺服器引數檔案,並且禁用oracle 閃回資料庫功能。

資料庫閃回和傳統的介質恢復不一樣,因為它不涉及物理檔案的還原,而是使用儲存的改變資料塊映象來還原當前的資料檔案到過去的狀態。這個特性使用閃回日誌和歸檔日誌檔案。

2)  還原檔案到oracle ASM,恢復資料庫,可選地遷移快速恢復區到oracle ASM

使用rman遷移資料庫到oracle ASM準備工作

假設+DATA存放資料庫,+FRA存放快速恢復區

1)如果資料庫引數compatible設定小於11.0.0,那麼將任何只讀可傳輸的表空間置為讀寫模式(只讀可傳輸表空間不能被遷移,因為rman不能備份它們)

2)如果資料庫是物理standby資料庫,如果恢復管理是開啟的,那麼停止恢復管理。

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

(保持該終端視窗開啟狀態)

3)  複製伺服器引數檔案或初始化引數到臨時目錄

$ cp spfileMYDB.ora orig_spfileMYDB.ora

4)  開啟一個新的終端視窗,開啟rman會話,連線到需要被遷移的目標資料庫。可選的,連線到恢復目錄  recovery catalog

5)  備份資料庫檔案到oracle ASM磁碟組

RUN

{

ALLOCATE CHANNEL dev1 DEVICE TYPE DISK;

ALLOCATE CHANNEL dev2 DEVICE TYPE DISK;

ALLOCATE CHANNEL dev3 DEVICE TYPE DISK;

ALLOCATE CHANNEL dev4 DEVICE TYPE DISK;

BACKUP AS COPY

INCREMENTAL LEVEL 0

DATABASE

FORMAT '+DATA'

TAG 'ORA_ASM_MIGRATION';

}

說明:+DATA為存放資料庫的磁碟組名稱。

6)  如果資料庫的快改變跟蹤被啟用了,那麼可選地可以做一個1級別的增量備份,稍後用於資料庫複製恢復。

RUN

{

ALLOCATE CHANNEL dev1 DEVICE TYPE DISK;

ALLOCATE CHANNEL dev2 DEVICE TYPE DISK;

ALLOCATE CHANNEL dev3 DEVICE TYPE DISK;

ALLOCATE CHANNEL dev4 DEVICE TYPE DISK;

BACKUP INCREMENTAL LEVEL 1

FOR RECOVER OF COPY WITH TAG 'ORA_ASM_MIGRATION'

DATABASE;

}

7)  如果資料庫是歸檔模式,如果資料庫是開啟的,那麼歸檔當前線上日誌

RMAN> sql “alter system archive log current”;

8)如果資料庫例項當前使用伺服器引數檔案,那麼備份下

RMAN>backup as backupset spfile;

9)如果塊改變跟蹤被啟用,那麼禁用它

RMAN> SQL "ALTER DATABASE DISABLE BLOCK CHANGE TRACKING";

10)如果閃回資料庫被啟用,那麼禁用它然後刪除任何保證還原點

(如果不準備遷移快速恢復區,那麼跳過此步驟)。

RMAN> SQL "ALTER DATABASE FLASHBACK OFF";

RMAN> SQL "DROP RESTORE POINT Q106";

11)一致性關閉資料庫

RMAN>shutdown immediate;

使用rman遷移資料庫到oracle ASM

最小化資料庫down機時間。步驟會略有不同取決於是否遷移主庫還是備庫。如果不遷移快速恢復區到oracle ASM,那麼必須修改一些步驟,有提示。

1)按照之前的準備步驟進行

2)在oracle ASM儲存中,還原或建立新的伺服器引數檔案

此步驟取決於當前資料庫是否使用伺服器引數檔案。

如果資料庫使用伺服器引數檔案,那麼使用如下命令還原它到oracle ASM磁碟組:

RMAN> STARTUP MOUNT;

RMAN> RESTORE SPFILE TO '+DATA/spfilesid.ora';

RMAN> SHUTDOWN IMMEDIATE;

如果資料庫沒有使用伺服器引數檔案,那麼在oracle ASM中建立一個。在sqlplus中使用create spfile命令:

SQL> CREATE SPFILE='+DATA/spfilesid.ora' FROM PFILE='?/dbs/initsid.ora';

3)設定oracle管理檔案初始化引數到oracle ASM目錄

注意:如果不遷移快速恢復區,那麼不要修改這兩個引數的設定db_recovery_file_destdb_recovery_file_dest_size。但是必須設定引數db_create_online_log_dest_noracle ASM目錄為了遷移線上重做日誌。

設定db_create_file_dest和可選的db_create_online_log_dest_n初始化引數到oracle ASM磁碟組。如果使用快速恢復區,那麼修改快速恢復區目錄到oracle ASM磁碟組,同時修改快速恢復區大小。

SQL> STARTUP FORCE NOMOUNT;

SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST='+DATA' SID='*';

SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=100G SID='*';

SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='+FRA' SID='*';

4)設定初始化引數control_filesoracle ASM目錄

如果遷移快速恢復區,那麼+DATA+FRA

SQL> STARTUP FORCE NOMOUNT;

SQL> ALTER SYSTEM SET CONTROL_FILES='+DATA','+FRA' SCOPE=SPFILE SID='*';

如果不遷移快速恢復區,那麼+DATA+DATA

SQL> STARTUP FORCE NOMOUNT;

SQL> ALTER SYSTEM SET CONTROL_FILES='+DATA','+DATA' SCOPE=SPFILE SID='*';

5)遷移控制檔案到oracle ASM,並且掛載控制檔案

RMAN> STARTUP FORCE NOMOUNT;

RMAN> RESTORE CONTROLFILE FROM 'original_cf_name';

RMAN> ALTER DATABASE MOUNT;

6)遷移資料檔案到oracle ASM

Switch切換重新命名所有資料檔案到oracle ASM磁碟組的檔案。更改控制檔案中的相關資訊。

SWITCH DATABASE TO COPY;

RUN

{

ALLOCATE CHANNEL dev1 DEVICE TYPE DISK;

ALLOCATE CHANNEL dev2 DEVICE TYPE DISK;

ALLOCATE CHANNEL dev3 DEVICE TYPE DISK;

ALLOCATE CHANNEL dev4 DEVICE TYPE DISK;

RECOVER DATABASE;

}

7)如果資料庫使用塊改變跟蹤或者閃回資料庫功能,那麼啟用這些功能

注意:如果你沒有遷移回恢復區那麼你沒有啟用閃回資料庫,除非以前禁用了它

SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '+DATA';

SQL> ALTER DATABASE FLASHBACK ON;

8)將資料庫置於普通操作模式

普通操作模式取決於資料庫是否是主庫還是備庫

如果是主庫,SQL>alter database open;

如果是備庫,那麼恢復管理恢復模式:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE;

9)在oracle ASM中刪除臨時檔案,然後重新建立

SQL> ALTER DATABASE TEMPFILE 'tempfile_name' DROP;

SQL> ALTER TABLESPACE temp_tbs_name ADD TEMPFILE;

10)遷移線上重做日誌檔案

如果是主庫,那麼在oracle ASM中新增新的日誌組成員,然後刪掉舊的成員。還可以使用下面的指令碼來遷移線上重做日誌組到oracle ASM磁碟組。

Example 8–1 Migrating the online redo logs

SET SERVEROUTPUT ON;

DECLARE

CURSOR rlc IS

SELECT GROUP# GRP, THREAD# THR, BYTES, 'NO' SRL

FROM V$LOG

UNION

SELECT GROUP# GRP, THREAD# THR, BYTES, 'YES' SRL

FROM V$STANDBY_LOG

ORDER BY 1;

stmt VARCHAR2(2048);

BEGIN

FOR rlcRec IN rlc LOOP

IF (rlcRec.srl = 'YES') THEN

stmt := 'ALTER DATABASE ADD STANDBY LOGFILE THREAD ' ||

rlcRec.thr || ' SIZE ' || rlcRec.bytes;

EXECUTE IMMEDIATE stmt;

stmt := 'ALTER DATABASE DROP STANDBY LOGFILE GROUP ' || rlcRec.grp;

EXECUTE IMMEDIATE stmt;

ELSE

stmt := 'ALTER DATABASE ADD LOGFILE THREAD ' ||

rlcRec.thr || ' SIZE ' || rlcRec.bytes;

EXECUTE IMMEDIATE stmt;

BEGIN

stmt := 'ALTER DATABASE DROP LOGFILE GROUP ' || rlcRec.grp;

DBMS_OUTPUT.PUT_LINE(stmt);

EXECUTE IMMEDIATE stmt;

EXCEPTION

WHEN OTHERS THEN

EXECUTE IMMEDIATE 'ALTER SYSTEM SWITCH LOGFILE';

EXECUTE IMMEDIATE 'ALTER SYSTEM CHECKPOINT GLOBAL';

EXECUTE IMMEDIATE stmt;

END;

END IF;

END LOOP;

END;

/

11)可選地,遷移舊的快速恢復區中的備份和複製到oracle ASM

如果快速恢復區中存在外來歸檔日誌,那麼不能遷移到oracle ASM。在rman中執行如下命令: 

RMAN> DELETE REMOTE ARCHIVELOG ALL;

備份歸檔重做日誌檔案,備份集,資料檔案複製到oracle ASM

RUN

{

ALLOCATE CHANNEL dev1 DEVICE TYPE DISK;

ALLOCATE CHANNEL dev2 DEVICE TYPE DISK;

ALLOCATE CHANNEL dev3 DEVICE TYPE DISK;

ALLOCATE CHANNEL dev4 DEVICE TYPE DISK;

BACKUP AS COPY ARCHIVELOG ALL DELETE INPUT;

BACKUP BACKUPSET ALL DELETE INPUT;

BACKUP AS COPY DATAFILECOPY ALL DELETE INPUT;

}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21256317/viewspace-1063388/,如需轉載,請註明出處,否則將追究法律責任。

相關文章