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
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/