天天看點

oracle asm磁盤組三種模式_Oracle單執行個體遷移到RAC執行個體Oracle單執行個體遷移到RAC執行個體--使用RMAN 異機恢複一. 大緻操作步驟流程如下:二. 具體操作步驟Oracle單執行個體遷移到RAC執行個體--使用導出導入方法

Oracle單執行個體遷移到RAC執行個體

oracle asm磁盤組三種模式_Oracle單執行個體遷移到RAC執行個體Oracle單執行個體遷移到RAC執行個體--使用RMAN 異機恢複一. 大緻操作步驟流程如下:二. 具體操作步驟Oracle單執行個體遷移到RAC執行個體--使用導出導入方法

将Oracle 單執行個體遷移到 RAC 執行個體上有兩種方法:

1. 使用RMAN 複制

2. 使用邏輯導出導入(exp/imp) 或者 資料泵(expdp/impdp)

Oracle單執行個體遷移到RAC執行個體--使用RMAN 異機恢複

一. 大緻操作步驟流程如下:

1. 安裝Clusterware 和 ASM 執行個體

2. 備份源庫,并将備份集copy到rac 節點上

3. 在RAC 上還原并修改初始化參數檔案,還原控制檔案和資料檔案

4. 增加undo 表空間和redo log 線程組,建立密鑰檔案

5. 配置RAC監聽

6. 将資料庫等資源添加到CRS

注意: 遷移的2個db版本版本要一緻。包括小版本。 比如10.2.0.4.0.

測試的時候是從10.2.0.5.0 遷移到10.2.0.5.0

Redhat 5.4 Orcle RAC 資料庫 從10.2.0.1更新到 10.2.0.5

二. 具體操作步驟

2.1 安裝Clusterware 和ASM 執行個體

上述安裝相信能閱讀小子此文檔的諸位此能力已然具備,是以不再贅述。

附圖參考:

2.1.1 運作DBCA 指令

[[email protected] ~]$ dbca

2.1.2 選擇 configure Automatic Storage Management, 來建立ASM 執行個體

2.1.3 選擇所有結點

2.1.4 輸入密碼:RAC 的spfile 必須放在共享目錄下。參數檔案我們選擇第一個initialization parameter。 也可以放在我們建的裸裝置上。

2.1.5 ASM 執行個體建立完後,用Create New 來建立ASM 磁盤組。我們用DATA來建立一個DATA 組,FRA 建立FLASH_RECOVERY_AREA組。

注: Redundancy 一般選external 就是也就是不考慮備援,假如選normal 則是mirror, 至少要一個FailGroup. 選High 就是triple mirror,3倍鏡像,需要三個FailGroup。

2.1.6 建立完成後,能看到組的狀态是Mount, ASM 組必須mount之後才能使用。

在這裡,如果asm 服務必須要啟動。如果沒有啟動,就手動啟動它。

安裝之後的程序如下:

[[email protected] ~]$ crs_stat -t

叢集監聽狀态檢視:

[[email protected] ~]$ lsnrctl status

2.2 在源庫用RMAN 備份,并将備份檔案copy到rac上

注意:保持單執行個體和RAC資料庫SID一緻(SID為db10g)

rman備份之前,單執行個體資料庫為歸檔模式(archilve log list 來檢視)

若未歸檔用:startup mount;

alter database archivelog; 改到歸檔模式

RAC上已經安裝CRS以及ORACLE軟體但未建庫

2.2.1備份全庫:

[[email protected] ~]$ rman target /

RMAN> list backup;

using target database control file instead of recovery catalog

RMAN> run {

2> backup full database format '/orabk/full_%d_%T_%U.bak';

3> backup archivelog all format '/orabk/arc_%U.bak' delete input;

4> copy current controlfile to '/orabk/control_bak.ctl';

5> }

備份之後的資訊如下:

RMAN> list backup summary;

[[email protected] orabk]$ ls -l

2.2.1将備份檔案SCP 到RAC 伺服器:

[[email protected] orabk]$ scp * 192.168.10.101:/orabk

2.3 還原并修改初始化檔案

2.3.1 還原spfile 到pfile(可複制、建立、RMAN恢複等)

[[email protected] ~]$ export ORACLE_SID=db10g1

[[email protected] ~]$ rman target /

RMAN> startup nomount

RMAN> restore spfile to pfile '/u01/app/oracle/product/10.2.0/db_1/dbs/initdb10g1.ora'

2> from '/orabk/full_DB10G_20130516_02o9pjb1_1_1.bak ';

檢視剛才恢複的參數檔案:

[[email protected] ~]$ cd /u01/app/oracle/product/10.2.0/db_1/dbs

[[email protected] dbs]$ ls

[[email protected] dbs]$ cat initdb10g1.ora

這裡面都是單執行個體的參數,需要把這個改成RAC的參數。

2.3.2 檢視ASM 執行個體的相關目錄資訊

[[email protected] ~]$ export ORACLE_SID=+ASM1

[[email protected] ~]$ sqlplus / as sysdba

SYS@+ASM1(rac1)> col state format a10

SYS@+ASM1(rac1)> col name format a15

SYS@+ASM1(rac1)> col failgroup format a20

SYS@+ASM1(rac1)> set line 200

SYS@+ASM1(rac1)> select state,redundancy,total_mb,free_mb,name,failgroup from v$asm_disk;

SYS@+ASM1(rac1)> select group_number,name,state,type,total_mb,free_mb,unbalanced from v$asm_diskgroup;

2.3.3 在ASM下建立目錄

[[email protected] ~]$ export ORACLE_SID=+ASM1

[[email protected] ~]$ asmcmd

建立的目錄結構如下:

DATA/

RAC/

CONTROLFILE/

DATAFILE/

TEMPFILE/

ONLINELOG/

PARAMETERFILE/

FRA/

RAC/

ARCHIVELOG

2.3.4 建立系統目錄(2個節點)

[[email protected] ~]$ cd $ORACLE_BASE/admin

[[email protected] admin]$ ls

+ASM

[[email protected] admin]$ mkdir db10g

[[email protected] admin]$ cd db10g

[orac[email protected] db10g]$ mkdir adump bdump cdump dpdump hdump pfile udump

[[email protected] db10g]$ ll

2.3.5 修改初始化參數

注意事項:

(1)RMAN 異機恢複的db_name 必須和備份的一緻,如果說想改成其他名稱,可以等還原之後,再用nid 指令修改。

(2)控制檔案需要指定到共享裝置上

(3)檢查audit_file_dest、background_dump_dest、core_dump_dest、log_archive_dest_1、user_dump_dest等參數的位置。如果2個節點和共享位置沒有對應的目錄,先把目錄建好。

最終修改之後的pfile 檔案如下:

[[email protected] db10g]$ cd $ORACLE_HOME/dbs

[[email protected] dbs]$ cat initanqing.ora

db10g.__db_cache_size=188743680

db10g.__java_pool_size=4194304

db10g.__large_pool_size=4194304

db10g.__shared_pool_size=79691776

db10g.__streams_pool_size=0

*.audit_file_dest='/u01/app/oracle/admin/db10g/adump'

*.background_dump_dest='/u01/app/oracle/admin/db10g/bdump'

*.cluster_database_instances=2

*.cluster_database=true

*.compatible='10.2.0.5.0'

*.control_files='+DATA/RAC/CONTROLFILE/control01.ctl','+DATA/RAC/CONTROLFILE /control02.ctl','+DATA/RAC/CONTROLFILE /control03.ctl'

*.core_dump_dest='/u01/app/oracle/admin/db10g/cdump'

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='db10g'

*.db_recovery_file_dest='+FRA'

*.db_recovery_file_dest_size=2147483648

*.dispatchers='(PROTOCOL=TCP) (SERVICE=racXDB)'

db10g1.instance_name='anqing1'

db10g2.instance_name='anqing2'

db10g1.instance_number=1

db10g2.instance_number=2

*.job_queue_processes=10

*.log_archive_dest_1='LOCATION==+FRA/RAC/ARCHIVELOG'

*.log_archive_format='%t_%s_%r.arc'

*.open_cursors=300

*.pga_aggregate_target=94371840

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.sga_target=283115520

db10g1.thread=1

db10g2.thread=2

*.undo_management='AUTO'

db10g1.undo_tablespace='UNDOTBS1'

db10g2.undo_tablespace='UNDOTBS1'

*.user_dump_dest='/u01/app/oracle/admin/db10g/udump'

2.3.6 用修改的pfile 來建立spfile,注意放在共享裝置上

[[email protected] ~]$ export ORACLE_SID=db10g1

[[email protected] ~]$ sqlplus / as sysdba

SQL> create spfile='+DATA/RAC/PARAMETERFILE/spfiledb10g.ora'

2 from

3 pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initdb10g1.ora';

到ASM裡驗證一下:

ASMCMD> pwd

+DATA/RAC/PARAMETERFILE

ASMCMD> ls

spfiledb10g.ora

在所有節點上,修改pfile内容,将其指向共享裝置上的spfile:

[[email protected] ~]$ echo "SPFILE='+DATA/RAC/PARAMETERFILE/spfiledb10g.ora'" > /u01/app/oracle/product/10.2.0/db_1/dbs/initdb10g1.ora

[[email protected] ~]$ cd $ORACLE_HOME/dbs

[[email protected] dbs]$ cat initdb10g1.ora

SPFILE='+DATA/RAC/PARAMETERFILE/spfiledb10g.ora'

2.4 建立密碼檔案

在所有節點執行:

[[email protected] ~]$ orapwd file=$ORACLE_HOME/dbs/orapwdb10g1 password=oracle

[[email protected] ~]$ orapwd file=$ORACLE_HOME/dbs/orapwdb10g2 password=oracle

2.5 還原控制檔案

在其中一個節點上執行。

2.5.1 用spfile,将DB 啟動到nomount 狀态

[[email protected] dbs]$ sqlplus / as sysdba

SQL> startup nomount;

SQL> show parameter spfile

2.5.2 RMAN 執行對控制檔案的恢複

[[email protected] dbs]$ rman target /

RMAN> restore controlfile from '/orabk/control_bak.ctl ';

這個位置是在初始化參數裡指定的,到ASM 執行個體裡驗證下:

ASMCMD> cd DATA/rac/controlfile

ASMCMD> ls

control01.ctl

control02.ctl

control03.ctl

2.6 restore資料庫

在其中一個節點執行

2.6.1 将資料庫啟動到MOUNT狀态

RMAN> alter database mount;

2.6.2 檢視源庫資料檔案存儲位置資訊

注意一點,單執行個體和RAC 執行個體存儲資料檔案的位置不同,如果使用rman 的duplicate,那麼使用log_file_name_convert 和 db_file_name_convert來進行轉換,在這個實驗中,使用的是RMAN的異機恢複,是以隻能在restore的時候用set newname來進行轉換。

SQL> col file_id format 9

SQL> col file_name format a30

SQL> select file_id,file_name from dba_data_files;

SQL> select file_id,file_name from dba_temp_files;

2.6.3 在RAC上restore 資料檔案

RMAN> run {

2> set newname for datafile 1 to '+DATA/rac/DATAFILE/system01.dbf';

3> set newname for datafile 2 to '+DATA/rac/DATAFILE/undotbs01.dbf';

4> set newname for datafile 3 to '+DATA/rac/DATAFILE/sysaux01.dbf';

5> set newname for datafile 4 to '+DATA';

6> set newname for tempfile 1 to '+DATA/rac/TEMPFILE/temp01.dbf';

7> restore database;

8> switch datafile all;

9> switch tempfile all;

10> }

-- 從這裡可以看到,對tempfile 僅僅是rename:即更新控制檔案。

注意:

(1)datafile 3 和 4的差別,datafile 4 我沒有指定具體的檔案名,那麼在還原時會使用ASM 自己的命名方式來命名datafile 4. 其他的檔案會建立别名。

(2)對switch的說明:

對于nocatalog 模式下,rman備份的資訊是儲存在控制檔案裡的,包括檔案的路徑資訊。 這裡的switch的作用,就是更新控制檔案裡的資訊。

(3)restore 的時候不會對temp 表空間進行restore。是以等restore 之後,需要手工建立temp表空間。

不過在這個測試裡,還是對tempfile 進行了指定。 但是這個操作隻更新控制檔案,不恢複資料檔案。

到ASM 執行個體裡檢視一下:

ASMCMD> cd db10g/datafile

ASMCMD> pwd

+DATA/db10g/datafile

ASMCMD> ls

SYSAUX.262.815794931

SYSTEM.260.815794931

UNDOTBS1.261.815794931

USERS.263.815794933

ASMCMD> ls -l

Type Redund Striped Time Sys Name

DATAFILE UNPROT COARSE MAY 19 01:00:00 Y SYSAUX.262.815794931

DATAFILE UNPROT COARSE MAY 19 01:00:00 Y SYSTEM.260.815794931

DATAFILE UNPROT COARSE MAY 19 01:00:00 Y UNDOTBS1.261.815794931

DATAFILE UNPROT COARSE MAY 19 01:00:00 Y USERS.263.815794933

-- 映射别名

ASMCMD> cd ../..

ASMCMD> cd rac/tempfile

ASMCMD> ls

--tempfile 對應的目錄為空,即沒有恢複資料檔案。

2.7 recover 資料庫

在執行restore的節點執行,因為備份檔案在該節點上。

RMAN> recover database;

最後一行的錯誤說明:

RMAN-06054: media recovery requesting unknown log: thread 1 seq 12 lowscn 206051

這裡是提醒恢複到一個未知的scn号。在alter database mount之後,通過set until scn或者set until time指令設定恢複到的scn号或時間,就可以避免這個錯誤。

2.8 處理online redo

因為此時另一個節點還沒有配好,是以我們隻能在執行恢複的節點上處理redo。

[email protected](rac1)> set wrap off;

[email protected](rac1)> select * from v$logfile;

[email protected](rac1)>alter database rename file '/oradata/db10g/redo01.log' to '+DATA/rac/onlinelog/redo01.log';

[email protected](rac1)> alter database rename file '/oradata/db10g/redo02.log' to '+DATA/rac/onlinelog/redo02.log';

[email protected](rac1)> alter database rename file '/oradata/db10g/redo03.log' to '+DATA/rac/onlinelog/redo03.log';

[email protected](rac1)> select * from v$logfile;

ASMCMD> pwd

+DATA/rac/onlinelog

ASMCMD> ls

注意這個時候,對應目錄還是空的,當open db 的時候,oracle 會自動建立online redo log。這裡修改的目的就是改變online redo 的位置。

2.9 open resetlogs 打開DB

在恢複的節點執行該操作。

[email protected](rac1)> alter database open resetlogs;

[email protected](rac1)> select name,open_mode from v$database;

[email protected](rac1)> col comp_name for a35

[email protected](rac1)> col version for a15

[email protected](rac1)> col status for a10

[email protected](rac1)> select comp_name,version,status from sys.dba_registry;

2.10檢查并修改幾個初始化參數

[email protected](rac1)> col parameter for a30

[email protected](rac1)> col value for a10

[email protected](rac1)> select * from v$option where parameter = 'Real Application Clusters';

[email protected](rac1)> show parameter cluster

[email protected](rac1)> show parameter thread

[email protected](rac1)> show parameter instance_number

由上述傳回結果可知,RAC特性是支援的,如果尚未啟用叢集資料庫,接下來首先要改的,就是enable CLUSTER DATABASE,操作如下:

[email protected](rac1)> alter system set cluster_database=true scope=spfile;

修改2個節點的配置參數:

[email protected](rac1)> alter system set cluster_database_instances=2 scope=spfile;

[email protected](rac1)> alter system set instance_number=1 scope=spfile sid='db10g1';

[email protected](rac1)> alter system set instance_number=2 scope=spfile sid='db10g2';

[email protected](rac1)> alter system set thread=1 scope=spfile sid='db10g1';

[email protected](rac1)> alter system set thread=2 scope=spfile sid='db10g2';

2.11建立節點2的undo 表空間

[email protected](rac1)> col name for a10

[email protected](rac1)> col type for a10

[email protected](rac1)> col value for a10

[email protected](rac1)> show parameter undo_tablespace

這個是rac1上節點的資訊,在之前的在spfile參數指定的rac2節點的undo 空間是UNDOTBS2。是以這裡建立該undo 表空間,并指定相關參數。

[email protected](rac1)> create undo tablespace UNDOTBS2 datafile '+DATA/rac/datafile/undotbs02.dbf' size 500m;

Tablespace created.

--這裡直接指定别名

ASMCMD> pwd

+DATA/rac/datafile

ASMCMD> ls

sysaux01.dbf

system01.dbf

undotbs01.dbf

undotbs02.dbf

ASMCMD> pwd

+DATA/db10g/datafile

ASMCMD> ls

SYSAUX.262.815794931

SYSTEM.260.815794931

UNDOTBS1.261.815794931

UNDOTBS2.268.815805971

USERS.263.815794933

[email protected](rac1)> alter system set undo_tablespace='UNDOTBS2' scope=spfile sid='db10g2';

System altered.

2.12添加rac2 節點的redo 檔案

rac 的redo 是接其他節點來的,我們之前的rac1上已經有3組,是以我們這裡從4開始,在添加2組給rac2,使用thread 2.

[email protected](rac1)> alter database add logfile thread 2 group 4 '+DATA' size 100m;

Database altered.

[email protected](rac1)> alter database add logfile thread 2 group 5 '+DATA' size100m;

Database altered.

[email protected](rac1)> alter database enable thread 2;

Database altered.

2.13重新開機節點1和節點2 上的執行個體,使相關參數生效

節點1:

[email protected](rac1)> shutdown immediate

[email protected](rac1)> startup

[email protected](rac1)> show parameter cluster

節點2:

[[email protected] dbs]$ sqlplus / as sysdba

SQL> startup

SQL> show parameter cluster

最後确認:

[email protected](rac1)> select instance_number,instance_name,host_name from gv$instance;

到現在已經是叢集了,不過還有一些收尾的工作要做。

2.14執行catclust.sql腳本來建立相關視圖

[email protected](rac1)> @$ORACLE_HOME/rdbms/admin/catclust.sql

2.15 重建Temp 表空間

步驟如下:

[email protected](rac1)> select name from v$tempfile;

[email protected](rac1)> alter tablespace temp

add tempfile '+DATA/rac/tempfile/temp02.dbf' size 100M;

[email protected](rac1)> alter database tempfile

'+DATA/anqing/tempfile/temp01.dbf' offline;

[email protected](rac1)> alter database tempfile

'+DATA/anqing/tempfile/temp01.dbf' drop including datafiles;

[email protected](rac1)> select name from v$tempfile;

2.16 添加叢集的監聽

2.17添加資訊注冊到CRS

[[email protected] ~]$ srvctl add database -d db10g -o $ORACLE_HOME -p +DATA/ANQING/PARAMETERFILE/spfileanqing.ora

[[email protected] ~]$ srvctl add instance -d db10g -i db10g1 -n rac1

[[email protected] ~]$ srvctl add instance -d db10g -i db10g2 -n rac2

修改instance 和 asm 之間的依賴關系:

[or[email protected] ~]$ srvctl modify instance -d db10g -i db10g1 -s +ASM1

[or[email protected] ~]$ srvctl modify instance -d db10g -i db10g2 -s +ASM2

檢視:

[[email protected] ~]$ crs_stat -t

這裡并沒有啟動,因為服務是剛添加上來的,還沒有同步。啟動一下就ok了。

[[email protected] ~]$ srvctl start database -d db10g

啟動之後再來查,各個程序正常:

[[email protected] ~]$ crs_stat -t

Oracle單執行個體遷移到RAC執行個體--使用導出導入方法

詳細見之前的Oracle-備份與恢複(一)expdp/impdp詳解。

繼續閱讀