Oracle 11gr2 RAC到單實例的DG搭建(落地備份)


 

一、 實施方案

 

這幾天給客戶的Oracle 11gr2 RAC搭建到單實例的DG,整理了一下步驟,理清一下思路,文中敏感信息已做模糊處理。

RAC至單實例的Dataguard為雙節點各自傳遞自己當前線程的歸檔至備庫。

由於節點1存儲不足,備份在節點2上跑。整體搭建思路如下:

備庫文件目錄創建à主庫force logging(已是歸檔模式)

à備份節點二à復制節點二口令文件à創建備庫pfileà創建備庫à恢復備庫

à創建主備standby logfileà配置主備監聽及TNSà修改主庫(節點一、節點二)參數à打開備庫並實時應用

1.1       主備環境說明

Primary

Node1

Node2

Hostname

hostname01

hostname02

Public

10.10.10.141

10.10.10.143

VIP

10.10.10.142

10.10.10.144

SCAN

10.10.10.140

Instance_name

repprod1

repprod2

DB_name

repprod

Service_names

repprod

DB_unique_name

repprod

Storage_mode

ASM

Standby

Node

Hostname

hostnamedg

IP

10.10.10.191

Instance_name

Repproddg

DB_name

repprod

Service_names

repproddg

DB_unique_name

repproddg

Storage_mode

Local disk

1.2       文件系統規划

Primary

Standby

+DATADG/repprod/datafile

/oradata/datafile

+DATADG/repprod/tempfile

/oradata/tempfile

+ARCDG/repprod/onlinelog

+DATADG/repprod/onlinelog

/oradata/onlinelog

+ARCDG/

/oradata/arch

1.3       實施操作步驟

1.3.1        備庫存儲和文件系統創建

#standby庫上新建各個數據文件的存放位置

$mkdir -p /oradata/datafile       --數據文件
$mkdir -p /oradata/tempfile      --臨時文件
$mkdir -p /oradata/onlinelog     --redo日志
$mkdir -p /oradata/controlfile    --控制文件
$mkdir -p /oradata/arch            --歸檔文件

 

#備庫為全新安裝oracle 11.2.0.4軟件,需要手工建立以下目錄,保持與主庫目錄一致。

$cd $ORACLE_BASE
$mkdir -p admin/repproddg/adump
$mkdir -p admin/repproddg/dpdump
$mkdir -p admin/repproddg/hdump
$mkdir -p admin/repproddg/pfile

 

1.3.2        主庫上設置數據庫運行在force logging模式

#查看數據庫的模式:

SQL> select LOG_MODE,OPEN_MODE,PROTECTION_MODE,DATABASE_ROLE,SWITCHOVER_STATUS,GUARD_STATUS,FORCE_LOGGING from v$database;

 
#在主庫上執行:

SQL> alter database force logging;

 

1.3.3        備份主庫

#節點二備份

$rman target /
RMAN> run{
allocate channel c1 type disk;
allocate channel c2 type disk;
backup filesperset=3 format='/oracle/backup/%T_%d_%s_%p.bus' as compressed backupset database;
backup format='/oracle/backup/%T_%d_%s_%p.ctl' current controlfile;
release channel c1;
release channel c2;
}

 

#傳遞備份至備庫
$scp /oracle/backup/20180418* oracle@10.10.10.191:/oradata/backup

 

1.3.4        口令文件復制

#將主庫的口令文件復制到備庫相同目錄下,並改名為orapwrepproddg。
$scp /oracle/app/oracle/db/dbs/orapwrepprod oracle@10.10.10.191:/u01/app/oracle/product/11.2.0/db_1/dbs
 

#重命名
$mv orapwrepprod orapwrepproddg

 

1.3.5        創建和修改備庫pfile 參數文件

#主庫上生成pfile
SQL> create pfie from spfile;

 
#傳遞至備庫
$cd $ORACLE_HOME/dbs
$scp initrepprod.ora oracle@10.10.10.191: /u01/app/oracle/product/11.2.0/db_1/dbs

 
#修改為initrepproddg.ora並修改相關參數
$mv initrepprod.ora initrepproddg.ora
$vi initrepprod.ora
*.__db_cache_size=21206401024
*.__java_pool_size=1879048192
*.__large_pool_size=805306368
*.__pga_aggregate_target=70061654016
*.__sga_target=38386270208
*.__shared_io_pool_size=0
*.__shared_pool_size=13421772800
*.__streams_pool_size=536870912
*.audit_file_dest= '/u01/app/oracle/repproddg/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/oradata/controlfile/control01.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name=repprod
*.db_unique_name=repproddg
*.service_names=repproddg
*.db_recovery_file_dest_size=209715200000
*.open_cursors=300
*.pga_aggregate_target=70061654016
*.processes=1500
*.sessions=1655
*.sga_target=38386270208
*._undo_autotune=FALSE
*.log_archive_format='%t_%s_%r.arc'
*.db_recovery_file_dest='/oradata/arch'
*.db_file_name_convert='+DATADG/repprod/datafile','/oradata/datafile','+DATADG/repprod/tempfile','/oradata/tempfile'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(repprod, repproddg)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/oradata/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=repproddg'
*.LOG_ARCHIVE_DEST_2='SERVICE=repprod_pri LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME= repprod'
*.log_file_name_convert='+ARCDG/repprod/onlinelog','/oradata/onlinelog','+DATADG/repprod/onlinelog','/oradata/onlinelog'
*.remote_login_passwordfile='exclusive'
*.standby_file_management=auto
*.diagnostic_dest= '/u01/app/oracle'
*.fal_server='repprod1_pri ','repprod2_pri'
*.fal_client='repproddg_stb'

 
$sqlplus / as sysdba
SQL
> startup pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initrepproddg.ora' nomount; SQL> create spfile from pfile SQL> shut immediate

 

 

1.3.6        恢復備庫

 

#備庫恢復控制文件

SQL> startup nomount;
RMAN> restore standby controlfile from '/oradata/backup/20180418_REPPROD_4020_1.ctl';
RMAN> alter database mount;
 

#注冊備份集
RMAN> CATALOG START WITH/oradata/backup/’;
RMAN> CROSSCHECK BACKUP;
 

rman target /
run
{
set newname for datafile 1 to '/oradata/datafile/system01.dbf';
set newname for datafile 2 to '/oradata/datafile/sysaux01.dbf';
set newname for datafile 3 to '/oradata/datafile/undotbs01.dbf';
set newname for datafile 4 to '/oradata/datafile/undotbs02.dbf';
set newname for datafile 5 to '/oradata/datafile/users01.dbf';
set newname for datafile 6 to '/oradata/datafile/bylgt01.dbf';
set newname for tempfile 1 to '/oradata/tempfile/temp01.dbf';
restore database;
SWITCH DATAFILE ALL;
SWITCH TEMPFILE ALL;
}

 

#把歸檔從主庫中copy到備庫后,進行手工recover
#根據備庫alter.log查看缺失的日志sequence號
#節點二上從ASM上copy歸檔到本地再scp至備庫
$su – grid
$asmcmd
ASMCMD> cd +ARCDG/repprod/AR*/2018_04_18
ASMCMD> cp thread_2_seq_3741.2001.973785643 /oracle/backup
ASMCMD> cp thread_2_seq_3742.2012.973785651 /oracle/backup
ASMCMD> cp thread_2_seq_3743.2015.973785659 /oracle/backup
ASMCMD> cp thread_2_seq_3744.1987.973785669 /oracle/backup
ASMCMD> cp thread_2_seq_3745.2008.973785709 /oracle/backup
ASMCMD> cp thread_2_seq_3746.1977.973785717 /oracle/backup
ASMCMD> cp thread_2_seq_3747.1996.973791733 /oracle/backup
ASMCMD> cp thread_2_seq_3748.2005.973791739 /oracle/backup
$cd /oracle/backup
$ scp thread_2_seq* oracle@10.10.10.191:/oradata/arch

 

#備庫上注冊歸檔並recover database
SQL> alter database register logfile '/oradata/arch/thread_2_seq_3741.2001.973785643';
SQL> alter database register logfile '/oradata/arch/thread_2_seq_3742.2012.973785651';
SQL> alter database register logfile '/oradata/arch/thread_2_seq_3743.2015.973785659';
SQL> alter database register logfile '/oradata/arch/thread_2_seq_3744.1987.973785669';
SQL> alter database register logfile '/oradata/arch/thread_2_seq_3745.2008.973785709';
SQL> alter database register logfile '/oradata/arch/thread_2_seq_3746.1977.973785717';
SQL> alter database register logfile '/oradata/arch/thread_2_seq_3747.1996.973791733';
SQL> alter database register logfile '/oradata/arch/thread_2_seq_3748.2005.973791739';
SQL> recover managed standby database disconnect from session;

Media recovery complete.


SQL> recover managed standby database cancel;
Media recovery complete.

 

1.3.7        在主庫中建立standby logfile

 

#最大保護及最高可用性保護模式必須創建SRL,但強烈建議也為最大性能模式添加,為了簡化切換以后的操作,建議同時在主庫也進行添加。SRL大小必須跟主數據庫ORL一樣,且比ORL數量多1。
具體可參考“thread數*(ORL+1)”,即兩節點的rac,ORL為3,則SRL數量為2*(3+1)=8。配置主數據庫standby redo日志,在節點一或節點二進行: SQL> alter database add standby logfile thread 1('+ARCDG','+DATADG') size 512M; SQL> alter database add standby logfile thread 1('+ARCDG','+DATADG') size 512M; SQL> alter database add standby logfile thread 1('+ARCDG','+DATADG') size 512M; SQL> alter database add standby logfile thread 1('+ARCDG','+DATADG') size 512M; SQL> alter database add standby logfile thread 2('+ARCDG','+DATADG') size 512M; SQL> alter database add standby logfile thread 2('+ARCDG','+DATADG') size 512M; SQL> alter database add standby logfile thread 2('+ARCDG','+DATADG') size 512M; SQL> alter database add standby logfile thread 2('+ARCDG','+DATADG') size 512M;

 

1.3.8        在備庫中建立standby logfile

#與主庫一樣的redo組
SQL> alter database add standby logfile group 7 ('/oradata/onlinelog/redo7a.dbf','/oradata/onlinelog/redo7b.dbf') size 512m;
SQL> alter database add standby logfile group 8 ('/oradata/onlinelog/redo8a.dbf','/oradata/onlinelog/redo8b.dbf') size 512m;
SQL> alter database add standby logfile group 9 ('/oradata/onlinelog/redo9a.dbf','/oradata/onlinelog/redo9b.dbf') size 512m;
SQL> alter database add standby logfile group 10 ('/oradata/onlinelog/redo10a.dbf','/oradata/onlinelog/redo10b.dbf') size 512m;
SQL> alter database add standby logfile group 11 ('/oradata/onlinelog/redo11a.dbf','/oradata/onlinelog/redo11b.dbf') size 512m;
SQL> alter database add standby logfile group 12 ('/oradata/onlinelog/redo12a.dbf','/oradata/onlinelog/redo12b.dbf') size 512m;
SQL> alter database add standby logfile group 13 ('/oradata/onlinelog/redo13a.dbf','/oradata/onlinelog/redo13b.dbf') size 512m;
SQL> alter database add standby logfile group 14 ('/oradata/onlinelog/redo14a.dbf','/oradata/onlinelog/redo14b.dbf') size 512m;

 

1.3.9        備庫上監聽和TNS配置

#配置監聽
$cd $ORACLE_HOME/network/admin
$vi listener.ora
repproddg =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.191)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )
 

SID_LIST_repproddg  =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = repproddg)
      (ORACLE_HOME =/u01/app/oracle/product/11.2.0/db_1)
      #(PROGRAM = extproc)
    )
)

 

#配置TNS
$vi tnsname.ora
repprod_pri =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST =10.10.10.140)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = repprod)
    )
  )

 

repproddg_stb=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =10.10.10.191)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = repproddg)
    )
  )
 

#開啟監聽
$lsnrctl statrt

 

1.3.10    主庫上TNS配置

#將以下備庫的tns加入到主庫兩節點的tnsnames.ora中:
$cd $ORACLE_HOME/network/admin
$vi tnsnames.ora
repprod_pri =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST =10.10.10.141)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = repprod)
    )
  )


repproddg_stb=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =10.10.10.191)(PORT = 1521))
    )

    (CONNECT_DATA =
      (SERVICE_NAME = repproddg)
    )

  )

 

監聽和TNS檢查
#在主庫兩節點上執行以下:
$tnsping repproddg_stb
 

#在備庫中執行以下:
$tnsping repprod_pri

 

1.3.11    主庫上修改參數

#節點一、節點二均設置以下參數

SQL> alter system set log_archive_config='DG_CONFIG=(repprod,repproddg)' scope=both sid='*';
SQL> alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(all_logfiles,all_roles) db_unique_name=repprod' scope=both sid='*';
SQL> alter system set log_archive_dest_2='SERVICE=repproddg_stb lgwr ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=repproddg' scope=both;
SQL> alter system set log_archive_max_processes=10 scope=both;
SQL> alter system set db_file_name_convert='/oradata/datafile', '+DATADG/repprod/datafile', 'oradata/tempfile', '+DATADG/repprod/tempfile' scope=spfile;
SQL> alter system set log_file_name_convert='/oradata/onlinelog','+ARCDG/repprod/onlinelog','/oradata/onlinelog','+DATADG/repprod/onlinelog' scope=spfile;
SQL> alter system set standby_file_management=auto scope=both;

 

1.3.12    打開數據庫並實時應用redo

#開啟數據庫並打卡redo日志實時應用
SQL> alter database open;
SQL> alter database recover managed standby database using current logfile disconnect from session;

 

二、 *實施完成后的驗證

#主庫檢查current sequence#
SQL> select thread#,sequence#,status from v$log;

#主庫檢查LNS進程正在寫的sequence#
SQL> select process,sequence#,status from v$managed_standby;

#備庫檢查正在應用的sequence#
SQL> SELECT PROCESS,THREAD#,SEQUENCE#,STATUS FROM V$MANAGED_STANDBY;

#檢查是否存在GAP
SQL> SELECT THREAD#,LOW_SEQUENCE#,HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

no rows selected

 

三、 問題匯總

3.1       備庫未打補丁處理

1.傳遞與主庫一致的補丁p24006111_112040_Linux-x86-64.zip至/software上
2.關閉與Oracle相關的所有進程,包括sqlplus
3.opatch version必須大於11.2.0.3.6
4.檢查環境
  unzip p24006111_112040_ Linux-x86-64.zip
  cd 24006111
  $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
5.應用補丁
  $ORACLE_HOME/OPatch/opatch apply

 

3.2       Temp文件錯誤處理

1.恢復時set newname路徑錯誤
2.將tempfile下線:
  SQL> alter database tempfile '/oradata/tempile/temp01.dbf' offline;

3.新建正確路徑的tempfile:
  SQL> alter tablespace TEMP add tempfile '/oradata/tempfile/temp01.dbf' size 2G autoextend on;

4.刪除錯誤tempfile
  SQL> alter database tempfile '/oradata/tempile/temp01.dbf' drop

 

3.3       歸檔刪除腳本部署

#在/home/oracle/下新建歸檔刪除腳本,保留3天
$ vi /home/oracle/delete_arch.sh
. ~/.bash_profile
rman target / <<EOF
crosscheck archivelog all;
delete noprompt archivelog until time 'sysdate-3';
crosscheck archivelog all;
exit
EOF
#Oracle crontab,每天0點自動刪除歸檔文件 $crontab
-e #每天0點自動刪除歸檔文件 0 * * * * /home/oracle/delete_arch.sh 1>/home/oracle/delete_arch.sh.out 2>&1

 

SERVICE_NAME = repproddg


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM