2023-04-07 DATAGUARD維護(hù)

19c ADG

--原文: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;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容