切换前准备:
1.切换前对主库做全备
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
BACKUP DATABASE format 'C:\Users\Administrator\Desktop\tostandby\paydb_%d_%T_%s_%p_%u.bak';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
backup filesperset 3 archivelog all tag 'arch' format 'C:\Users\Administrator\Desktop\tostandby\arch_%d_%T_%s_%p_%u.bak';
backup current controlfile format ''C:\Users\Administrator\Desktop\tostandby\toubiao_control__%s_%p_%t.ctl';
release channel c1;
release channel c2;
}
2.备份参数文件:
create pfile='C:\Users\Administrator\Desktop\tostandby\pri.ora' from memory;
3.检查参数脚本(两边)
set linesize 200
set pagesize 100
col name for a35
col value for a80
select name,value from v$parameter where name like 'log_archive_dest_%' and value is not null ;
pr:
SQL> SQL> SQL> SQL>
NAME VALUE
----------------------------------- ----------------------------------------------------------------------
----------
log_archive_dest_1 location=E:\app\Administrator\oradata\toubiao\arch VALID_FOR=(ALL_LOGF
ILES,ALL_R
OLES) DB_UNIQUE_NAME=toubiao
log_archive_dest_2 SERVICE=toubiaodg LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMA
RY_ROLE) D
B_UNIQUE_NAME=toubiaodg
log_archive_dest_state_1 enable
std:
NAME VALUE
----------------------------------- -------------------------------------------------------------------------------
-
log_archive_dest_1 location=E:\app\Administrator\oradata\toubiao\arch VALID_FOR=(ALL_LOGFILES,ALL_
R
OLES) DB_UNIQUE_NAME=toubiaodg
log_archive_dest_2 SERVICE=toubiao LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB
_
UNIQUE_NAME=toubiao
set linesize 200
set pagesize 100
col name for a35
col value for a80
select name,value from v$parameter where name like 'fal_server%' or name like '%db_unique_name%' or name like '%job%' or name like '%file_name_convert%' or name like '%standby_file_management%' or name like 'log_archive_config%';
eg:
--pri:
NAME VALUE
----------------------------------- ----------------------------------------------------------------------
----------
db_file_name_convert E:\app\Administrator\oradata\toubiao, E:\app\Administrator\oradata\tou
biao
log_file_name_convert E:\app\Administrator\oradata\toubiao, E:\app\Administrator\oradata\tou
biao
fal_server toubiaodg
log_archive_config DG_CONFIG=(toubiao,toubiaodg)
standby_file_management AUTO
job_queue_processes 1000
db_unique_name toubiao
--std:
NAME VALUE
----------------------------------- ------------------------------------------------------------------------------
-
db_file_name_convert E:\app\Administrator\oradata\toubiao, E:\app\Administrator\oradata\toubiao
log_file_name_convert E:\app\Administrator\oradata\toubiao, E:\app\Administrator\oradata\toubiao
fal_server toubiao
log_archive_config DG_CONFIG=(toubiao,toubiaodg)
standby_file_management AUTO
job_queue_processes 1000
db_unique_name toubiaodg
已选择7行。
5.主库查看
set linesize 200 pagesize 100
col dest_name for a25
col error for a45
select dest_id,dest_name,status,error from v$archive_dest;
eg:
DEST_ID DEST_NAME STATUS ERROR
------- ------------------------- ------------------ ---------------------------------------------
1 LOG_ARCHIVE_DEST_1 VALID
2 LOG_ARCHIVE_DEST_2 VALID
6.检查主从最大sequence,查询出来的结果须一致。
SELECT UNIQUE THREAD#, MAX(SEQUENCE#) OVER(PARTITION BY THREAD#) LAST FROM V$ARCHIVED_LOG;
eg:
#pri:
THREAD# LAST
-------- ----------
1 61
#std:
THREAD# LAST
-------- ----------
1 61
7.从库查看日志应用状态
select process,client_process,sequence#,status from v$managed_standby;
select * from v$archive_gap;
eg:
SQL> select process,client_process,sequence#,status from v$managed_standby;
PROCESS CLIENT_PROCESS SEQUENCE# STATUS
------------------ ---------------- ---------- ------------------------
ARCH ARCH 60 CLOSING
ARCH ARCH 59 CLOSING
ARCH ARCH 0 CONNECTED
ARCH ARCH 61 CLOSING
RFS ARCH 0 IDLE
RFS LGWR 62 IDLE
RFS UNKNOWN 0 IDLE
MRP0 N/A 62 APPLYING_LOG
已选择8行。
SQL> select * from v$archive_gap;
未选定行
8.检查主从临时表空间是否一致
set linesize 200
col filename for a55
col bytes for 999999999999999
col tablespace for a20
SELECT TMP.NAME FILENAME, BYTES, TS.NAME TABLESPACE FROM V$TEMPFILE TMP, V$TABLESPACE TS WHERE TMP.TS#=TS.TS#;
eg:
pri:
FILENAME BYTES TABLESPACE
------------------------------------------------------- ---------------- --------------------
E:\APP\ADMINISTRATOR\ORADATA\TOUBIAO\TEMP01.DBF 920649728 TEMP
std:
FILENAME BYTES TABLESPACE
------------------------------------------------------- ---------------- --------------------
E:\APP\ADMINISTRATOR\ORADATA\TOUBIAO\TEMP01.DBF 20971520 TEMP
9.检查spfile
show parameter spfile
eg:
pri:
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
spfile string E:\APP\ADMINISTRATOR\PRODUCT\1
1.2.0\DBHOME_1\DATABASE\SPFILE
TOUBIAO.ORA
std:
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
spfile string E:\APP\ADMINISTRATOR\PRODUCT\1
1.2.0\DBHOME_1\DATABASE\SPFILE
TOUBIAODG.ORA
10.检查tnsnames.ora
eg:
pri:
E:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN
# tnsnames.ora Network Configuration File: E:\app\Administrator\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
TOUBIAO =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.116.5)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = toubiao)
)
)
TOUBIAODG =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.116.6)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = toubiaodg)
)
)
std:
# tnsnames.ora Network Configuration File: E:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.
TOUBIAO =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.116.5)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = toubiao)
)
)
TOUBIAODG =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.116.6)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = toubiaodg)
)
)
11.检查是否有error(主备执行)
set linesize 200 pagesize 100
col dest_name for a23
col error for a12
col DB_UNIQUE_NAME for a15
col APPLIED_SCN for 9999999999999
select DB_UNIQUE_NAME , COMPRESSION ,APPLIED_SCN ,status, ERROR , PROCESS ,NET_TIMEOUT, DEST_NAME from v$archive_dest order by status desc;
12.检查是否有offline数据文件
SELECT NAME FROM V$DATAFILE WHERE STATUS='OFFLINE';
eg:
pri:
SQL> SELECT NAME FROM V$DATAFILE WHERE STATUS='OFFLINE';
no rows selected
std:
SQL> SELECT NAME FROM V$DATAFILE WHERE STATUS='OFFLINE';
no rows selected
13.检查是否有正在运行的job
SELECT * FROM DBA_JOBS_RUNNING;
14. 检查是否有活动的会话
SELECT COUNT(*) FROM V$SESSION WHERE USERNAME IS NOT NULL;
eg:
pri:
SQL> SELECT COUNT(*) FROM V$SESSION WHERE USERNAME IS NOT NULL;
COUNT(*)
----------
10
std:
SQL> SELECT COUNT(*) FROM V$SESSION WHERE USERNAME IS NOT NULL;
COUNT(*)
---------
4
15.检查详细进程
col username format a15
col machine format a20
col OSUSER format a20
col program format a30
select inst_id, username, machine, osuser, program, count(1) from gv$session where osuser not in ('oracle', 'grid', 'root') and program not in ('plsqldev.exe') group by inst_id, username, machine, osuser, program order by inst_id, username, machine, osuser, program;
eg:
pri:
SQL> SQL>
INST_ID USERNAME MACHINE OSUSER PROGRAM
1)
-------- --------------- -------------------- -------------------- ----------------------------
--
1 CARNETBID WCF\WCF Administrator CNBService.exe
1
1 DBSNMP WORKGROUP\ORACLE1 NT AUTHORITY\SYSTEM emagent.exe
2
1 SENDCARD WCF\WCF Administrator CNBService.exe
1
1 SYS WORKGROUP\ORACLE1 ORACLE1\Administrato sqlplus.exe
1
r
1 SYSMAN Oracle1 ORACLE1$ OMS
5
1 ORACLE1 SYSTEM ORACLE.EXE (ARC0)
1
1 ORACLE1 SYSTEM ORACLE.EXE (ARC1)
1
1 ORACLE1 SYSTEM ORACLE.EXE (ARC2)
1
1 ORACLE1 SYSTEM ORACLE.EXE (ARC3)
1
1 ORACLE1 SYSTEM ORACLE.EXE (CJQ0)
1
1 ORACLE1 SYSTEM ORACLE.EXE (CKPT)
1
1 ORACLE1 SYSTEM ORACLE.EXE (DBRM)
1
1 ORACLE1 SYSTEM ORACLE.EXE (DBW0)
1
1 ORACLE1 SYSTEM ORACLE.EXE (DIA0)
1
1 ORACLE1 SYSTEM ORACLE.EXE (DIAG)
1
1 ORACLE1 SYSTEM ORACLE.EXE (GEN0)
1
1 ORACLE1 SYSTEM ORACLE.EXE (LGWR)
1
1 ORACLE1 SYSTEM ORACLE.EXE (MMAN)
1
1 ORACLE1 SYSTEM ORACLE.EXE (MMNL)
1
1 ORACLE1 SYSTEM ORACLE.EXE (MMON)
1
1 ORACLE1 SYSTEM ORACLE.EXE (NSA2)
1
1 ORACLE1 SYSTEM ORACLE.EXE (PMON)
1
1 ORACLE1 SYSTEM ORACLE.EXE (PSP0)
1
1 ORACLE1 SYSTEM ORACLE.EXE (Q000)
1
1 ORACLE1 SYSTEM ORACLE.EXE (Q001)
1
1 ORACLE1 SYSTEM ORACLE.EXE (QMNC)
1
1 ORACLE1 SYSTEM ORACLE.EXE (RECO)
1
1 ORACLE1 SYSTEM ORACLE.EXE (SMCO)
1
1 ORACLE1 SYSTEM ORACLE.EXE (SMON)
1
1 ORACLE1 SYSTEM ORACLE.EXE (VKTM)
1
1 ORACLE1 SYSTEM ORACLE.EXE (W000)
1
选择31行。
SQL>
std:
INST_ID USERNAME MACHINE OSUSER PROGRAM COUNT(1)
-------- --------------- -------------------- -------------------- ------------------------------ ----------
1 PUBLIC ORACLE1 NT AUTHORITY\ANONYMO ORACLE.EXE 3
US LOGON
1 SYS WORKGROUP\ORACLE2 ORACLE2\Administrato sqlplus.exe 1
r
1 ORACLE2 SYSTEM ORACLE.EXE (ARC0) 1
1 ORACLE2 SYSTEM ORACLE.EXE (ARC1) 1
1 ORACLE2 SYSTEM ORACLE.EXE (ARC2) 1
1 ORACLE2 SYSTEM ORACLE.EXE (ARC3) 1
1 ORACLE2 SYSTEM ORACLE.EXE (CKPT) 1
1 ORACLE2 SYSTEM ORACLE.EXE (DBRM) 1
1 ORACLE2 SYSTEM ORACLE.EXE (DBW0) 1
1 ORACLE2 SYSTEM ORACLE.EXE (DIA0) 1
1 ORACLE2 SYSTEM ORACLE.EXE (DIAG) 1
1 ORACLE2 SYSTEM ORACLE.EXE (GEN0) 1
1 ORACLE2 SYSTEM ORACLE.EXE (LGWR) 1
1 ORACLE2 SYSTEM ORACLE.EXE (MMAN) 1
1 ORACLE2 SYSTEM ORACLE.EXE (MMNL) 1
1 ORACLE2 SYSTEM ORACLE.EXE (MMON) 1
1 ORACLE2 SYSTEM ORACLE.EXE (MRP0) 1
1 ORACLE2 SYSTEM ORACLE.EXE (PMON) 1
1 ORACLE2 SYSTEM ORACLE.EXE (PR00) 1
1 ORACLE2 SYSTEM ORACLE.EXE (PR01) 1
1 ORACLE2 SYSTEM ORACLE.EXE (PR02) 1
1 ORACLE2 SYSTEM ORACLE.EXE (PR03) 1
1 ORACLE2 SYSTEM ORACLE.EXE (PR04) 1
1 ORACLE2 SYSTEM ORACLE.EXE (PR05) 1
1 ORACLE2 SYSTEM ORACLE.EXE (PR06) 1
1 ORACLE2 SYSTEM ORACLE.EXE (PR07) 1
1 ORACLE2 SYSTEM ORACLE.EXE (PR08) 1
1 ORACLE2 SYSTEM ORACLE.EXE (PSP0) 1
1 ORACLE2 SYSTEM ORACLE.EXE (RECO) 1
1 ORACLE2 SYSTEM ORACLE.EXE (SMON) 1
1 ORACLE2 SYSTEM ORACLE.EXE (VKTM) 1
选择31行。
16.关闭主从其他节点(RAC关闭其他节点,留下一个节点用于切换;文件系统不需要执行此步骤)
16.1 主库数据库切换状态检查
select database_role,protection_mode,open_mode,switchover_status from v$database;
eg:
pri:
DATABASE_ROLE PROTECTION_MODE OPEN_MODE SWITCHOVER_STATUS
-------------------------------- ------------------------- ---------------------------------------- -------------------------
PRIMARY MAXIMUM PERFORMANCE READ WRITE SESSIONS ACTIVE
std:
DATABASE_ROLE PROTECTION_MODE OPEN_MODE SWITCHOVER_STATUS
-------------------------------- ------------------------- ------------------------- ------------------
----------
PHYSICAL STANDBY MAXIMUM PERFORMANCE READ ONLY WITH APPLY NOT ALLOWED
17. 主库执行切换成备库命令
alter database commit to switchover to physical standby with session shutdown;
eg:
SQL> alter database commit to switchover to physical standby with session shutdown;
数据库已更改。
17.1. 新备库检查
startup nomount
eg:
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 5144301568 bytes
Fixed Size 2290160 bytes
Variable Size 1023413776 bytes
Database Buffers 4110417920 bytes
Redo Buffers 8179712 bytes
alter database mount standby database;
eg:
SQL> alter database mount standby database;
数据库已更改。
select dbid,name,switchover_status,db_unique_name,database_role,open_mode,current_scn from v$database;
eg:
SQL> select dbid,name,switchover_status,db_unique_name,database_role,open_mode,current_scn from v$database;
DBID NAME SWITCHOVER_STATUS DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE CURRENT_SCN
---------- ----------------------------------- ------------------------- --------------- -------------------------------- ---------------------------------------- -----------
1213159909 TOUBIAO RECOVERY NEEDED toubiao PHYSICAL STANDBY MOUNTED 1378426
select open_mode,database_role,switchover_status from v$database;
SQL> select open_mode,database_role,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
---------------------------------------- -------------------------------- -------------------------
MOUNTED PHYSICAL STANDBY RECOVERY NEEDED
18.备库切换状态检查
select database_role,protection_mode,open_mode,switchover_status from v$database;
eg:
SQL> select database_role,protection_mode,open_mode,switchover_status from v$database;
DATABASE_ROLE PROTECTION_MODE OPEN_MODE SWITCHOVER_STATUS
-------------------------------- ------------------------- ------------------------- ------------------------------
----------
PHYSICAL STANDBY MAXIMUM PERFORMANCE READ ONLY WITH APPLY TO PRIMARY
18.1 备库执行切换成主命令
alter database commit to switchover to primary with session shutdown;
eg:
SQL> alter database commit to switchover to primary with session shutdown;
数据库已更改
select database_role,protection_mode,open_mode,switchover_status from v$database;
eg:
SQL> select database_role,protection_mode,open_mode,switchover_status from v$database;
DATABASE_ROLE PROTECTION_MODE OPEN_MODE SWITCHOVER_STATUS
-------------------------------- ------------------------- ------------------------- ------------------------------
----------
PRIMARY MAXIMUM PERFORMANCE MOUNTED NOT ALLOWED
19. 新备库执行应用归档。
alter database open;
eg:
SQL> alter database open;
数据库已更改。
alter database recover managed standby database using current logfile disconnect from session;
eg:
SQL> alter database recover managed standby database using current logfile disconnect from session;
数据库已更改。
20.新主库创建测试插入数据测试:
create table t1 (id int);
SQL> insert into t1 values( 2);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select count(1) from t1;
COUNT(1)
----------
2
SQL>
20.1. 切换日志
alter system switch logfile;
21.新备库查询
SQL> select count(1) from t1;
COUNT(1)
----------
2
SQL>
21.主备再次切换前检查是否有error(主备执行)
set linesize 200 pagesize 100
col dest_name for a23
col error for a12
col DB_UNIQUE_NAME for a15
col APPLIED_SCN for 9999999999999
select DB_UNIQUE_NAME , COMPRESSION ,APPLIED_SCN ,status, ERROR , PROCESS ,NET_TIMEOUT, DEST_NAME from v$archive_dest order by status desc;
22.主库数据库切换状态检查
select database_role,protection_mode,open_mode,switchover_status from v$database;
23.主库执行切换成备库命令
alter database commit to switchover to physical standby with session shutdown;
24.新备库检查
startup nomount
alter database mount standby database;
select dbid,name,switchover_status,db_unique_name,database_role,open_mode,current_scn from v$database;
select database_role,protection_mode,open_mode,switchover_status from v$database;
25.备库切换状态检查
select database_role,protection_mode,open_mode,switchover_status from v$database;
26.备库执行切换成主命令
alter database commit to switchover to primary with session shutdown;
27.备库切换检查
select database_role,protection_mode,open_mode,switchover_status from v$database;
28. 新备库执行应用归档。
alter database open;
alter database recover managed standby database using current logfile disconnect from session;
29.新主库创建测试插入数据测试:
SQL> insert into t1 values( 4);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select count(1) from t1;
COUNT(1)
----------
2
SQL>
20.1. 切换日志
alter system switch logfile;
21.新备库查询
SQL> select count(1) from t1;
COUNT(1)
----------
2
SQL>
oracle数据库切换实验
猜你喜欢
转载自www.cnblogs.com/jamiehhome/p/11589887.html
今日推荐
周排行