1、 名詞解釋
RMAN:RMAN(Recovery Manager)是一種用於備份(backup)、還原(restore)和恢復(recover)數據庫的 Oracle 工具。
冷備:數據庫關閉狀態時進行備份
CRS:Cluster Ready Service(Oracle集羣就緒服務)
RAC:RAC是real application clusters的縮寫,譯爲“實時應用集羣”, 是Oracle新版數據庫中採用的一項新技術,是高可用性的一種,也是Oracle數據庫支持網格計算環境的核心技術。
2 、 方案說明
爲了保障系統能橫向擴展,使用RAC架構,操作系統爲Linux系統。由此需要Windows 向 Linux ASM RAC 遷移的方案。
方案主要分成4大塊,分別是源端數據備份、目標端還原、還原後的調整、RAC相關參數調整,以下是對每個步驟的時間預估。預估時間前每個步驟都做了測試,業務數據約1.5T。
3、 源端備份
3.1 一致性關閉數據庫
Oracle 在Windows下的redo 不支持在Linux進行還原,所以備份必須是冷備。
命令:
sqlplus / as sysdba
shutdown immediate
startup mount
3.2 創建pfile
生成pfile文件
命令:
create pfile='c:\rmanbackup\pfile.ora' from spfile;
3.3 創建備份
此處使用RMAN對數據庫進行備份,以下的備份命令會進行壓縮,是否使用壓縮需要考慮傳輸速度快還是CPU壓縮數據快。如果源端Windows服務器磁盤IO/CPU性能不怎麼樣,建議不要壓縮。
命令:
rman target /
run{
allocate channel c1 type disk maxpiecesize=30G;
allocate channel c2 type disk maxpiecesize=30G;
allocate channel c3 type disk maxpiecesize=30G;
allocate channel c4 type disk maxpiecesize=30G;
allocate channel c5 type disk maxpiecesize=30G;
allocate channel c6 type disk maxpiecesize=30G;
allocate channel c7 type disk maxpiecesize=30G;
allocate channel c8 type disk maxpiecesize=30G;
allocate channel c9 type disk maxpiecesize=30G;
allocate channel c10 type disk maxpiecesize=30G;
backup as compressed backupset database tag 'dbfull' format 'c:\rmanbackup\full_%U_%T';
backup current controlfile format 'c:\rmanbackup\ctl_%U_%T';
release channel c1;
release channel c2;
release channel c3;
release channel c4;
release channel c5;
release channel c6;
release channel c7;
release channel c8;
release channel c9;
release channel c10;
}
3.4 修改pfile文件
將一系列目錄改爲linux上的對應目錄,注意sga和PGA的修改,控制文件位置做好調整,調整後將RMAN備份文件、pfile文件傳到linux上。
修改:
#*.audit_file_dest='C:\app\Administrator\admin\ORCL\adump'
*.audit_file_dest= "/u01/app/oracle/admin/ORCL/adump"
*.audit_trail='db'
*.compatible='11.2.0.4.0'
#*.control_files='C:\app\Administrator\oradata\ORCL\control01.ctl','C:\app\Administrator\fast_recovery_area\ORCL\control02.ctl'
*.control_files='+DATA/ORCL/controlfile/control01.ctl','+DATA/ORCL/controlfile/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='ORCL'
#*.db_recovery_file_dest='C:\app\Administrator\fast_recovery_area'
*.db_recovery_file_dest='+LOG'
#*.db_recovery_file_dest_size=4385144832
*.db_recovery_file_dest_size=512G
#*.diagnostic_dest='C:\app\Administrator'
*.diagnostic_dest="/u01/app/oracle"
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.pga_aggregate_target=2G
*.sga_max_size=3G
*.sga_target=3G
4、 目標端還原
4.1 創建路徑
目標環境創建pfile中幾個參數的路徑:包括audit_file_dest、control_files、數據文件路徑。其中audit_file_dest需要在兩個節點中分別創建。
命令:
su - oracle
mkdir -p /u01/app/oracle/admin/ORCL/adump
exit
su - grid
asmcmd <<eof
mkdir +DATA/ORCL
mkdir +DATA/ORCL/controlfile
mkdir +DATA/ORCL/datafile
exit
eof
exit
chmod 777 /rmanbackup/ -R
4.2 nomount啓動數據庫
在節點1上啓動數據庫到nomount狀態,如報錯,根據報錯排查對應錯誤。
命令:
su - oracle
export ORACLE_SID=ORCL1
sqlplus / as sysdba <<eof
startup nomount pfile='/rmanbackup/pfile.ora';
exit
eof
4.3 catalog 備份文件
備份文件存放的位置是記錄在控制文件中的,前面做了控制文件的還原,能查詢到所有的備份信息。但是記錄的備份位置都是Windows的路徑,此處主要做了備份的校驗刪除失效的備份信息,加載傳輸到Linux系統上的備份文件信息。其中/rmanbackup是本次演示備份文件存放的位置,根據實際情況做好調整。
命令:
rman target / <<eof
restore controlfile from '/rmanbackup/CONTROL_04UHB8EN_1_1';
sql 'alter database mount';
crosscheck backup;
delete expired backup;
yes
catalog start with '/rmanbackup/FULL_';
yes
eof
4.4 還原數據庫
以下RMAN命令,會將備份還原出一個新庫,set newname for database to '+DATA/ORCL/datafile/dbf_%U’指的是將數據文件指定到一個新的目錄下。這裏存在一個問題,數據文件名稱就不再和以前一致了。
命令:
rman target / <<eof
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
allocate channel c5 type disk;
allocate channel c6 type disk;
allocate channel c7 type disk;
allocate channel c8 type disk;
allocate channel c9 type disk;
allocate channel c10 type disk;
set newname for database to '+DATA/ORCL/datafile/dbf_%U';
restore database;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
release channel c5;
release channel c6;
release channel c7;
release channel c8;
release channel c9;
release channel c10;
}
switch database to copy;
exit
eof
5、 目標端還原後的調整
5.1 創建spfile
前面啓動時直接指定了pfile文件,爲了方便參數調整,通過pfile創建一個spfile,保存到ASM磁盤組中,再將默認pfile的內容修改爲spfile的位置。
注意,如果實例名與本方案不一樣,需要注意調整實例名、路徑、文件名。
命令:
sqlplus / as sysdba <<eof
alter database open resetlogs upgrade;
create spfile='+DATA/ORCL/spfileORCL.ora' from pfile='/rmanbackup/pfile.ora';
! echo "spfile=+DATA/ORCL/spfileORCL.ora" > $ORACLE_HOME/dbs/initORCL1.ora
eo
5.2 創建redo日誌組
RAC數據庫在啓用其他節點前,需要爲這個節點添加redo日誌。日誌的存放位置,可以根據需要做調整,爲了保證節點奔潰後事物能繼續,需要將redo文件存放在ASM磁盤組中。
命令:
sqlplus / as sysdba <<eof
alter database add logfile thread 1 group 11 ('+LOG') size 1024M;
alter database add logfile thread 1 group 12 ('+LOG') size 1024M;
alter database add logfile thread 1 group 13 ('+LOG') size 1024M;
alter database add logfile thread 1 group 14 ('+LOG') size 1024M;
alter database add logfile thread 1 group 15 ('+LOG') size 1024M;
alter database add logfile thread 1 group 16 ('+LOG') size 1024M;
alter database add logfile thread 1 group 17 ('+LOG') size 1024M;
alter database add logfile thread 1 group 18 ('+LOG') size 1024M;
alter database add logfile thread 2 group 21 ('+LOG') size 1024M;
alter database add logfile thread 2 group 22 ('+LOG') size 1024M;
alter database add logfile thread 2 group 23 ('+LOG') size 1024M;
alter database add logfile thread 2 group 24 ('+LOG') size 1024M;
alter database add logfile thread 2 group 25 ('+LOG') size 1024M;
alter database add logfile thread 2 group 26 ('+LOG') size 1024M;
alter database add logfile thread 2 group 27 ('+LOG') size 1024M;
alter database add logfile thread 2 group 28 ('+LOG') size 1024M;
eof
5.3 查詢自動生成的redolog
查詢數據庫根據原Windows環境自動創建的redolog,並記住group#號。這部分日誌會自動生成在$ORACLE_HOME/dbs目錄下,需要刪除掉。
命令:
$sqlplus / as sysdba
set lines 300
set pages 300
col member for a60
5.4 刪除自動生成的redolog
前面查的是三組,這裏就切3次日誌。如果遇到無法刪除的,再次切換日誌並觸發檢查點操作。
命令:
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system checkpoint;
alter database drop logfile group 1;
alter database drop logfile group 2;
alter database drop logfile group 3;
5.5 創建UNDO2
源庫是單實例數據庫時,通常只有1個undo表空間,而RAC中每個節點都需要1個UNDO表空間,所以雙節點的RAC需要再加多一個UNDO表空間。
命令:
create undo tablespace UNDOTBS2 datafile '+DATA/orcl/datafile/undotbs02.dbf' size 100M AUTOEXTEND ON next 200M;
5.6 重建TEMP表空間
還原後,所有的temp表空間都需要重新創建,通過查詢就能發現,其對應的文件路徑還是Windows環境下的路徑。
命令:
select file#, ts# ,name ,status from v$tempfile;
根據查詢,確定目前有多少個臨時表空間,這裏只有一個。將其刪除,重建。數據庫的默認臨時表空間是不然刪除的。所以,如果只有一個表空間,就需要一個臨時頂替的臨時表空間。
命令:
#創建新的tempfile:
CREATE TEMPORARY TABLESPACE temp2 TEMPFILE '+data/orcl/datafile/TEMP2.DBF' SIZE 200m AUTOEXTEND ON ;
#將新的temp表空間設置爲默認表空間:
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;
#刪除原默認temp 表空間:
drop tablespace temp;
#重新創建原temp表空間:
CREATE TEMPORARY TABLESPACE temp TEMPFILE '+data/orcl/datafile/TEMP01.DBF' SIZE 1G REUSE AUTOEXTEND ON NEXT 200M MAXSIZE 30G;
#將數據庫默認temp表空間設置爲原表空間:
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;
#刪除剛剛創建的temp2 臨時表空間:
DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES;
注意:上一步修改完之後, 刪除temp表空間可能會宕住,需要退出再重新進sqlplus。
5.7 重新編譯數據庫
重新編譯PLSQL代碼塊,並重新編譯無效對象,注意不是utlrp腳本,而是使用utlirp。如果系統版本存在升級,需要根據readme.html中的要求執行腳本。如果存在新的補丁的,執行補丁對應的SQL腳本。
命令:
@?/rdbms/admin/utlirp.sql
#執行升級腳本(如果不存在版本升級,不需要執行):
#@?/rdbms/admin/catupgrd.sql
6 、 目標端RAC參數調整
6.1 修改數據庫參數
經過前面一系例操作,數據庫跨操作系統的問題就全部都解決了。到目前爲止,接下來的操作和調整,是爲了啓用RAC。
命令:
startup mount force
alter system set instance_name='ORCL1' scope=spfile sid='ORCL1';
alter system set instance_name='ORCL2' scope=spfile sid='ORCL2';
alter system set instance_number=1 scope=spfile sid='ORCL1';
alter system set instance_number=2 scope=spfile sid='ORCL2';
alter system set thread=1 scope=spfile sid='ORCL1';
alter system set thread=2 scope=spfile sid='ORCL2';
alter system set undo_tablespace='UNDOTBS1' scope=spfile sid='ORCL1';
alter system set undo_tablespace='UNDOTBS2' scope=spfile sid='ORCL2';
alter system set cluster_database_instances=2 scope=spfile sid='*';
alter system set cluster_database=TRUE scope=spfile sid='*';
6.2 重新啓動數據庫並打開節點2
調整完後需要重啓數據庫。
命令:
SHUTDOWN IMMEDIATE
STARTUP
alter database enable thread 2;
6.3 編譯無效對象
再次編譯無效對象。
命令:
@?/rdbms/admin/utlrp.sql
6.4 添加CRS資源並測試啓停數據庫
操作完這一波,遷移就算完成了。注意這個操作是在oracle用戶下完成,其中-d 是數據庫唯一名、-p spfile、-i 實例名/SID、-n node 。
命令:
srvctl add database -d ORCL -o $ORACLE_HOME -p +DATA/orcl/spfileorcl.ora
srvctl add instance -d ORCL -i ORCL1 -n db01
srvctl add instance -d ORCL -i ORCL2 -n db02
srvctl start database -d ORCL -o open
srvctl stop database -d ORCL
srvctl start database -d ORCL -o open
6.5 創建密碼文件
創建密碼文件用來存放sys用戶的密碼,如果沒有密碼文件,sys用戶無法通過遠程連接數據庫。
節點1
命令:
orapwd file=$ORACLE_HOME/dbs/orapwdORCL1 password=oracle123
節點2
命令:
orapwd file=$ORACLE_HOME/dbs/orapwdORCL2 password=oracle123