ORACLE 11g RAC+ASM 配置DG


環境說明:

RAC

hosts 文件配置:

#public-ip
192.169.100.130 green1
192.169.100.131 green2
192.169.100.204 rac-dg
#VIP
192.169.100.132 rac1-vip
192.169.100.133 rac2-vip
#scan-ip
192.169.100.134 rac-scan
#priv-ip
10.0.0.1 rac1-priv1
10.0.0.2 rac2-priv2

 Standby (備庫只需要安裝數據庫軟件即可,不需創建數據庫)

 說明:

1. instance_name 和 db_name 和原庫保持一致,因為備庫沒有創建數據庫,所以沒有實例名和DB_name,所以這里的實例名和數據庫名是只參數文件中需要寫入的名字

2. service_names 和 db_unique_name,這兩個名字主要用在監聽配置和主庫同步日志到備庫是用到的名字,db_unique_name 必須不一致。

主要關注:
1.實例名稱: 寫在spile和pfile中,用來控制系統參數
2.DB name: 數據庫名稱,這個名稱主備庫必須保持一致(在參數文件中的db_name)
3.DB_UNIQUE_NAME  用為唯一區分不同的服務器名稱,主備需要設置為不同的值
4.service name 寫在tnsnames.ora 中用來做主備的聯通(通過tnsping測試),業務側也是通過該參數的設置來連接數據庫。

注意rac環境下兩個節點都需要alter 配置redo log的傳輸;

環境介紹:
ip               實例名         服務名         數據庫名       db_unique_name
rac-ip1          rac1          rac           rac             rac
rac-ip1          rac2          rac           rac             rac

備機
ip               實例名         服務名         數據庫名       db_unique_name
dg-ip1           rac            dg           rac              dg

查看以上名稱可以使用如下語句:

查看所有名稱:
show parameter service_name;
1、查詢數據庫名:select name,dbid from v$database;或者show parameter db_name;
2、查詢實例名:select instance_name from v$instance;或者show parameter instance_name;
3、查詢數據庫域名:select value from v$parameter where name='db_domain';或者show parameter domain;
4、查詢數據庫服務器:select value from v$parameter where name='service_name';或者show parameter service;或者show parameter names;
5、數據庫服務名:此參數是數據庫標識類參數,用service_name表示。數據庫如果有域,則數據庫服務名就是全局數據庫名;
如果沒有,則數據庫服務名就是數據庫名。查詢:show parameter service_name;

3. 主庫使用ASM管理磁盤,而備庫使用文件系統管理磁盤。所以需要修改文件映射。

配置過程:

主庫前期准備:

1)設置強制寫日志

[oracle@Oracle11g2 admin]$ sqlplus / as sysdba 
SQL> select FORCE_LOGGING from v$database; 
NO 
SQL> alter database force logging;

SQL> select FORCE_LOGGING from v$database;
YES
(2)修改數據庫運行在歸檔模式下

archive log list
sql>SHUTDOWN IMMEDIATE; 
sql>STARTUP MOUNT; 
sql>ALTER DATABASE ARCHIVELOG; 
sql> ALTER DATABASE OPEN; 
修改歸檔的路徑:
alter system set log_archive_dest_1='location=/u01/app/arch/dg';

查看歸檔路徑和空間大小:
archive log list;

col total_size for a10;
col free_size for a20;
select name,total_mb/1024 || 'G' as total_size , free_mb/1024 || 'G' as free_size from v$asm_diskgroup;

 

1.配置主機名和IP地址的對應:(主備庫都需要添加ip地址和主機名稱的對應,是為了在監聽中的host 作為連接,RAC環境需要添加public ip和vip的映射)

vi /etc/hosts

#public-ip
192.169.100.130 green1
192.169.100.131 green2
192.169.100.204 rac-dg
#VIP
192.169.100.132 rac1-vip
192.169.100.133 rac2-vip
#scan-ip
10.25.71.33 rac-scan

2.在主庫上創建pfile:

事先備份spfile 如果使用ASM磁盤管理存儲需要指定路徑  不然會放於 asm磁盤組
create pfile='/tmp/initdg.ora' from spfile;
scp /tmp/initdg.ora oracle@rac-dg:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/

3.復制主庫的密碼文件到備庫,並修改名字

cp /u01/app/oracle/product/11.2.0/dbs/orapwrac1 /tmp/orapwdg
創建口令文件(密碼為sys用戶的密碼)
orapwd file='/u01/app/oracle/product/11.2.0/dbs/orapwprimary' password=sys entries=10
scp /tmp/orapwdg oracle@rac-dg:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/

4.在主庫上創建備份庫需要的控制文件 (不需要啟動到mount,后續如果控制文件記錄的scn號和歸檔文件不一致,可手動處理,或則恢復到主庫,讓備庫自動同步即可)

ALTER  DATABASE  CREATE  STANDBY  CONTROLFILE  AS  '/tmp/standby.ctl';  
scp standby.ctl oracle@oracle@rac-dg:/u01/app/oracle/data/orcl/controlfile

 cp standby.ctl current01
 cp standby.ctl current02

 5.#備庫工建立以下目錄,保持與主庫目錄一致。

注意:如果tempfile沒有指定在軟件安裝目錄,那么需要在 db_file_name_convert 中指定好轉換的目錄的路徑。

創建存放數據和日志的目錄:
mkdir -p /u01/app/oracle/data/orcl/datafile        --數據文件
mkdir -p /u01/app/oracle/data/orcl/tempfile        --臨時文件
mkdir -p /u01/app/oracle/data/orcl/onlinelog       --redo日志
mkdir -p /u01/app/oracle/data/orcl/controlfile     --控制文件
mkdir -p /u01/app/oracle/data/orcl/archive         --歸檔文件
創建如下目錄和遠端保持一致
mkdir -p /u01/app/oracle/admin/rac/adump
mkdir -p /u01/app/oracle/admin/rac/dpdump
mkdir -p /u01/app/oracle/admin/rac/hdump
mkdir -p /u01/app/oracle/admin/rac/pfile

6.TNS和監聽配置:

TNS主備庫設置一致:(在ORACLE_HOME/network/admin/tnsnames.ora文件中新增如下信息)

DG =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = stdip)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DG)
    )
  )
 
         
RAC =
  (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = RACIP)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = RAC) ) )


配置之后使用tnsping在主備庫上分別測試是否連通:
tnsping rac
tnsping dg

出現如下信息則表示配置成功:

TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 02-NOV-2020 16:34:32
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dg)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = dg)))
OK (30 msec)

TNS配置失敗的可能有

(1).防火牆配置未開放ip和端口

(2).主備庫有ip限制

IP限制配置:

使用grid用戶管理監聽和網絡的環境下在grid home目錄下配置
/oracle/app/11.2.0/grid/network/admin/sqlnet.ora
[oracle@yymhdb2 admin]$ cat sqlnet.ora
# sqlnet.ora.yymhdb2 Network Configuration File: /oracle/app/11.2.0/grid/network/admin/sqlnet.ora.yymhdb2
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
ADR_BASE = /oracle/app/grid
tcp.validnode_checking=yes
tcp.invited_nodes=(IP1,IP2)

非grid管理的環境下在oracle heme環境下配置:

對於rac的環境,建議ip使用scan-ip或者使用vip

使用scan ip:

RAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = RAC)
)

使用vip:

RAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)

監聽配置

 
         

(1)主庫listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = pri)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/)
(SID_NAME = dg)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = primary)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)

ADR_BASE_LISTENER = /u01/app/oracle
注意這里的pri和dg(pri是指一個數據庫對外提供的服務,dg是指實例的名稱,這里提供了一個名為pri的服務該服務下有dg這個實例)
連接時就可以使用sqlplus sys/abc123@pri as sysdba 表示連接到了dg這個實例上。

(2)備庫listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = std)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/)
(SID_NAME = dg)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = standby)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)

ADR_BASE_LISTENER = /u01/app/oracle

配置完成之后重啟監聽。
並使用下面的語句驗證:
(1)tnsnames配置完之后tnsping pri 和tnsping std應該成功
(2)lisenter.ora配置完之后使用sqlplus sys/abc123@pri as sysdba
sqlplus sys/abc123@std as sysdba
測試是否可以連接,如果沒有聯通,一般是因為沒有將密碼文件傳輸到備庫。

通過service 連接:sqlplus scott/scott@std

7.主庫的配置文件:

rac1.__db_cache_size=587202560
rac2.__db_cache_size=587202560
rac1.__java_pool_size=16777216
rac2.__java_pool_size=16777216
rac1.__large_pool_size=33554432
rac2.__large_pool_size=33554432
rac1.__pga_aggregate_target=654311424
rac2.__pga_aggregate_target=654311424
rac1.__sga_target=956301312
rac2.__sga_target=956301312
rac1.__shared_io_pool_size=0
rac2.__shared_io_pool_size=0
rac1.__shared_pool_size=301989888
rac2.__shared_pool_size=301989888
rac1.__streams_pool_size=0
rac2.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/rac/adump'
*.audit_trail='db'
*.cluster_database=true
*.compatible='11.2.0.4.0'

*.log_archive_dest_1='location=+ARCHIVELOG'

*.log_archive_dest_state_1='ENABLE'
*.control_files='+DATADG/rac/controlfile/current.261.1048800525','+DATADG/rac/controlfile/current.260.1048800525'
*.db_block_size=8192
*.db_create_file_dest='+DATADG'
*.db_domain=''
*.db_name='rac'
*.db_recovery_file_dest='+DATADG'
*.db_recovery_file_dest_size=4621074432
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=racXDB)'
rac2.instance_number=2
rac1.instance_number=1
*.log_archive_format='%t_%s_%r.dbf'
*.memory_target=1600126976
*.open_cursors=300
*.processes=150
*.remote_listener='green-scan:1521'
*.remote_login_passwordfile='exclusive'
rac1.thread=1
rac2.thread=2
rac1.undo_tablespace='UNDOTBS2'
rac2.undo_tablespace='UNDOTBS1'

主庫做如下修改:

使用如下語句查看主庫參數配置或者生成spfile文件查看:

select name, value from v$parameter where name in
('db_name','db_unique_name','log_archive_config', 'log_archive_dest_1','log_archive_dest_2','log_archive_dest_3','log_archive_dest_state_1','log_archive_dest_state_2','log_archive_dest_state_3'
,'remote_login_passwordfile','log_archive_format','log_archive_max_processes','fal_server','db_file_name_convert', 'log_file_name_convert',
'standby_file_management');

 

主庫做如下修改,用來向備庫傳輸歸檔日志,主庫啟用歸檔之后做如下配置

這兩個參數只需在standby庫設置,但也可以在primary庫設置這兩個參數,以方便switchover或failover時primary庫轉變為standby角色。

alter system set fal_server='DG';
alter system set fal_client='rac';
ALTER SYSTEM SET log_archive_config='DG_CONFIG=(RAC,DG)' scope=both;
alter system set LOG_ARCHIVE_DEST_2='SERVICE=DG LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DG';
ALTER SYSTEM SET log_archive_dest_state_2='ENABLE';

 
         

參數說明:
fal_server和fal_client,FAL即Fetch Archive Log,其值為Oracle Net service name,即tnsnames.ora中的服務名。
設置這兩個參數可以用來解決Archive Gaps。
一旦產生了gap,fal_client會自動向fal_server請求傳輸gap的archivelog。
設置了這2個參數,就不需要在產生gap時手動向standby注冊歸檔日志了。
所需要做的就是確認主庫有這些歸檔日志,並且主庫的控制文件中有這些日志的注冊信息。

fal_client
對應db_unique_name

fal_server
對應service_name

fal_client 只在主庫端起作用,用於確定向誰發送日志;
yymhstd 只在備庫端起作用,用於確定向誰請求日志
所以不考慮主備切換的情況下主庫只配置fal_client,備庫只配置fal_server:
這樣記就可以了:fal_server配置的是對方,fal_client配置的是自己,無論在主庫和備庫,都這樣配。以后怎么樣切換都不用更改。

fal_server可以設置多個值,用逗號隔開。
primary:
*.fal_server='DG'
*.fal_client='rac'

 
         

standby:
*.fal_server='rac'
*.fal_client='DG'
FAL_CLIENT和FAL_SERVER是配置dataguard用到的兩個參數,FAL指獲取歸檔日志(Fetch Archived Log)
在一定的條件下,或者因為網絡失敗,或者因為資源緊張,會在primary和standby之間產生裂隙,也就是有些歸檔日志沒有及時的傳輸並應用到standby庫。因為MRP(managed recovery process)/LSP(logical standby process)沒有與primary直接通訊的能力來獲取丟失的歸檔日志。因此這些gaps通過FAL客戶和服務器來解決,由初始化參數定義FAL_CLIENT和FAL_SERVER。
FAL_SERVER指定一個Oracle Net service name,standby數據庫使用這個參數連接到FAL server,這個參數適用於standby站點。比如,FAL_SERVER = PrimaryDB,此處PrimaryDB是一個TNS name,指向primary庫。
FAL_CLIENT指定一個FAL客戶端的名字,以便FAL Server可以引用standby庫,這也是一個TNS name,primary庫必須適當配置此TNS name指向stanby庫。這個參數也是在standby庫端設置。比如,FAL_CLIENT = StandbyDB,StandbyDB是standby庫的TNS name。
FAL_CLIENT和FAL_SERVER應該成對設置或改變。
這兩個參數只需在standby庫設置,但也可以在primary庫設置這兩個參數,以方便switchover或failover時primary庫轉變為standby角色

 

備庫做如下修改:

修改后:
*.__db_cache_size=587202560
*.__java_pool_size=16777216
*.__large_pool_size=33554432
*.__pga_aggregate_target=654311424
*.__sga_target=956301312
*.__shared_io_pool_size=0
*.__shared_pool_size=301989888
*.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/rac/adump'
*.audit_trail='db'
*.cluster_database=true
*.compatible='11.2.0.4.0'
*.control_files='/u01/app/oracle/data/orcl/controlfile/current01','/u01/app/oracle/data/orcl/controlfile/current02'
*.db_block_size=8192 #*.db_create_file_dest='+DATADG'
*.db_domain=''
*.db_name='rac'
*.db_recovery_file_dest='/u01/app/oracle/data/orcl/db_recovery'
*.db_recovery_file_dest_size=4621074432
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=racXDB)'
*.fal_client='DG'
*.fal_server='RAC'
*.log_archive_format='%t_%s_%r.dbf'
*.java_jit_enabled=TRUE
*.job_queue_processes=1000
*.log_archive_config='DG_CONFIG=(RAC,DG)'
*.log_archive_dest_1='LOCATION=/u01/app/oracle/data/orcl/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DG'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_max_processes=4
*.log_archive_trace=0
*.memory_target=1600126976
*.open_cursors=300
*.processes=150
*.remote_listener='green-scan:1521'
*.remote_login_passwordfile='exclusive'
DG.thread=1
DG.undo_tablespace='UNDOTBS1'
*.result_cache_max_size=536870912
*.result_cache_mode='AUTO'
*.session_cached_cursors=300
*.sessions=300
*.sga_max_size=3G
*.sga_target=3G
*.standby_file_management='AUTO'
DG.thread=1
*.undo_retention=7200
*.db_file_name_convert='+DATADG/RAC/DATAFILE','/u01/app/oracle/data/orcl//datafile'

重點關注標紅參數部分
alter system set fal_server='RAC';
alter system set fal_client='DG';
ALTER SYSTEM SET log_archive_config='DG_CONFIG=(RAC,DG)' scope=both;
alter system set LOG_ARCHIVE_DEST_2='SERVICE=RAC LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=RAC';
ALTER SYSTEM SET log_archive_dest_state_2='ENABLE';

 

 8.多個備庫可以作如下配置

主庫:
*.fal_client='YYMH'
*.fal_server='YYMHSTD,yymh_std'
*.log_archive_config='DG_CONFIG=(yymh,yymhstd,yymh_std)'
*.log_archive_dest_1='location=+ARCHIVELOG'
*.log_archive_dest_2='SERVICE=yymhstd LGWR ASYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=yymhstd'
*.log_archive_dest_3='SERVICE=yymh_std LGWR ASYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=yymh_std'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_dest_state_3='ENABLE'
備庫1:
*.fal_client='yymh_std'
*.fal_server='yymh,yymh_std'
yymh_std.instance_number=1
*.java_jit_enabled=TRUE
*.job_queue_processes=1000
*.log_archive_config='DG_CONFIG=(yymh,yymhstd,yymh_std)'
*.log_archive_dest_1='LOCATION=/data/yymh/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=yymh_std'
*.log_archive_dest_3='SERVICE=yymh LGWR ASYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=yymh'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_3='ENABLE'
*.db_file_name_convert='+DATADG/yymh/datafile','/data/yymh/datafile'
*.log_file_name_convert='+DATADG/yymh/onlinelog','/data/yymh/onlinelog','+DATADG/yymh/tempfile','/data/yymh/tempfile/'

ALTER SYSTEM SET db_file_name_convert=('+DATADG/yymh/datafile','/data/yymh/datafile','+DATADG/yymh/tempfile','/data/yymh/tempfile/')

備庫2:
*.fal_client='yymhstd'
*.fal_server='yymh,yymhstd'
yymhstd.instance_number=1
*.java_jit_enabled=TRUE
*.job_queue_processes=1000
*.log_archive_config='DG_CONFIG=(yymh,yymhstd,yymh_std)'
*.log_archive_dest_1='LOCATION=/data/yymh/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=yymhstd'
*.log_archive_dest_3='SERVICE=yymh LGWR ASYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=yymh'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_3='ENABLE'
*.db_file_name_convert='+DATADG/yymh/datafile','/data/yymh/datafile','+DATADG/yymh/tempfile','/data/yymh/tempfile/'
*.log_file_name_convert='+DATADG/yymh/onlinelog','/data/yymh/onlinelog'

ALTER SYSTEM SET db_file_name_convert=('+DATADG/yymh/datafile','/data/yymh/datafile','+DATADG/yymh/tempfile','/data/yymh/tempfile/')

1.參數的作用:
db_file_name_convert 主數據庫和備用數據庫的數據文件轉換目錄對映(如果兩數據庫的目錄結構不一樣),
如果有多個對映,逐一指明對映關系。
2.該參數應該配置在主還是備?
備庫,這個參數不能動態配置,需要重啟實例,如果在主庫配置需要重啟主庫,對於不能停的數據庫是不允許的。
3.該參數的寫法:
db_file_name_convert='+RACDATA/racdb/datafile/','/oradata/standby/'

9.創建添加standby redolog
在主庫、從庫上都配置standby redo log 

在主庫查看日志組的數量和每個日志文件的大小??
SQL>select * from v$log;

在備庫庫查看日志組的數量和每個日志文件的大小??
SQL>select * from v$log;
select group#,thread#,sequence#,archived,status from v$standby_log;
select * from v$standby_log;

standby logde 創建:
alter database add standby logfile thread 1 group 7 ('+DATA1/dg/onlinelog/standby7.log') size 50m,
group 8('+DATA1/dg/onlinelog/standby8.log') size 50m,
group 9('+DATA1/dg/onlinelog/standby9.log') size 50m,
group 10('+DATA1/dg/onlinelog/standby10.log') size 50m,
group 11('+DATA1/dg/onlinelog/standby11.log') size 50m,
group 12('+DATA1/dg/onlinelog/standby12.log') size 50m;

alter database add standby logfile thread 2 group 13 ('+DATA2/dg/onlinelog/standby13.log') size 50m,
group 14('+DATA2/dg/onlinelog/standby14.log') size 50m,
group 15('+DATA2/dg/onlinelog/standby15.log') size 50m,
group 16('+DATA2/dg/onlinelog/standby16.log') size 50m,
group 17('+DATA2/dg/onlinelog/standby17.log') size 50m,
group 18('+DATA2/dg/onlinelog/standby18.log') size 50m;

standby redolog的組數參考公式:(online redolog組數+1)*數據庫線程數;
單機線程數為1,RAC一般為2。standby redolog的組成員數和大小也盡量和online redolog一樣。

 

10.主庫執行全備(包括數據文件,歸檔日志文件和控制文件,這里建議使用主庫創建的控制文件)

run
{
allocate channel c1 type disk; allocate channel c2 type disk; backup
as compressed backupset filesperset 3 database format '/tmp/full_%d_%T_%s_%p'; sql 'alter system archive log current'; backup archivelog all format '/tmp/arch_%d_%T_%s_%p'; backup current controlfile format '/tmp/ctl_%d_%T_%s_%p'; }
scp * 192.168.1.2:/bak

11.啟動備庫

startup pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initdg.ora' nomount;
create spfile from pfile;
shutdown immediate

控制文件准備好以后直接啟動到mount
cp standby.ctl current01
cp standby.ctl current02
startup mount;

12.恢復數據文件

 
         

注冊目錄:
catalog start with '/bak/';

 
         

執行數據文件恢復
#! /bin/bash
/oracle/app/oracle/product/11.2.0/db/bin/rman target / <<EOF
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
restore database;
RELEASE CHANNEL c1;
RELEASE CHANNEL c2;
}
exit;

nohup sh restore.sh >> restore.log 2>&1 &

10.恢復歸檔:

#! /bin/bash
/oracle/app/oracle/product/11.2.0/db/bin/rman target / <<EOF
run {
allocate channel c1 type disk;
SET ARCHIVELOG DESTINATION TO '/data/yymh/arch';
recover database;
RELEASE CHANNEL c1;
}
exit;

nohup sh recover.sh >> recover1.log 2>&1 &

recover database until scn 741679073877;

 

12.如果出現歸檔的gap

查看日志應用情況:
select THREAD#,sequence#,applied from v$archived_log where THREAD#='2' order by sequence#;
select THREAD#,sequence#,applied from v$archived_log where THREAD#='1' order by sequence#;

select THREAD#,sequence#,applied from v$archived_log where applied='YES' and THREAD#='2' order by sequence#

standby啟用實時同步
alter database recover managed standby database using current logfile disconnect;
alter database recover managed standby database cancel;
alter database open read only;
alter database recover managed standby database using current logfile disconnect;

 

查看日志gap

select * from v$archive_gap;

查看備份中是否有對應的歸檔文件:

list backup of archivelog from logseq=75358 until logseq=75392 thread=1;

如果出現gap,可以用如下方式處理:

1.如果主庫有備份,歸檔已經被備份並且現在沒有保留在主庫的歸檔目錄下:

可以直接在主庫或者備庫使用下面的命令執行恢復操作,將歸檔恢復

(1)注冊備份集:

list backupset of database;

catalog start with '/bak/';   或者 CATALOG DEVICE TYPE 'SBT_TAPE' BACKUPPIECE '/tmp/backup'

或者:catalog backuppiece '/tmp/backup'

(2)恢復歸檔:

#! /bin/bash
/oracle/app/oracle/product/11.2.0/db/bin/rman target / <<EOF
run {
ALLOCATE CHANNEL c0 TYPE 'SBT_TAPE' SEND 'NB_ORA_SERV=NBUmaster,NB_ORA_CLIENT=yymhdb1,NB_ORA_DISK_MEDIA_SERVER=nbu5230j5';
ALLOCATE CHANNEL c1 TYPE 'SBT_TAPE' SEND 'NB_ORA_SERV=NBUmaster,NB_ORA_CLIENT=yymhdb2,NB_ORA_DISK_MEDIA_SERVER=nbu5230j5';
restore archivelog from logseq=69653 until logseq=69677 thread=2;
RELEASE CHANNEL c0;
RELEASE CHANNEL c2;
}

(3)如果在備庫恢復的歸檔,則還需要注冊歸檔:

注冊歸檔:CATALOG ARCHIVELOG '+FRA/archivelog/arc_ecdbpr_2_31129_928378592.arc';

 

2.因為造成歸檔gap的根本原因是控制文件不夠新,控制文件中沒有記錄對應的歸檔信息,所以我們可以在備庫控制文件中注冊對應的歸檔信息,或者保證拿到最新的控制文件,(主庫啟動到mount下)

3.可以在主庫將歸檔拷貝到備庫

 13.如果temp 默認不在oracle安裝目錄下,並且沒有配置db_file_name_convert而導致數據庫異常停止,並找不到對應的tempfile的數據文件而報錯:

查看tempfile的配置:
select
tablespace_name, file_id, file_name,status,autoextensible, round(bytes/(1024*1024),0) total_space from dba_temp_files order by tablespace_name,file_name;

  刪除舊的tempfile配置:
  alter database tempfile '+data/yymh/tempfile/temp01.dbf' drop;
  新增tempfile:
  alter tablespace temp add tempfile '/data/yymh/tempfile/temp.262.887397719' size 8782k reuse;

14 .同步狀態驗證:

通過以下sql檢查驗證同步情況
select name,open_mode,DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL from v$database;

查看日志應用情況:
select THREAD#,sequence#,applied from v$archived_log where THREAD#='2' order by sequence#;
select THREAD#,sequence#,applied from v$archived_log where THREAD#='1' order by sequence#;

查看備庫進程情況
select process,status,sequence# from v$managed_standby;
RFS進程:負責日志的傳輸
MRP進程:負責日志的應用
針對RAC環境的dg環境,RFS和MRP是只存在一個節點中的。
如果登錄一個節點發現沒有這兩個進程,要在另一個節點上再次驗證。

查看備庫數據庫同步情況:
select thread#,sequence#,applied from v$archived_log;
查看applied的結果,如果是YES 最后為IN-MEMORY 表示數據已經應用。
如果 結果中出現NO,表示數據同步已經出現延遲,要明確是未來得及應用還是同步中斷。

15. oracle匯總快速查看錯誤日志的命令:

oerr ora 01187

 oerr ora 471
 929  cd  /oracle/app/oracle/diag/rdbms/yymh_std/yymh/trace/
 930  ls -ltr *dbw*
 931  tail -200 yymh_dbw0_1746.trc

16. oracle的異常bug:

處理如下bug,只需要在將備庫啟動到mount,在啟用日志同步即可
Slave exiting with ORA-600 exception Errors in file /oracle/app/oracle/diag/rdbms/yymh_std/yymh/trace/yymh_pr03_14316.trc: ORA-00600: internal error code, arguments: [kcbr_apply_change_11], [], [], [], [], [], [], [], [], [], [], [] Slave exiting with ORA-600 exception Errors in file /oracle/app/oracle/diag/rdbms/yymh_std/yymh/trace/yymh_pr02_14314.trc: ORA-00600: internal error code, arguments: [kcbr_apply_change_11], [], [], [], [], [], [], [], [], [], [], []

配置完畢!


免責聲明!

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



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