(PS:区别:v$tablespace (v$视图) :是动态性能视图,存在于controlfile中,数据库在mount状态下可以查询;dba_tablespace (dba_数据字典) :是静态视图,存在于数据库中,只能在open时查询相同点:都是表示空间信息的)
创建用户并授权
SQL> create user test_user identified by 123123 default tablespace test_space
SQL> grant connect to test_user;
使用新建用户连接数据库,查看默认表空间个用户
接下来将表空间test_space置于联机备份模式
SQL> alter tablespace test begin backup;
此时报错:ORA-01123: cannot start online backup; media recovery not enabled
原因是目前数据库处于非归档模式,所以无法进行在线备份,只有在归档模式的时候才可以进行在线备份,首先将数据库设置成归档模式。具体步骤参考博客:
https://blog.csdn.net/alen_liu_sz/article/details/77992430
SQL> select file#,checkpoint_change# from v$datafile_header;
在备份期间,SCN被冻结,当检查点发生时不受影响,他是恢复阶段运用日志的起点。
SQL> select * from v$backup;
这里的STATUS是ACTIVE,证明是可以备份相应的数据文件。
此时就可以到服务器上,相应的数据文件路径下将文件进行备份。
[oracle@oracle orcl]$ cp test_space01.dbf /ora/test_space01.dbf.bak
备份完毕后,就可以关闭联机在线备份,需要尽快执行endbackup。
如果再end backup之前发生数据库abort(终止),那么可以在下次启动到mount时end backup,从而完成实例恢复。
六)split block(fractured block)问题
一个Oracle block一般包含多个OS block,当手工热备时,OS的cp单位不是Oracle block而是OS block,而Oracle的DBWR又可能不时从内存中刷新Oracle block(脏块)到磁盘上,如此,OS的级的拷贝可能造成:一个Oracle block是由不同的版本组成,比如,未被DBWR刷新Header block加上另一部分被刷新的foot block,这样cp出来的Oracle block就是split block。
数据库的一致性是不允许oracle block是split的,split block实际上属于logical corruption Oracle采取的办法是:在backup mode后,如果发现首次DBWR要写脏块,则将该块被刷新之前的镜像数据记录到redo buffer,这样,虽然cp后的文件里仍然含有split block,而当需要恢复的时候,日志会前滚该块的前镜像,以保证所有被恢复的oracle block最终是一个完整的版本。
这也是我们常常发现在热备的时候日志文件会急剧增大的原因。
RMAN备份不会造成split block。RMAN备份时以oracle block为读取单元,并查验块的一致性,如果不一致会重复读,三次失败,将标注该块为逻辑坏块。