11g Oracle DG搭建、switchover、failover案例

101 阅读7分钟

安装oracle并建库

设置主机名

[root@hzlh-yz-rfid-p1 ~]# cat /etc/hosts 
添加: 
10.157.37.61   hzlh-yz-rfid-p1
[root@hzlh-yz-rfid-p1 ~]# cat /etc/sysconfig/network 
NETWORKING=yes 
#HOSTNAME=localhost.localdomain 
HOSTNAME=hzlh-yz-rfid-p1

创建 oracle 用户及组并赋权

groupadd oinstall 
 groupadd dba 
useradd -g oinstall -G dba oracle 
echo oracle | passwd oracle
[root@localhost home]# id oracle 
uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba) 


chown oracle.oinstall /u01/ 
chown -R oracle:oinstall /data 
chown -R oracle:oinstall /backup/ 
chown -R oracle:oinstall /arch 
chown oracle.oinstall /home/database/

修改参数

[root@localhost home]# 
echo " 
fs.aio-max-nr =1048576 
fs.file-max =6815744 
kernel.shmall = 2097152 
kernel.shmmax = 4296729594 
kernel.shmmni =4096 
kernel.sem = 250 32000 100 128 
net.ipv4.ip_local_port_range=9000 65500 
net.core.rmem_default =262144 
net.core.rmem_max = 4194304 
net.core.wmem_default =262144 
net.core.wmem_max = 1048586 
" >> /etc/sysctl.conf
[root@oracle2 opt]# 


echo " 
oracle soft nproc 2047 
oracle hard nproc 16384 
oracle soft nofile 1024 
oracle hard nofile 65536 
" >> /etc/security/limits.conf
[root@hzlh-yz-rfid-p2 opt]# sysctl -p

设置环境变量

[root@localhost home]# su - oracle 
      vi /home/oracle/.bash_profile 


export TMP=/tmp 
export TMPDIR=$TMP 
export ORACLE_BASE=/u01/app/oracle 
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1 
export ORACLE_SID=orcl 
export ORACLE_TERM=xterm 
export PATH=/usr/sbin:$PATH 
export PATH=$ORACLE_HOME/bin:$PATH 
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/usr/X11R6/lib64/ 
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib 
#export LD_ASSUME_KERNEL=2.6.18 
#export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 
umask 022 
alias sqlplus='rlwrap sqlplus' 
alias rman='rlwrap rman'
source .bash_profile
mkdir -p /u01/app/oracle

安装数据库软件

检查安装包:

rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE}(%{ARCH})\n' binutils \ 
compat-libcap1 \ 
compat-libstdc++-33 \ 
elfutils-libelf \ 
elfutils-libelf-devel \ 
gcc \ 
gcc-c++ \ 
glibc \ 
glibc-common \ 
glibc-devel \ 
glibc-headers \ 
pdksh \ 
libaio \ 
libaio-devel \ 
libgcc \ 
libstdc++ \ 
libstdc++-devel \ 
make \ 
sysstat \ 
unixODBC \ 
unixODBC-devel

参数如下:

./runInstaller -silent -ignorePrereq \ 
-responseFile /home/oracle/database/response/db_install.rsp \ 
oracle.install.option=INSTALL_DB_SWONLY \ 
UNIX_GROUP_NAME=oinstall \ 
INVENTORY_LOCATION=/u01/oraInventory \ 
SELECTED_LANGUAGES=en,zh_CN,zh_TW \ 
ORACLE_HOME=/u01/app/oracle/11gr2 \ 
ORACLE_BASE=/u01/app/oracle \ 
oracle.install.db.InstallEdition=EE \ 
oracle.install.db.EEOptionsSelection=true \ 
oracle.install.db.DBA_GROUP=dba \ 
oracle.install.db.OPER_GROUP=oinstall \ 
DECLINE_SECURITY_UPDATES=true \ 
oracle.installer.autoupdates.option=skip_updates

vnc连接

1.关闭防火墙:service iptables stop

2.安装vncsrver服务:yum install vnc

查看所有安装包yum grouplist

yum groupinstall Desktop -y

yum装包Xwindow,Desktop

若沒有 "Xwindow"則安裝 "X Windows System"

yum groupinstall "X Window System" -y

3.命令:vncserver

设置密码即可

vnc连接即可

关闭连接:

vncserver -kill :1

连接后

执行xhost + 把图形界面给其他用户使用

netca安装监听器 (一路回车即可 )或netmgr。

建库

手動管理數據文件:


DG搭建实例

主库:10.207.238.212

备库:10.207.238.211

主库安装oracle软件,建立监听,建立数据库。

oracle 用户配置环境变量并创建路径

[oracle@db ~]$ vi .bash_profile 


# .bash_profile 


# Get the aliases and functions 
if [ -f ~/.bashrc ]; then 
        . ~/.bashrc 
fi 


# User specific environment and startup programs 


PATH=$PATH:$HOME/bin 


export PATH 
export TMP=/tmp 
export TMPDIR=$TMP 
export ORACLE_BASE=/u01/app/oracle 
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1 
export ORACLE_SID=rfid 
#export ORACLE_TERM=xterm 
export PATH=/usr/sbin:$PATH 
export PATH=$ORACLE_HOME/bin:$PATH 
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/usr/X11R6/lib64/ 
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib 
#export LD_ASSUME_KERNEL=2.6.18 
#export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK" 
umask 022 


alias sqlplus='rlwrap sqlplus' 
alias rman='rlwrap rman'
mkdir -p /u01/app/oracle

备库安装oracle软件,建立监听(同主库)

1.设置主备库监听文件listener.ora和tnsnames.ora

主库:

[oracle@db admin]$ cat listener.ora 
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora 
# Generated by Oracle configuration tools. 


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


ADR_BASE_LISTENER = /u01/app/oracle 


SID_LIST_LISTENER = 
  (SID_LIST = 
    (SID_DESC = 
      (GLOBAL_DBNAME = testdb) 
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1) 
      (SID_NAME = testdb) 
    ) 
  ) 


[oracle@db admin]$ cat tnsnames.ora 
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora 
# Generated by Oracle configuration tools. 


TESTDB = 
  (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST =10.207.238.212)(PORT = 1521)) 
    (CONNECT_DATA = 
      (SERVER = DEDICATED) 
      (SERVICE_NAME = testdb) 
    ) 
  ) 


LISTENER_DB = 
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) 




TESTSTD = 
  (DESCRIPTION = 
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.207.238.211)(PORT = 1521)) 
    ) 
    (CONNECT_DATA = 
      (SERVICE_NAME = teststd) 
    ) 
  )

备库:

[oracle@dg admin]$ cat listener.ora 
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora 
# Generated by Oracle configuration tools. 


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


ADR_BASE_LISTENER = /u01/app/oracle 


SID_LIST_LISTENER = 
  (SID_LIST = 
    (SID_DESC = 
      (GLOBAL_DBNAME = teststd) 
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1) 
      (SID_NAME = teststd) 
    ) 
  ) 


[oracle@dg admin]$ cat tnsnames.ora 
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora 
# Generated by Oracle configuration tools. 


TESTDB = 
  (DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)(HOST =10.207.238.212)(PORT = 1521)) 
    (CONNECT_DATA = 
      (SERVER = DEDICATED) 
      (SERVICE_NAME = testdb) 
    ) 
  ) 


LISTENER_DB = 
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) 




TESTSTD = 
  (DESCRIPTION = 
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.207.238.211)(PORT = 1521)) 
    ) 
    (CONNECT_DATA = 
      (SERVICE_NAME = teststd) 
    ) 
  )
listener.ora中:

测试:tnsping IP

[oracle@db admin]$ tnsping 10.207.238.211 
[oracle@dg admin]$ tnsping 10.207.238.212

参数文件修改

添加备用日志组

主库执行:

alter database add standby logfile group 11 ('/data/RFID/onlinelog/sredo11.log','/FRA/RFID/onlinelog/sredo11.log') size 500M; 
alter database add standby logfile group 12 ('/data/RFID/onlinelog/sredo12.log','/FRA/RFID/onlinelog/sredo12.log') size 500M; 
alter database add standby logfile group 13 ('/data/RFID/onlinelog/sredo13.log','/FRA/RFID/onlinelog/sredo13.log') size 500M; 
alter database add standby logfile group 14 ('/data/RFID/onlinelog/sredo14.log','/FRA/RFID/onlinelog/sredo14.log') size 500M; 
alter database add standby logfile group 15 ('/data/RFID/onlinelog/sredo15.log','/FRA/RFID/onlinelog/sredo15.log') size 500M; 
alter database add standby logfile group 16 ('/data/RFID/onlinelog/sredo16.log','/FRA/RFID/onlinelog/sredo16.log') size 500M;
SQL> 
 
SQL> alter system set db_unique_name=RFID scope=spfile;(需重启) 
SQL> alter system set log_archive_config='DG_CONFIG=(RFID,RFIDSTD)' scope=both;(必須)(DB_NAME) 
SQL> alter system set log_archive_dest_2='service=RFIDSTD reopen=120 lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=RFIDSTD' scope=both;(必須) 


SQL> alter system set db_file_name_convert='/data/RFID','/data/RFIDSTD/' scope=spfile;(非必須) 
SQL> alter system set log_file_name_convert='/data/RFID/onlinelog/','/data/RFIDSTD/onlinelog/','/FRA/RFID/onlinelog/','/FRA/RFIDTDB/onlinelog/' scope=spfile;(非必須) 
SQL> show parameter standby; 
SQL> alter system set standby_file_management=auto scope=both; 
SQL> shutdown immediate 
SQL> startup

注:目錄轉換是在備庫上完成的。

修改备库参数文件

[oracle@hzlh-yz-rfid-p2 dbs]$ vi initrfid.ora 
rfid.__db_cache_size=33822867456 
rfid.__java_pool_size=939524096 
rfid.__large_pool_size=536870912 
rfid.__oracle_base='/u/app/oracle'#ORACLE_BASE set from environment 
rfid.__pga_aggregate_target=26575110144 
rfid.__sga_target=39594229760 
rfid.__shared_io_pool_size=0 
rfid.__shared_pool_size=3758096384 
rfid.__streams_pool_size=134217728 
*.audit_file_dest='/u/app/oracle/admin/RFIDSTD/adump' 
*.audit_trail='db' 
*.compatible='11.2.0.4.0' 
*.control_files='/data/RFIDSTD/controlfile/o1_mf_d9x1so52_.ctl','/FRA/fast_recovery_area/RFIDSTD/controlfile/o1_mf_d9x1so5m_.ctl' 
*.db_block_size=8192 
*.db_create_file_dest='/data/RFID/' 
*.db_domain='' 
*.db_file_name_convert='/data/RFID/','/data/RFIDSTD/','/data/RFID/datafile/mes/','/data/RFIDSTD/datafile/mes/','/data/RFID/datafile/mes_indx/','/data/RFIDSTD/datafile/mes_indx/','/data/RFID/datafile/small_tbs','/data/RFIDSTD/datafile/small_tbs','/data/RFID/datafile/small_tbs_idx','/data/RFIDSTD/datafile/small_tbs_idx' 
*.db_name='RFID' 
*.db_recovery_file_dest='/FRA/fast_recovery_area/' 
*.db_recovery_file_dest_size=107374182400 
*.db_unique_name='RFIDSTD' 
*.diagnostic_dest='/u/app/oracle' 
*.dispatchers='(PROTOCOL=TCP) (SERVICE=rfidstdXDB)' 
*.fal_client='RFIDSTD' 
*.fal_server='RFID' 
*.log_archive_config='DG_CONFIG=(RFID,RFIDSTD)' 
*.log_archive_dest_1='LOCATION=/arch/RFIDSTD' 
*.log_archive_dest_2='service=RFID reopen=60 lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=RFID' 
*.log_archive_format='%t_%s_%r.dbf' 
*.log_file_name_convert='/data/RFID/onlinelog/','/data/RFIDSTD/onlinelog/','/FRA/fast_recovery_area/RFID/onlinelog/','/FRA/fast_recovery_area/RFIDSTD/onlinelog/' 
*.memory_target=66057142272 
*.open_cursors=300 
*.processes=1000 
*.remote_login_passwordfile='EXCLUSIVE' 
*.sessions=1105 
*.standby_file_management='AUTO' 
*.undo_tablespace='UNDOTBS1'

mkdir -p /data/RFID/onlinelog/

mkdir -p /FRA/fast_recovery_area/RFID/onlinelog/

mkdir -p /FRA/fast_recovery_area/RFID/controlfile/

mkdir -p /u/app/oracle/admin/RFIDSTD/adump

拷贝密码文件到备库(不改名字)

在主库上duplicate拷贝到备库

[oracle@hzlh-yz-rfid-p1 ~] vim /u01/oracle/scripts/duplicatetostandby.rcv 


RUN { 
ALLOCATE CHANNEL d1 TYPE DISK; 
ALLOCATE CHANNEL d2 TYPE DISK; 
ALLOCATE AUXILIARY CHANNEL cnv1 TYPE DISK; 
ALLOCATE AUXILIARY CHANNEL cnv2 TYPE DISK; 
DUPLICATE TARGET DATABASE 
    FOR STANDBY 
    FROM ACTIVE DATABASE 
    DORECOVER 
    NOFILENAMECHECK; 
} 


[oracle@oracle1 scripts]$rman target sys/oracle@rfid auxiliary sys/oracle@rfidstd cmdfile=/u01/oracle/scripts/duplicatetostandby.rcv log=/u01/oracle/scripts/duplicatetostandby.log 
RMAN> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11> 12>

在从库执行自动恢复状态

alter database recover managed standby database using current logfile disconnect from session; 
alter database recover managed standby database disconnect from session;

或 rman備份拷貝到備庫

主庫進行rman備份 
backup as compressed backupset format '/db1/rman/backup/%d_db_0_%T_%t_%U' database  include current controlfile for standby; 
將備份文件拷貝到備庫相同目錄下(因為控制文件中有記錄備份目錄) 


在主庫創建備庫控制文件: 
SQL> alter database create standby controlfile as '/db1/rman/dg1_control01.ctl'; 


Database altered. 
拷貝到備庫: 
[oracle@hzhn-rfid-db-n2 ~]$ scp /db1/rman/dg1_control01.ctl 10.195.7.87:/db2/rfiddg1/controlfile/control01.ctl 


[oracle@hzhn-rfid-db-n2 ~]$ scp /db1/rman/dg1_control01.ctl 10.195.7.87:/db2/rfiddg1/controlfile/control02.ctl 


啟動備庫: 
SQL> startup nomount pfile=/tmp/rfid.ora; 
利用備庫控制文件將庫啟動到mount狀態 
SQL> alter database mount; 


Database altered. 


rman恢復備庫: 
restore database; 


15:35開始恢復   歷時448分 
alter database recover managed standby database disconnect from session; 
SQL>  alter database recover managed standby database cancel; 


Database altered.

检测是否同步

备库上执行

SQL> select process,status,sequence# from v$managed_standby; 


PROCESS        STATUS             SEQUENCE# 
------------------ ------------------------ ---------- 
ARCH           CONNECTED                 0 
ARCH           CONNECTED                 0 
ARCH           CONNECTED                 0 
ARCH           CONNECTED                 0 
MRP0           WAIT_FOR_LOG         107069 
RFS           IDLE                  0 
RFS           IDLE             107069 
7 rows selected.

主库上执行

alter system switch logfile;

备库上查看

SQL> select process,status,sequence# from v$managed_standby; 


PROCESS        STATUS             SEQUENCE# 
------------------ ------------------------ ---------- 
ARCH           CONNECTED                 0 
ARCH           CONNECTED                 0 
ARCH           CONNECTED                 0 
ARCH           CONNECTED                 0 
MRP0           WAIT_FOR_LOG         107070 
RFS           IDLE                  0 
RFS           IDLE             107070 
7 rows selected.

查看归档日志error信息

SQL> select dest_id,status,destination,error from v$archive_dest; 


   DEST_ID      STATUS      DESTINATION            ERROR 
---------- --------- ------------------------------ ----------------------------------------------------------------- 
     1              INACTIVE 
     2              VALID           db_standby 
     3              INACTIVE 
     4              INACTIVE 
     5              INACTIVE 
     6              INACTIVE 
     7              INACTIVE 
     8              INACTIVE 
     9              INACTIVE 
    10              VALID           /arch

详见4,检测DG是否同步

检测DG是否同步

service="stanewsfc", LGWR ASYN C NOAFFIRM delay=0 optional co mpression=disable

max_failure= 0

max_connections=1

reopen=300 db_unique_name="snewsfc"

net_ timeout=30,

valid_for=(all_log files,primary_role)

1、在standby库启动redo应用进程

在oracle11g中standby库是mount或open状态都可以执行,但是oracle10g只能在mount阶段执行。

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

(SQL> alter database recover managed standby database disconnect from session;)

SQL> alter database recover managed standby database using current logfile disconnect from session;

oracle database 9i:

SQL> alter database mount standby database;

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

2、在standby库取消redo应用进程

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

(SQL> alter database recover managed standby database cancel;)

3、在primary库查询最大的日志号

SQL> select * from v$log;

4、在主备库檢查歸檔日誌

SQL> SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG;

SQL> select distinct THREAD#,max(SEQUENCE#) over(partition by thread#) SEQUENCE# from v$archived_log;

THREAD# MAX(SEQUENCE#)OVER(PARTITIONBYTHREAD#)


1 163968

5、查看DG進程MRP和RFS

SQL> select process,status,client_process,thread#,sequence# from v$managed_standby;

PROCESS STATUS CLIENT_P THREAD# SEQUENCE#


ARCH CONNECTED ARCH 0 0

ARCH CONNECTED ARCH 0 0

ARCH CONNECTED ARCH 0 0

ARCH CONNECTED ARCH 0 0

RFS IDLE LGWR 1 24

RFS IDLE UNKNOWN 0 0

RFS IDLE ARCH 0 0

MRP0 WAIT_FOR_LOG N/A 1 24

RFS IDLE UNKNOWN 0 0

6、在standby库检测所有归档是否都完全应用

SQL> select distinct THREAD#,max(SEQUENCE#) over(partition by THREAD#),applied from v$archived_log order by 2;

THREAD# MAX(SEQUENCE#)OVER(PARTITIONBYTHREAD#) APPLIED


1 189744 NO

1 189744 YES

SQL>

SQL> select THREAD#,SEQUENCE#,applied from v$archived_log order by 2;

THREAD# SEQUENCE# APPLIED


1 163658 YES

1 163659 YES

1 163660 YES

1 163661 YES

1 163662 YES

1 163663 YES

1 163664 YES

1 163665 YES

2560 rows selected.

7、查看归档日志error信息

SQL> select dest_id,status,destination,error from v$archive_dest;

DEST_ID STATUS DESTINATION ERROR


1 INACTIVE

2 VALID db_standby

3 INACTIVE

4 INACTIVE

5 INACTIVE

6 INACTIVE

7 INACTIVE

8 INACTIVE

9 INACTIVE

10 VALID /arch

SQL>

8、检查standby归档文件是否连续

STANDBY> select thread#, low_sequence#, high_sequence# from v$archive_gap;

no rows selected

这一步很重要,必须确保所有已生成的归档文件都已传到standby服务器。

如果上述语句有返回结果,则必须把缺失的归档文件从primary端复制到standby端,然后註冊歸檔日誌到控制文件。

9、standby註冊归档文件到控制文件

SQL>alter database register physical logfile 'filespec'

10、检查standby归档文件是否完整

STANDBY> SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG;

THREAD LAST


1 479

通过上述语句可以查出standby目前序号最大的归档日志为479,如果在primary端有比479更大的归档日志,把它们拷贝过来,然后通过以下命令将其加入数据库:

STANDBY>alter database register physical logfile 'filespec';

11、主备切换,需要先在primary库切换

检测主库的状态

SQL> select database_role, protection_mode,switchover_status from v$database;

DATABASE_ROLE PROTECTION_MODE SWITCHOVER_STATUS


PRIMARY MAXIMUM PERFORMANCE TO STANDBY

12、primary库切换为standby库

SQL> alter database commit to switchover to physical standby with session shutdown;

13、standby库切换为primary库

SQL> alter database commit to switchover to primary with session shutdown;

14、Failover是指由于Primary故障无法短时间恢复,Standby不得不充当Primay的角色,如果处于最高性能模式,这种切换很有可能导致数据丢失。

SQL> alter database recover managed standby database finish force;

FORCE关键字将会停止当前活动的RFS进程,以便立刻执行failover。

或者:

SQL> alter database recover managed standby database finish skip standby logfile;

switchover主备库互换

一、检查环境:

确认主库和从库间网络连接通畅;

确认没有活动的会话连接在数据库中;

PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态;

确保STANDBY数据库处于ARCHIVELOG模式;

如果设置了REDO应用的延迟,那么将这个设置去掉;

确保配置了主库和从库的初始化参数,使得切换完成后,DATA GUARD机制可以顺利的运行。

如果是最大保护模式,先变成最大性能模式:

SQL> select OPEN_MODE,PROTECTION_MODE,PROTECTION_LEVEL,SWITCHOVER_STATUS from v$database;

OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL SWITCHOVER_STATUS


READ WRITE MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE TO STANDBY

SQL> SELECT COUNT(*) FROM V$SESSION WHERE USERNAME IS NOT NULL;

COUNT(*)


1

在切换前,杀掉所有的数据库连接 观察SWITCHOVER_STATUS,如果是 TO STANDBY,则可以直接切换

如果SESSIONS ACTIVE ,则用

alter database commit to switchover to physical standby with session shutdown;

二、主庫切備庫

1、查看primary库转换状态

select switchover_status from v$database

(A 如果switchover_status为TO_STANDBY说明可以转换,直接转换

alter database commit to switchover to physical standby;

B 如果switchover_status为SESSIONS ACTIVE 则关闭会话

SQL>alter database commit to switchover to physical standby with session shutdown;

SQL> alter database commit to switchover to physical standby ;

Database altered.

SQL> shutdown immediate;

ORA-01507: database not mounted

ORACLE instance shut down.

SQL> startup nomount ;

ORACLE instance started.

Total System Global Area 3242987696 bytes

Fixed Size 733360 bytes

Variable Size 1174405120 bytes

Database Buffers 2063597568 bytes

Redo Buffers 4251648 bytes

SQL> alter database mount standby database;

Database altered.

SQL> alter database recover managed standby database disconnect from session;

Database altered.

5、再次查看witchover_status状态

如果为TO PRIMARY ,表示primary切换成standby成功,如果不是请查看配置文件

三、備庫切主庫:

1、查看switchover_status状态

select switchover_status from v$database;

(A 如果switchover_status为TO_PRIMARY 说明标记恢复可以直接转换为primary库

SQL>alter database commit to switchover to primary

B 如果switchover_status为SESSION ACTIVE 就应该断开活动会话

SQL > alter database commit to switchover to primary with session shutdown;

C 如果switchover_status为NOT ALLOWED 说明切换标记还没收到,此时不能

执行转换。)

SQL> alter database commit to switchover to primary;

Database altered.

SQL> shutdown immediate;

ORA-01507: database not mounted

ORACLE instance shut down.

SQL> startup ;

ORACLE instance started.

Total System Global Area 3242987696 bytes

Fixed Size 733360 bytes

Variable Size 1174405120 bytes

Database Buffers 2063597568 bytes

Redo Buffers 4251648 bytes

Database mounted.

Database opened.

failover ( 備庫

alter database recover managed standby database finish;
alter database commit to switchover to primary;