物理standby dg的一些测试

1:启动物理standby库


SQL> startup
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              79693156 bytes
Database Buffers           83886080 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
数据库已经打开。
SQL>


直接startup,不需要加 read only字句,因为oracle会根据控制文件判断是否是物理standby,从而自动启动到read only模式


dump出控制文件的语法为

alter session set events 'immediate trace name controlf level 4';

然后到udump目录中找trace文件(根据v$process 和 v$session 视图找)

standby库   dump出来的控制文件里的一个类型为 File Type=4 BACKUP CONTROL
而primary库 dump出来的控制文件里的一个类型为 File Type=1 CONTROL




查询如下视图,可以看到standby  db已经处于 read only状态


SQL> select open_mode from v$database;

OPEN_MODE
----------
READ ONLY

SQL>




当standby库处于 read only状态时,执行redo应用语句之后,standby 库自动启动到mount状态(redo应用状态)

SQL> alter database recover managed standby database disconnect from session; // redo应用

数据库已更改。


SQL> select open_mode from v$database;

OPEN_MODE
----------
MOUNTED


因此看到,standby 库在 read only时 就不能应用 redo 了 ,虽然此时我们可以在standby 库上执行一些查询,但是查询的结果却跟primary库不一致




2:redo应用和read only状态转换


而当standby库处于redo应用状态下,再次切换到read only 状态时,需要首先取消redo应用

SQL> select open_mode from v$database;

OPEN_MODE
----------
READ ONLY

SQL> alter database recover managed standby database disconnect from session;   // redo应用

数据库已更改。

SQL> select open_mode from v$database;

OPEN_MODE
----------
MOUNTED

SQL> alter database recover managed standby database cancel;  // 取消redo应用

数据库已更改。


SQL> alter database open;  // 打开db

数据库已更改。


SQL> select open_mode from v$database;

OPEN_MODE
----------
READ ONLY

SQL>




3:关闭standby数据库


关闭standby库 只需要执行 shudown immediate命令即可,该指令会首先停止standby库上的redo应用,然后关闭standby库






standby_file_management设置为auto 时,测试 primary 库的一些增删表空间对 standby 库的影响




4:standby_file_management设置为auto时,primary库增加表空间操作


standby库上操作

SQL> show parameter standby_file_management;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------------
standby_file_management              string      AUTO





primary库上操作


SQL> show parameter standby_file_management;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------------
standby_file_management              string      AUTO


SQL> create tablespace yahgee datafile 'C:\ORADATA\ORCL\yahgee.dbf' size 10m;

表空间已创建。

SQL>
SQL> select  name from  v$datafile;

NAME
--------------------------------------------------------------------------------

C:\ORADATA\ORCL\SYSTEM01.DBF
C:\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORADATA\ORCL\SYSAUX01.DBF
C:\ORADATA\ORCL\USERS01.DBF
C:\ORADATA\ORCL\EXAMPLE01.DBF
C:\ORADATA\ORCL\TT.DBF
C:\ORADATA\ORCL\TEST.DBF
C:\ORADATA\ORCL\YAHGEE.DBF

已选择8行。


SQL> alter system switch logfile; // 如果没有执行日志切换,那么在standby库上很有可能查不到新创建的数据文件

系统已更改。




在 standby库上操作


SQL> select name from v$datafile;

NAME
---------------------------------------------------------------

C:\ORADATA\ORCL\SYSTEM01.DBF
C:\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORADATA\ORCL\SYSAUX01.DBF
C:\ORADATA\ORCL\USERS01.DBF
C:\ORADATA\ORCL\EXAMPLE01.DBF
C:\ORADATA\ORCL\TT.DBF
C:\ORADATA\ORCL\TEST.DBF
C:\ORADATA\ORCL\YAHGEE.DBF

已选择8行。




5:standby_file_management设置为auto时,primary库删除表空间操作



primary库上操作


SQL> drop tablespace yahgee including contents and datafiles;

表空间已删除。


SQL> alter system switch logfile; // 如果没有执行日志切换,那么在standby库上很有可能依然存在yahgee数据文件

系统已更改。

SQL>
SQL> select  name from  v$datafile;

NAME
-------------------------------------------------------------------

C:\ORADATA\ORCL\SYSTEM01.DBF
C:\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORADATA\ORCL\SYSAUX01.DBF
C:\ORADATA\ORCL\USERS01.DBF
C:\ORADATA\ORCL\EXAMPLE01.DBF
C:\ORADATA\ORCL\TT.DBF
C:\ORADATA\ORCL\TEST.DBF





standby库上操作


SQL> select name from v$datafile;

NAME
-------------------------------------------

C:\ORADATA\ORCL\SYSTEM01.DBF
C:\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORADATA\ORCL\SYSAUX01.DBF
C:\ORADATA\ORCL\USERS01.DBF
C:\ORADATA\ORCL\EXAMPLE01.DBF
C:\ORADATA\ORCL\TT.DBF
C:\ORADATA\ORCL\TEST.DBF

已选择7行。



由此可见,standby_file_management设置为auto时,对于增加、删除表空间或数据文件,无须dba手动干预











standby_file_management设置为 manual 时,测试 primary 库的一些增删表空间对 standby 库的影响




6:standby_file_management设置为manual时,primary库增加表空间操作


pirmary库上操作


SQL> alter system set standby_file_management=manual;

系统已更改。

SQL>
SQL> show parameter standby_file_management;

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------------------
standby_file_management              string      MANUAL




standby库上操作


SQL> alter system set standby_file_management=manual;

系统已更改。

SQL> show parameter standby_file_management;

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------------------
standby_file_management              string      MANUAL
SQL>




pirmary库上操作


SQL> create tablespace rr datafile 'C:\ORADATA\ORCL\rr.dbf' size 10m;

表空间已创建。

SQL> select name from v$datafile;

NAME
------------------------------------------------------------------------------

C:\ORADATA\ORCL\SYSTEM01.DBF
C:\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORADATA\ORCL\SYSAUX01.DBF
C:\ORADATA\ORCL\USERS01.DBF
C:\ORADATA\ORCL\EXAMPLE01.DBF
C:\ORADATA\ORCL\TT.DBF
C:\ORADATA\ORCL\TEST.DBF
C:\ORADATA\ORCL\RR.DBF

已选择8行。


SQL> alter system switch logfile; // 如果没有执行日志切换,那么在standby库上很有可能查不到新创建的数据文件

系统已更改。



standby库上操作


SQL> select name from v$datafile;

NAME
-----------------------------------------------------------

C:\ORADATA\ORCL\SYSTEM01.DBF
C:\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORADATA\ORCL\SYSAUX01.DBF
C:\ORADATA\ORCL\USERS01.DBF
C:\ORADATA\ORCL\EXAMPLE01.DBF
C:\ORADATA\ORCL\TT.DBF
C:\ORADATA\ORCL\TEST.DBF
C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00008

已选择8行。



可以看到,在standby库上多了一个文件 C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00008 ,这个UNNAMED00008
文件所在的目录跟原来primary库的 C:\ORADATA\ORCL目录不同, 而且  C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\这
个目录下并不真实存在UNNAMED00008这个文件 。

因此需要执行如下命令,在执行完如下命令之后,可以看到在 C:\ORADATA\ORCL\ 目录下多了一个 rr.dbf文件;但是这个命令
只修改了数据字典中关于数据文件的定义,还需要手动将primary库上的 rr.dbf 拷贝到standby库上的对应目录中



SQL> alter database  create datafile 'C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00008' as 'C:\ORADATA\ORCL\RR.DBF';

数据库已更改。


在这里要注意两个命令的区别

alter database create datafile '/oradata/df.dbf'  as '/ora_data/db.dbf'

alter database rename file '/ora_data/db.dbf' to '/oradata/db.dbf'


本质不同,后一种是重命名,前一种通常用在数据文件损坏,但是没有备份(数据文件)的情况下,但是有归档日志,可以通过归档日志来恢复数据文件!也就是说是产生一个新的!
create datafile字句适合数据文件所在的磁盘损坏,不能恢复到原来目录,而在其他路径下产生一个新的数据文件!


SQL> select name from v$datafile

NAME
--------------------------------

C:\ORADATA\ORCL\SYSTEM01.DBF
C:\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORADATA\ORCL\SYSAUX01.DBF
C:\ORADATA\ORCL\USERS01.DBF
C:\ORADATA\ORCL\EXAMPLE01.DBF
C:\ORADATA\ORCL\TT.DBF
C:\ORADATA\ORCL\TEST.DBF
C:\ORADATA\ORCL\RR.DBF

已选择8行。




7:tandby_file_management设置为manual时,primary库删除表空间操作


primary库上操作



SQL> drop tablespace tt including contents and datafiles;

表空间已删除。


SQL> alter system switch logfile;   // 一定要执行日志切换,否则在standby库上依然存在tt.dbf文件

系统已更改。

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------

C:\ORADATA\ORCL\SYSTEM01.DBF
C:\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORADATA\ORCL\SYSAUX01.DBF
C:\ORADATA\ORCL\USERS01.DBF
C:\ORADATA\ORCL\EXAMPLE01.DBF
C:\ORADATA\ORCL\TEST.DBF

已选择6行。



standby库上操作


SQL> select name from v$datafile;

NAME
-------------------------------------------

C:\ORADATA\ORCL\SYSTEM01.DBF
C:\ORADATA\ORCL\UNDOTBS01.DBF
C:\ORADATA\ORCL\SYSAUX01.DBF
C:\ORADATA\ORCL\USERS01.DBF
C:\ORADATA\ORCL\EXAMPLE01.DBF
C:\ORADATA\ORCL\TEST.DBF

已选择6行。



如果此时在standby库上还可以查到tt.dbf文件,那么就在standby库上重新执行redo应用,再在primary库上执行日志切换。
虽然从数据字典中删除了数据库文件定义,但是依然要手动删除实际路径上的数据文件

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

数据库已更改。



由此可以看到 standby_file_management 设置为manual时,增加、删除表空间或数据文件,还需要dba手动介入





8:primary库重命名数据文件


在dg中,重命名文件的变化跟参数 standby_file_management无关,无论参数设置为auto还是 manual ,都需要dba在
standby库上操作来实现结构同步


primary库上操作


SQL> select name from v$tablespace;

NAME
------------------------------
SYSTEM
UNDOTBS1


SYSAUX
USERS
TEMP
EXAMPLE
TEST

已选择7行。

SQL>
SQL> alter tablespace USERS offline;

表空间已更改。

SQL>

SQL> host copy C:\ORADATA\ORCL\USERS01.DBF  C:\ORADATA\ORCL\USERS.DBF;
已复制         1 个文件。



SQL> alter tablespace USERS rename datafile 'C:\ORADATA\ORCL\USERS01.DBF' to
'C:\ORADATA\ORCL\USERS.DBF';

表空间已更改。


SQL> alter tablespace USERS online;

表空间已更改。




在standby库上操作


SQL> alter database recover managed standby database cancel;

数据库已更改。

SQL>
SQL> select open_mode from v$database;

OPEN_MODE
----------
MOUNTED

SQL>
SQL> shutdown immediate;
ORA-01109: 数据库未打开


已经卸载数据库。
ORACLE 例程已经关闭。

SQL>
SQL> host copy C:\ORADATA\ORCL\USERS01.DBF  C:\ORADATA\ORCL\USERS.DBF;
已复制         1 个文件。



SQL> alter database rename file 'C:\ORADATA\ORCL\USERS01.DBF' to 'C:\ORADATA\ORCL\USERS.DBF';

数据库已更改。


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

数据库已更改。





9:执行redo应用的三种不同命令


the transmission of redo data to the remote standby location does not
occur until after a log switch.

To start log apply services on a physical standby database, ensure the physical standby
database is started and mounted and then start Redo Apply using the SQL ALTER
DATABASE RECOVER MANAGED STANDBY DATABASE statement.

You can specify that Redo Apply runs as a foreground session or as a background
process, and enable it with real-time apply.

■ To start Redo Apply in the foreground, issue the following SQL statement:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE;

If you start a foreground session, control is not returned to the command prompt
until recovery is canceled by another session.

■ To start Redo Apply in the background, include the DISCONNECT keyword on the
SQL statement. For example:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
 

This statement starts a detached server process and immediately returns control to
the user. While the managed recovery process is performing recovery in the
background, the foreground process that issued the RECOVER statement can
continue performing other tasks. This does not disconnect the current SQL session.

■ To start real-time apply, include the USING CURRENT LOGFILE clause on the
SQL statement. For example:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE;





10:监控dg的一些视图


v$database  查看数据库的保护模式、保护级别、数据库角色、switchover状态


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

PROTECTION_MODE      PROTECTION_LEVEL     DATABASE_ROLE    SWITCHOVER_STATUS
-------------------- -------------------- ---------------- --------------------
MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE  PRIMARY          SESSIONS ACTIVE


从上面的输出就可以看到该库为primary库,处于最大性能保护模式,该库可以正常切换到standby库




Accessing the V$MANAGED_STANDBY Fixed View

Query the physical standby database to monitor Redo Apply and redo transport
services activity at the standby site.

SQL> SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS  FROM V$MANAGED_STANDBY;

PROCESS STATUS THREAD# SEQUENCE# BLOCK# BLOCKS
------- ------------ ---------- ---------- ------
RFS   ATTACHED    1      947       72    72
MRP0 APPLYING_LOG 1      946       10    72


The previous query output shows that an RFS process completed archiving a redo log
file with sequence number 947. The output also shows that Redo Apply is actively
applying an archived redo log file with the sequence number 946. The recovery
operation is currently recovering block number 10 of the 72-block archived redo log
file.




The V$DATAGUARD_STATUS fixed view displays events that would typically be
triggered by any message to the alert log or server process trace files.






11:dg三种保护模式的切换


在需要的时候可以修改数据保护模式,注意这里的操作都是在primary库上执行


在primary库上执行



首先查看数据库保护模式


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

PROTECTION_MODE      PROTECTION_LEVEL     DATABASE_ROLE    SWITCHOVER_STATUS
-------------------- -------------------- ---------------- --------------------
MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE  PRIMARY          SESSIONS ACTIVE




查询 log_archive_dest 参数

SQL> show parameter log_archive_dest_2;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2                   string      SERVICE=standby arch ASYNC VAL
                                                 ID_FOR=(ONLINE_LOGFILES,PRIMAR
                                                 Y_ROLE) DB_UNIQUE_NAME=standby


确认db_unique_name 参数的唯一性


SQL> show parameter db_unique_name

NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------------------
db_unique_name                       string      primary




在standby库上执行



SQL> show parameter db_unique_name;

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------
db_unique_name                       string      standby



在primary库上执行


确认log_archive_config 包含dg中的所有 db_unique_name


SQL> show parameter log_archive_config;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------------------------
log_archive_config                   string      DG_CONFIG=(primary,standby)



关闭primary库,并启动到mount状态下


SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>

SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1247900 bytes
Variable Size              71304548 bytes
Database Buffers           92274688 bytes
Redo Buffers                2945024 bytes
数据库装载完毕。
SQL>



修改primary库的保护模式为最高可用性模式(maximize  availability )

SQL> alter database set standby database to maximize availability;

数据库已更改。



打开primary库,并验证结果

SQL> select database_role,protection_mode from v$database;

DATABASE_ROLE    PROTECTION_MODE
---------------- --------------------
PRIMARY          MAXIMUM AVAILABILITY



 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24862808/viewspace-746206/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24862808/viewspace-746206/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值