--原文:https://www.cnblogs.com/ss-33/p/14500517.html
10、主庫(kù)設(shè)置為歸檔模式
alter database archivelog
設(shè)置主數(shù)據(jù)庫(kù)為日志強(qiáng)制寫(xiě)狀態(tài)
alter database force logging;
查看狀態(tài)日志強(qiáng)制寫(xiě)狀態(tài)為YES
select log_mode,force_logging from v$database;
LOG_MODE???? FOR
------------ ---
ARCHIVELOG?? YES
11、查看主庫(kù)數(shù)據(jù)庫(kù)的日志組個(gè)數(shù)與大小,因?yàn)槲覀儎?chuàng)建standby日志組的個(gè)數(shù)是原日志組個(gè)數(shù)+1再與thread的積,size不能小于原日志文件的大小。
SQL> select group#,THREAD#,bytes/1024/1024 from v$log;
??? GROUP#??? THREAD# BYTES/1024/1024
---------- ---------- ---------------
?1??????????? 1????????????????? 200
?2??????????? 1????????????????? 200
?3??????????? 1????????????????? 200
SQL> select member from v$logfile;
MEMBER
--------------------------------------
/u01/app/oradata/DT/redo03.log
/u01/app/oradata/DT/redo02.log
/u01/app/oradata/DT/redo01.log
12、創(chuàng)建standby日志組,個(gè)數(shù)是原日志組個(gè)數(shù)+1再與實(shí)例數(shù)的積,size不能小于原日志文件的大小
注:RAC環(huán)境注意實(shí)例有幾個(gè),新建standby日志組的路徑可與原日志組相同。
SQL> alter database add standby logfile '/u01/app/oradata/DT/standby01.log' size 200m;
Database altered.
alter database add standby logfile '/u01/app/oradata/DT/standby01.log' size 200m;
alter database add standby logfile '/u01/app/oradata/DT/standby02.log' size 200m;
alter database add standby logfile '/u01/app/oradata/DT/standby03.log' size 200m;
alter database add standby logfile '/u01/app/oradata/DT/standby04.log' size 200m;
創(chuàng)建完成后查詢(xún)是否成功
SQL> select group#,status,type,member from v$logfile;
??? GROUP# STATUS? TYPE??? MEMBER
---------- ------- ------- --------------------------------------------------
?3?????????? ONLINE? /u01/app/oradata/DT/redo03.log
?2?????????? ONLINE? /u01/app/oradata/DT/redo02.log
?1?????????? ONLINE? /u01/app/oradata/DT/redo01.log
?4?????????? STANDBY /u01/app/oradata/DT/standby01.log
?5?????????? STANDBY /u01/app/oradata/DT/standby02.log
?6?????????? STANDBY /u01/app/oradata/DT/standby03.log
?7?????????? STANDBY /u01/app/oradata/DT/standby04.log
7 rows selected.
13、啟動(dòng)備庫(kù)到NOMOUNT
$ sqlplus / as sysdba
SQL> startup nomount pfile='/home/oracle/backup/INITtestdb.ORA';
注:如果pfile文件放在默認(rèn)路徑,且文件名正確的話(huà)。不需要指定pfile路徑,直接startup nomount即可。
14、duplicate開(kāi)始
在主庫(kù)上通過(guò)rman進(jìn)行復(fù)制備庫(kù)(注意在這一步之前必須退出備庫(kù)的所有連接,否則會(huì)報(bào)錯(cuò))
rman target sys/oracle auxiliary sys/oracle@dgtest
rman> duplicate target database for standby nofilenamecheck from active database;
經(jīng)資料查詢(xún),發(fā)現(xiàn)在duplicate傳輸時(shí),windows下全部是大寫(xiě)字符,所以,還得修改
DB_FILE_NAME_CONVERT和LOG_FILE_NAME_CONVERT參數(shù)的路徑,全用大寫(xiě)
*************************錯(cuò)誤信息*************************
19c測(cè)試時(shí)由于備庫(kù)的環(huán)境變量ORACLE_HOME配置有誤,導(dǎo)致始終無(wú)法連接到備庫(kù),報(bào)錯(cuò)如下:
[oracle@test19c admin]$ rman target sys/oracle auxiliary sys/oracle@dgtest
Recovery Manager: Release 19.0.0.0.0 - Production on Mon Jun 17 18:13:10 2019
Version 19.2.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates.? All rights reserved.
connected to target database: DT (DBID=1254913786)
connected to auxiliary database (not started)
RMAN> exit
檢查發(fā)現(xiàn)在.bash_profile文件中,ORACLE_BASE的路徑最后加了一個(gè)/,導(dǎo)致在ORACLE_HOME中多了一個(gè)/
ORACLE_BASE=/u01/app/oracle/; export ORACLE_BASE?? ---/u01/app/oracle不該多那個(gè)/啊。。。
ORACLE_HOME=$ORACLE_BASE/product/19.2.0/dbhome_1; export ORACLE_HOME
最終使用echo $ORACLE_HOME時(shí)看到的路徑如下:
/u01/app/oracle//product/19.2.0/dbhome_1
但是最無(wú)奈的是你輸入cd $ORACLE_HOME的時(shí)候卻可以進(jìn)入正確的路徑,然后pwd會(huì)顯示:/u01/app/oracle/product/19.2.0/dbhome_1
所以之前檢查時(shí),始終認(rèn)為環(huán)境變量沒(méi)有問(wèn)題。最終將ORACLE_BASE修改為/u01/app/oracle?然后重啟監(jiān)聽(tīng),重啟備庫(kù)就好了
總結(jié):還是使用echo來(lái)檢查各種環(huán)境變量,不要直接cd進(jìn)去檢查。
------分割線(xiàn)------
注意db_recovery_file_dest_size的大小,上次部署12c生產(chǎn)環(huán)境就是大小有問(wèn)題,修改后解決:
SQL> alter system set db_recovery_file_dest_size=60G;
***************************End***************************
15、open備庫(kù),并恢復(fù)到自動(dòng)恢復(fù)狀態(tài)
確認(rèn)備庫(kù)狀態(tài):
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
MOUNTED
把備庫(kù)啟動(dòng)到open only下面:
SQL> alter database open read only;
在備庫(kù)上啟動(dòng)數(shù)據(jù)庫(kù)到恢復(fù)管理模式,并開(kāi)始準(zhǔn)備從主庫(kù)接受歸檔日志的傳輸:
SQL> alter database recover managed standby database using current logfile disconnect from session;
*************************錯(cuò)誤信息*************************
備庫(kù)啟動(dòng)報(bào)錯(cuò):
SQL> alter database open read only;
alter database open read only
*
ERROR at line 1:
ORA-10458: standby database requires recovery
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: '/u01/app/oradata/dgtest/system01.dbf'
在主備庫(kù)上查看alert日志,發(fā)現(xiàn)備庫(kù)alert日志有如下信息:
PR00 (PID:7481): Please verify that primary database is transporting redo logs to the standby database
根據(jù)信息檢查,發(fā)現(xiàn)redo根本沒(méi)過(guò)來(lái),因?yàn)樵趥鋷?kù)歸檔目錄沒(méi)有看到一個(gè)歸檔文件?。?!
目前定位就是無(wú)法傳輸歸檔,于是在主備庫(kù)檢查歸檔是否有報(bào)錯(cuò):
select status,error from v$archive_dest;
在主庫(kù)發(fā)現(xiàn)報(bào)錯(cuò):
SQL> select status,error from v$archive_dest;
STATUS????????? ERROR
--------- -----------------------------------------------------------------
VALID
ERROR????????? ORA-16086: Redo data cannot be written to the standby redo log
這種報(bào)錯(cuò)一般也是和配置文件相關(guān),網(wǎng)上也有相關(guān)文檔和排錯(cuò)思路。
經(jīng)過(guò)多次測(cè)試發(fā)現(xiàn)是和db_unique_name參數(shù)沒(méi)有配置有關(guān):
檢查發(fā)現(xiàn)備庫(kù)的db_unique_name在沒(méi)有配置的情況下默認(rèn)也叫DT,和主庫(kù)一致。
這就導(dǎo)致了主備庫(kù)因?yàn)閐b_unique_name一致而無(wú)法區(qū)分,進(jìn)而導(dǎo)致redo無(wú)法傳輸,也就沒(méi)有歸檔了。
SQL> show parameter name
NAME???????????????????????????????????????? TYPE???????????? VALUE
---------------------------- ----------- ------------------------------
cdb_cluster_name???????????????????? string
cell_offloadgroup_name? ? ? ? ? ? ? ?string
db_file_name_convert???????????????? string????????????? /u01/app/oradata/DT, /u01/app/oradata/dgtest
db_name? ? ? ? ? ? ? ? ? ? ? ? ? ? ? string????????????? DT
db_unique_name? ? ? ? ? ? ? ? ? ? ? ?string????????????? DT
global_names? ? ? ? ? ? ? ? ? ? ? ? ?boolean? ? ? ? ? ? ?FALSE
instance_name? ? ? ? ? ? ? ? ? ? ? ? string????????????? dgtest
lock_name_space ???????????????????? string
log_file_name_convert? ? ? ? ? ? ? ? string????????????? /u01/app/oradata/DT, /u01/app/oradata/dgtest
pdb_file_name_convert? ? ? ? ? ? ? ? string
processor_group_name???????????????? string
service_names? ? ? ? ? ? ? ? ? ? ? ? string????????????? DT
SQL>
上面的信息可以看到instance_name是dgtest,但是db_unique_name還是DT,所以導(dǎo)致redo無(wú)法傳輸。
最后在備庫(kù)上修改pfile文件,加上db_unique_name的配置就解決問(wèn)題了。
最好是主備庫(kù)都在pfile中定義一下db_unique_name!
本次部署環(huán)境,19c主庫(kù)安裝好后,生成的pfile沒(méi)有定義db_unique_name,所以也就忽略了這個(gè)問(wèn)題。
-------分割線(xiàn),下面步驟操作有問(wèn)題,應(yīng)該先open庫(kù)----------
回到原主庫(kù)啟動(dòng)STANDBY開(kāi)始接收并恢復(fù)主庫(kù)的日志
alter database recover managed standby database using current logfile disconnect from session;
在mount狀態(tài)下輸入上面語(yǔ)句,導(dǎo)致數(shù)據(jù)庫(kù)無(wú)法open,所以需要退出這個(gè)狀態(tài)
alter database recover managed standby database cancel;
***************************End***************************
16、主庫(kù)檢查L(zhǎng)NS進(jìn)程:
select process,status from v$managed_standby;
查看進(jìn)程,看有沒(méi)有LNS進(jìn)程,如果沒(méi)有則需要檢查DG環(huán)境
SQL> select process,status from v$managed_standby;
PROCESS?? STATUS
--------- ------------
DGRD????????? ALLOCATED
ARCH????????? CLOSING
DGRD????????? ALLOCATED
ARCH????????? OPENING
ARCH????????? CONNECTED
ARCH????????? CONNECTED
LNS????????? OPENING
DGRD????????? ALLOCATED
LNS????????? WRITING
9 rows selected.
17、檢查主備庫(kù)角色和其他信息
在備庫(kù)端查看其角色是否已經(jīng)是physical standby,檢查當(dāng)前備庫(kù)的模式PROTECTION_MODE
SQL> select DATABASE_ROLE,protection_mode,open_mode from v$database;
DATABASE_ROLE???????? PROTECTION_MODE????? OPEN_MODE
---------------- -------------------- --------------------
PHYSICAL STANDBY MAXIMUM PERFORMANCE? READ ONLY WITH APPLY
在主庫(kù)查看其角色
SQL> select DATABASE_ROLE,open_mode from gv$database;
DATABASE_ROLE???????? OPEN_MODE
---------------- --------------------
PRIMARY ???????????? READ WRITE
在備庫(kù)查看data guard為哪種日志接受方式
SQL> select process,client_process,sequence#,status from v$managed_standby;
PROCESS?? CLIENT_P? SEQUENCE# STATUS
--------- -------- ---------- ------------
ARCH????????? ARCH? ? ? ? ? ? ? ? 0 CONNECTED
DGRD????????? N/A? ? ? ? ? ? ? ? ?0 ALLOCATED
DGRD????????? N/A? ? ? ? ? ? ? ? ?0 ALLOCATED
ARCH????????? ARCH? ? ? ? ? ? ? ? 0 CONNECTED
ARCH????????? ARCH? ? ? ? ? ? ? ? 0 CONNECTED
ARCH????????? ARCH? ? ? ? ? ? ? ? 0 CONNECTED
RFS? ? ? ? ? ?Archival? ? ? ? ? ? 0 IDLE
RFS? ? ? ? ? ?LGWR? ? ? ? ? ? ? ?31 IDLE
RFS? ? ? ? ? ?UNKNOWN? ? ? ? ? ? ?0 IDLE
MRP0????????? N/A? ? ? ? ? ? ? ? 31 APPLYING_LOG
10 rows selected.
18、檢查主備庫(kù)sequence#
select max(sequence#) from v$archived_log;
select sequence#,name,standby_dest,applied,deleted from v$archived_log where??archived='YES' order by sequence# desc;
主庫(kù):
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
??? 30
備庫(kù)
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
??? 30
19、測(cè)試日志隊(duì)列是否能正常傳輸
在備庫(kù)查看日志的隊(duì)列情況
SQL> select sequence#,applied,first_time,next_time from v$archived_log order by sequence#;
?SEQUENCE# APPLIED?? FIRST_TIM NEXT_TIME
---------- --------- --------- ---------
30 YES???????????? 18-JUN-19 18-JUN-19
在主庫(kù)進(jìn)行強(qiáng)制歸檔
ALTER SYSTEM ARCHIVE LOG CURRENT;
alter system switch logfile;
在備庫(kù)查看日志的隊(duì)列情況,看新的歸檔日志有沒(méi)有正常傳輸過(guò)來(lái)
SQL> select sequence#,applied,first_time,next_time from v$archived_log order by sequence#;
?SEQUENCE# APPLIED?? FIRST_TIM NEXT_TIME
---------- --------- --------- ---------
30 YES???????????? 18-JUN-19 18-JUN-19
31 NO???????????? 18-JUN-19 18-JUN-19
32 IN-MEMORY 18-JUN-19 18-JUN-19
檢查下兩邊的日志同步情況
select sequence# from v$archived_log where applied='YES';
看看有沒(méi)有寫(xiě)的redo log:
select sequence#,applied from v$archived_log;
20、查看DG是否正常工作,這一步主要看歸檔有無(wú)報(bào)錯(cuò)
select dest_id,error,status from v$archive_dest where status='ERROR';
SQL> select dest_id,error,status from v$archive_dest where status='ERROR';
no rows selected
也可以直接查看所有歸檔目錄信息:
select dest_id,error,status from v$archive_dest
21、在主庫(kù)新建表空間、用戶(hù)、表,并插入數(shù)據(jù)來(lái)測(cè)試備庫(kù)是否能及時(shí)同步數(shù)據(jù)
主庫(kù)創(chuàng)建測(cè)試表空間:
SQL> create tablespace test datafile '/u01/app/oradata/DT/dt01.dbf' size 50m;
主備庫(kù)查看數(shù)據(jù)文件狀態(tài)
select FILE#,CREATION_TIME,STATUS,NAME,BYTES from v$datafile;
主庫(kù):
SQL> select FILE#,CREATION_TIME,STATUS,NAME,BYTES from v$datafile;
?FILE#? CREATION_ STATUS? NAME???????????????????????????????????????????????????????????????? BYTES
------- --------- ------- ------------------------------------------ ----------
1 ????????04-FEB-19 SYSTEM? /u01/app/oradata/DT/system01.dbf???????????????????????? 943718400
3 ????????04-FEB-19 ONLINE? /u01/app/oradata/DT/sysaux01.dbf???????????????????????? 555745280
4 ????????04-FEB-19 ONLINE? /u01/app/oradata/DT/undotbs01.dbf????????????????????????? 68157440
5 ????????18-JUN-19 ONLINE? /u01/app/oradata/DT/dt01.dbf????????????????????????????? 52428800
7 ????????04-FEB-19 ONLINE? /u01/app/oradata/DT/users01.dbf?????????????????????????? 5242880
備庫(kù):
SQL> select FILE#,CREATION_TIME,STATUS,NAME,BYTES from v$datafile;
FILE#?? CREATION_ STATUS? NAME???????????????????????????????????????????????????????????????? BYTES
------- --------- ------- ------------------------------------------ ----------
1 ????????04-FEB-19 SYSTEM? /u01/app/oradata/dgtest/system01.dbf???????????????? 943718400
3 ????????04-FEB-19 ONLINE? /u01/app/oradata/dgtest/sysaux01.dbf???????????????? 555745280
4 ????????04-FEB-19 ONLINE? /u01/app/oradata/dgtest/undotbs01.dbf????????????????? 68157440
5 ????????18-JUN-19 ONLINE? /u01/app/oradata/dgtest/dt01.dbf????????????????????????? 52428800
7 ????????04-FEB-19 ONLINE? /u01/app/oradata/dgtest/users01.dbf?????????????????? 5242880
主庫(kù)操作:
1>?創(chuàng)建用戶(hù)
create user dgtest default tablespace test identified by oracle;
grant dba to dgtest;
2>?切換用戶(hù)
sqlplus dgtest/oracle
3> dgtest用戶(hù)下創(chuàng)建表和插入測(cè)試數(shù)據(jù)
--創(chuàng)建表
create table dgtest (
??? id number(9) not null primary key,
??? classname varchar2(40) not null
??? );
--插入數(shù)據(jù)
insert into dgtest values(28,'class one');
insert into dgtest values(29,'detest one');
commit;
在備庫(kù)執(zhí)行查詢(xún):
select * from dgtest.dgtest;
SQL> select * from dgtest.dgtest;
ID CLASSNAME
------ ----------------------------------------
28 class one
29 detest one
刪除測(cè)試數(shù)據(jù):
drop tablespace test including contents and datafiles;
drop user dgtest cascade;
到此DG環(huán)境部署完畢,數(shù)據(jù)可以正常同步。
--------------------------------------------------------------
------------------------主備庫(kù)切換測(cè)試------------------------
--------------------------------------------------------------
#切換的兩種方式switchover和failover
switchover?切換:主庫(kù)與備庫(kù)數(shù)據(jù)同步正常情況下的切換,主要用于主備維護(hù)、切換演練等;
failover?切換:主庫(kù)與備庫(kù)在數(shù)據(jù)未同步情況下的強(qiáng)制切換,主要用于主庫(kù)宕機(jī)、故障情況下切換;
一、switchover
Oracle?物理DG切換
在進(jìn)行DATA GUARD的物理STANDBY切換前需要注意:
確認(rèn)主庫(kù)和備庫(kù)間網(wǎng)絡(luò)連接通暢;
確認(rèn)沒(méi)有活動(dòng)的會(huì)話(huà)連接在數(shù)據(jù)庫(kù)中;
確保STANDBY數(shù)據(jù)庫(kù)處于ARCHIVELOG模式;
如果設(shè)置了REDO應(yīng)用的延遲,那么將這個(gè)設(shè)置去掉;
確保配置了主庫(kù)和備庫(kù)的初始化參數(shù),使得切換完成后,DATA GUARD機(jī)制可以順利的運(yùn)行。
#準(zhǔn)備工作:
確認(rèn)當(dāng)前主庫(kù)只有當(dāng)前會(huì)話(huà)連接:
set pages 100 linesize 1000;
select SWITCHOVER_STATUS from v$database;
SQL> select SWITCHOVER_STATUS from v$database;
SWITCHOVER_STATUS
--------------------
TO STANDBY
select count(*) from v$session where username is not null;
SQL> select count(*) from v$session where username is not null;
? COUNT(*)
----------
?2
若有多于一個(gè)會(huì)話(huà)則:
select sid,serial# from v$session where username is not null;
SQL> select sid,serial# from v$session where username is not null;
? SID SERIAL#
----- ----------
2 10746
? 621 13864
select userenv('sid') from dual;
SQL> select userenv('sid') from dual;
USERENV('SID')
--------------
?? 621
則執(zhí)行下面語(yǔ)句殺掉:alter system kill session 'sid,serial#';
SQL> alter system kill session '621,13864';
alter system kill session '621,13864'
*
ERROR at line 1:
ORA-00027: cannot kill current session
原來(lái)621是當(dāng)前會(huì)話(huà),可以不用理會(huì)。
#正式切換:
主庫(kù)與備庫(kù)數(shù)據(jù)同步,且正常運(yùn)行,將主庫(kù)與備庫(kù)的角色互換,也可以互換回來(lái)。
切換前,務(wù)必檢查當(dāng)前主庫(kù)與備庫(kù)的歸檔是否是同步的,確認(rèn)同步后再執(zhí)行切換
主庫(kù)切備庫(kù)
1、查看庫(kù)的角色
主庫(kù):
SQL> select CONTROLFILE_TYPE,OPEN_MODE,DATABASE_ROLE,SWITCHOVER_STATUS from V$DATABASE;
CONTROL OPEN_MODE???????????? DATABASE_ROLE??? SWITCHOVER_STATUS
------- ---------------- ---------------- --------------------
CURRENT READ WRITE???????????? PRIMARY????????????? TO STANDBY
SWITCHOVER_STATUS為T(mén)O STANDBY,說(shuō)明主庫(kù)可以切換為備庫(kù)
備庫(kù):
SQL> select CONTROLFILE_TYPE,OPEN_MODE,DATABASE_ROLE,SWITCHOVER_STATUS from V$DATABASE;
CONTROL OPEN_MODE???????????? DATABASE_ROLE??? SWITCHOVER_STATUS
------- ---------------- ---------------- --------------------
STANDBY READ ONLY???????????? PHYSICAL STANDBY NOT ALLOWED
SWITCHOVER_STATUS為NOT ALLOWED,這是備庫(kù)的正常狀態(tài)。
在主庫(kù)首先切換后,我們?cè)俨樵?xún)備庫(kù)狀態(tài)會(huì)發(fā)現(xiàn)SWITCHOVER_STATUS有改變
2、對(duì)主庫(kù)進(jìn)行切換
SQL> alter database commit to switchover to physical standby with session shutdown;
此時(shí)主庫(kù)已經(jīng)開(kāi)始切換到備庫(kù)的過(guò)程了,而備庫(kù)的SWITCHOVER_STATUS已經(jīng)變成TO PRIMARY
3、此時(shí)主庫(kù)已經(jīng)關(guān)閉,打到read only或同步狀態(tài)
SQL> startup mount;
ORACLE instance started.
Total System Global Area? 905967800 bytes
Fixed Size??????????????????? 8902840 bytes
Variable Size????????????????? 788529152 bytes
Database Buffers????????? 100663296 bytes
Redo Buffers??????????????????? 7872512 bytes
Database mounted.
SQL> alter database open read only;
Database altered.
4、再查主庫(kù)的角色,確認(rèn)已經(jīng)切換為備庫(kù)
SQL> select CONTROLFILE_TYPE,OPEN_MODE,DATABASE_ROLE,SWITCHOVER_STATUS from V$DATABASE;
CONTROL OPEN_MODE???????????? DATABASE_ROLE??? SWITCHOVER_STATUS
------- ---------------- ---------------- --------------------
STANDBY READ ONLY???????????? PHYSICAL STANDBY TO PRIMARY
注:這一步操作完成后,此時(shí)主備庫(kù)都是open read only狀態(tài),且SWITCHOVER_STATUS都為T(mén)O PRIMARY。
此時(shí)已經(jīng)沒(méi)有真正主庫(kù)存在的了,主庫(kù)已經(jīng)切換為備庫(kù),備庫(kù)還未切換成主庫(kù)。
也就是說(shuō)此時(shí)主備庫(kù)都能切換為真正的主庫(kù)
5、在備庫(kù)上啟動(dòng)數(shù)據(jù)庫(kù)到恢復(fù)管理模式,并開(kāi)始準(zhǔn)備從主庫(kù)接受歸檔日志的傳輸。
SQL> alter database recover managed standby database using current logfile disconnect from session;
注:這一步不執(zhí)行的話(huà),OPEN_MODE狀態(tài)始終是READ ONLY,無(wú)法變成正常的READ ONLY WITH APPLY
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE?USING ARCHIVED LOGFILE?DISCONNECT;
查資料顯示,12c之后使用上面這個(gè)語(yǔ)句來(lái)APPLY,黃色部分為和11gR2的區(qū)別
6、再查主庫(kù)的角色,確認(rèn)已經(jīng)切換為備庫(kù),且OPEN_MODE為READ ONLY WITH APPLY
SQL> select CONTROLFILE_TYPE,OPEN_MODE,DATABASE_ROLE,SWITCHOVER_STATUS from V$DATABASE;
CONTROL OPEN_MODE???????????????? DATABASE_ROLE??? SWITCHOVER_STATUS
------- -------------------- ---------------- --------------------
STANDBY READ ONLY WITH APPLY PHYSICAL STANDBY TO PRIMARY
備庫(kù)切主庫(kù)
1、查看備庫(kù)角色:
SQL> select CONTROLFILE_TYPE,OPEN_MODE,DATABASE_ROLE,SWITCHOVER_STATUS from V$DATABASE;
CONTROL OPEN_MODE???????????????? DATABASE_ROLE??? SWITCHOVER_STATUS
------- -------------------- ---------------- --------------------
STANDBY READ ONLY WITH APPLY PHYSICAL STANDBY TO PRIMARY
SWITCHOVER_STATUS為T(mén)O PRIMARY,說(shuō)明備庫(kù)可以切換為主庫(kù)
2、備切主命令
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
3、確認(rèn)備庫(kù)已經(jīng)是mount狀態(tài)
SQL> select status,instance_name from v$instance;
STATUS???????????? INSTANCE_NAME
------------ ----------------
MOUNTED????? dgtest
4、打到OPEN狀態(tài)
SQL> ALTER DATABASE OPEN;
現(xiàn)在的主庫(kù)切換幾次日志文件,備庫(kù)可以同步日志文件。
注:只有在備庫(kù)OPEN完成切換,成為新主庫(kù)之后,原主庫(kù)的SWITCHOVER_STATUS狀態(tài)才會(huì)由TO PRIMARY變?yōu)镹OT ALLOWED
5、再查備庫(kù)的角色,確認(rèn)已經(jīng)切換為主庫(kù)
SQL> select CONTROLFILE_TYPE,OPEN_MODE,DATABASE_ROLE,SWITCHOVER_STATUS from V$DATABASE;
CONTROL OPEN_MODE???????????? DATABASE_ROLE??? SWITCHOVER_STATUS
------- ---------------- ---------------- --------------------
CURRENT READ WRITE???????????? PRIMARY????????????? TO STANDBY
--------------------------------------------------------------
-----到此,主備庫(kù)切換完畢,standby to primary過(guò)程已經(jīng)完成-----
--------------------------------------------------------------
二、failover災(zāi)難切換
主庫(kù)宕機(jī),無(wú)法啟動(dòng),緊急啟用備庫(kù)。直接在備庫(kù)上操作,將備庫(kù)轉(zhuǎn)換為主庫(kù)角色
備庫(kù)上執(zhí)行下面四條命令即可:
SQL > alter database recover managed standby database finish;
SQL > alter database commit to switchover to primary;
SQL > shutdown immediate;
SQL > startup;