快照数据库是由物理备库转换而来的,它可以接受和归档主库传过来的日志,但并不应用日志,等到将快照数据库切换回到物理备库的时候,再应用这些日志,从而实现主备库的一致性,同时快照备库之前曾经的操作也将会被清除。
快照数据库主要应用于测试一些将要应用与主库的操作。
主库信息:
NAME DB_UNIQUE_NAME DATABASE_ROLE SWITCHOVER_STATUS PRIMARY_DB_UNIQUE_NAME PROTECTION_MODE
--------- ------------------------------ ---------------- -------------------- ------------------------------ --------------------
PHYPRIMA phyprimary PRIMARY TO STANDBY phystandby MAXIMUM PERFORMANCE
备库信息:
NAME DB_UNIQUE_NAME DATABASE_ROLE SWITCHOVER_STATUS PRIMARY_DB_UNIQUE_NAME PROTECTION_MODE
--------- ------------------------------ ---------------- -------------------- ------------------------------ --------------------
PHYPRIMA phystandby PHYSICAL STANDBY NOT ALLOWED phyprimary MAXIMUM PERFORMANCE
实验步骤:
1 重启备库到mount阶段(备库操作)
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 422670336 bytes
Fixed Size 1336960 bytes
Variable Size 343935360 bytes
Database Buffers 71303168 bytes
Redo Buffers 6094848 bytes
Database mounted.
2 关闭备库日志应用(备库操作)
SQL> alter database recover managed standby database cancel;
Database altered.
3 切换物理备库到快照备库,并查看备库状态
SQL> alter database convert to snapshot standby;
Database altered.
SQL> select open_mode,database_role,switchover_status from v$database;
OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
-------------------- ---------------- --------------------
READ WRITE SNAPSHOT STANDBY NOT ALLOWED
4 打开快照备库 添加一些测试数据库
主库操作:
在主库创建测试表
SQL> create table user01.test04 as select * from dba_users;
Table created.
切换日志,
SQL> alter system switch logfile;
System altered.
在备库日志文件中可以看到,备库依然在接受日志
ARC1: Becoming the 'no SRL' ARCH
Archived Log entry 179 added for thread 1 sequence 72 ID 0x136827ea dest 1:
RFS[4]: Selected log 8 for thread 1 sequence 73 dbid 324097933 branch 855859489
Mon Aug 25 19:03:33 2014
但并没有应用到备库上,备库上不存在主库新建的表
SQL> desc user01.test04;
ERROR:
ORA-04043: object user01.test04 does not exist
在备库新建测试表
create user02 identified by oracle;
grant resource,connect to user02;
create table user02.test01 as select * from dba_users;
SQL> select username,account_status from user02.test01;
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
MGMT_VIEW OPEN
SYS OPEN
SYSTEM OPEN
DBSNMP OPEN
SYSMAN OPEN
USER02 OPEN
OUTLN EXPIRED & LOCKED
FLOWS_FILES EXPIRED & LOCKED
MDSYS EXPIRED & LOCKED
ORDSYS EXPIRED & LOCKED
EXFSYS EXPIRED & LOCKED
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
WMSYS EXPIRED & LOCKED
APPQOSSYS EXPIRED & LOCKED
APEX_030200 EXPIRED & LOCKED
OWBSYS_AUDIT EXPIRED & LOCKED
ORDDATA EXPIRED & LOCKED
CTXSYS EXPIRED & LOCKED
ANONYMOUS EXPIRED & LOCKED
XDB EXPIRED & LOCKED
ORDPLUGINS EXPIRED & LOCKED
OWBSYS EXPIRED & LOCKED
SI_INFORMTN_SCHEMA EXPIRED & LOCKED
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
OLAPSYS EXPIRED & LOCKED
SCOTT EXPIRED & LOCKED
ORACLE_OCM EXPIRED & LOCKED
XS$NULL EXPIRED & LOCKED
BI EXPIRED & LOCKED
PM EXPIRED & LOCKED
MDDATA EXPIRED & LOCKED
IX EXPIRED & LOCKED
SH EXPIRED & LOCKED
DIP EXPIRED & LOCKED
OE EXPIRED & LOCKED
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
APEX_PUBLIC_USER EXPIRED & LOCKED
HR EXPIRED & LOCKED
SPATIAL_CSW_ADMIN_USR EXPIRED & LOCKED
SPATIAL_WFS_ADMIN_USR EXPIRED & LOCKED
37 rows selected.
5 重新切换快照数据库到物理备库。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 422670336 bytes
Fixed Size 1336960 bytes
Variable Size 343935360 bytes
Database Buffers 71303168 bytes
Redo Buffers 6094848 bytes
Database mounted.
SQL> alter database convert to physical standby;
Database altered.
6 重新启动备库,查看备库测试数据
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01507: database not mounted
SQL> select status from v$instance;
STATUS
------------
STARTED
SQL> alter database mount
2 ;
alter database mount
*
ERROR at line 1:
ORA-00750: database has been previously mounted and dismounted
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 422670336 bytes
Fixed Size 1336960 bytes
Variable Size 343935360 bytes
Database Buffers 71303168 bytes
Redo Buffers 6094848 bytes
Database mounted.
SQL> alter database recover managed standby database;
Database altered.
SQL> alter database open;
Database altered.
之前新建的用户user02已经不存在
SQL> conn /as sysdba
Connected.
SQL> select username from dba_users where username='USER02';
no rows selected
在物理备库上查看之前在主库创建的表,发现已经自动应用到了备库上
SQL> desc user01.test04;
Name Null? Type
----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
USERNAME NOT NULL VARCHAR2(30)
USER_ID NOT NULL NUMBER
PASSWORD VARCHAR2(30)
ACCOUNT_STATUS NOT NULL VARCHAR2(32)
LOCK_DATE DATE
EXPIRY_DATE DATE
DEFAULT_TABLESPACE NOT NULL VARCHAR2(30)
TEMPORARY_TABLESPACE NOT NULL VARCHAR2(30)
CREATED NOT NULL DATE
PROFILE NOT NULL VARCHAR2(30)
INITIAL_RSRC_CONSUMER_GROUP VARCHAR2(30)
EXTERNAL_NAME VARCHAR2(4000)
PASSWORD_VERSIONS VARCHAR2(8)
EDITIONS_ENABLED VARCHAR2(1)
AUTHENTICATION_TYPE