最近在看oracle恢复和备份机制。对oracle的beginbackup和endbackup,感觉很新鲜。就做了一些小实验。结果,一头雾水。不知道为什么要有这个技术。

sys@CISCOSYS> alter tablespace users begin backup;
sys@CISCOSYS> select file#,status,change# from v$backup;
FILE# STATUS                CHANGE#
---------- ------------------ ----------
1 NOT ACTIVE                  0
2 NOT ACTIVE                  0
3 NOT ACTIVE                  0
4 ACTIVE                5465260
5 ACTIVE                5465260
6 NOT ACTIVE                  0
7 NOT ACTIVE                  0
8 NOT ACTIVE            5218407
9 NOT ACTIVE                  0
10 NOT ACTIVE                  0
10 rows selected.
v$backup.change#:SCN号,却不是查询出来的SCN号?

查询出4,5,好数据文件。及找出表空间下的一个表,尝试进行操作。

结果发现可以操作。(在此,就不明白既然知道是backup模式,怎么还允许操作呢)

//查询某个表空间下的表
sys@CISCOSYS> select table_name ,TABLESPACE_NAME  from dba_tables where TABLESPACE_NAME='USERS' and owner='SCOTT';
TABLE_NAME                     TABLESPACE_NAME
------------------------------ ------------------------------
DEPT                           USERS
EMP                            USERS
BONUS                          USERS
SALGRADE                       USERS
发现处于backup 状态的表空间,依然可以修改数据。
sys@CISCOSYS> insert into scott.dept values(50,'IT','BeiJing');
1 row created.
sys@CISCOSYS> commit;
Commit complete.

backup最大的作业就是锁定文件头。这有什么用呢。?疑问

sys@CISCOSYS> alter system checkpoint;
System altered.
checkpoint 之后,未backup的数据文件,都刷新了,但backup的数据文件依然没有变化
sys@CISCOSYS> select name,checkpoint_change# from v$datafile;
NAME                           CHECKPOINT_CHANGE#
------------------------------ ------------------
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\SYSTEM01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\UNDOTBS01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\SYSAUX01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465260
TA\ORCL\USERS01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465260
TA\ORCL\ST
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\ADMIN_TBS.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\TBS_STREAM01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\TBS.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\UNDO99.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\USERS02.DBF
10 rows selected.

即使checkpoint文件头也不会变。

最后关闭backup模式,所有文件头一致了。

sys@CISCOSYS> alter tablespace USERS end backup;
Tablespace altered.
end bakcup 之后 所有数据文件的文件头一致了。
sys@CISCOSYS> select name,checkpoint_change# from v$datafile;
NAME                           CHECKPOINT_CHANGE#
------------------------------ ------------------
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\SYSTEM01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\UNDOTBS01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\SYSAUX01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\USERS01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\ST
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\ADMIN_TBS.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\TBS_STREAM01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\TBS.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\UNDO99.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADA            5465836
TA\ORCL\USERS02.DBF
10 rows selected.

期间,对数据文件进行了热备,恢复时,也没发现啥用。照样需要介质恢复datafile4,5才可以启动。

sys@CISCOSYS> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 5 needs media recovery
ORA-01110: data file 5: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ST'