我们有一个shell脚本,它执行我们的oracle数据库的物理备份(我们所有数据库文件的tar + compress)。最近,我们创建了一个表空间,其中包含我们不需要备份其内容的表。
是否可以忽略相对于此表空间的数据文件并具有有效的备份?
PS:我们不想使用RMAN。
答案 0 :(得分:1)
我在这里的发言前面加上一个注释:这不是规范模式。通常,我们使用RMAN来备份数据库中的所有数据文件。随着那说......
是的,可以使用m ssing数据文件从备份中恢复和恢复数据库。但恢复将要求在数据库恢复时删除表空间。
对于删除包含单个数据文件的表空间的简单情况:首先恢复数据库文件,然后:
STARTUP NOMOUNT;
ALTER DATABASE MOUNT ;
ALTER DATABASE DATAFILE '<complete_path_to_datafile>' OFFLINE DROP ;
ALTER DATABASE OPEN ;
DROP TABLESPACE <tablespace_name> INCLUDING CONTENTS ;
然后,继续数据库恢复(RECOVER DATABASE;)
显然,您在DROP TABLESPACE命令中提供的tablespace_name将是与被删除的数据文件相关的表空间。
显然,这对SYSTEM表空间不起作用。我不敢在UNDO,SYSAUX,USERS等其他表空间上尝试这个。并且有不同的语法用于删除和添加TEMPORARY TABLESPACES。
我不知道“DROP TABLESPACE ...包含内容”的任何“陷阱”,但考虑到其他表空间中的对象可能会受到影响。 (请考虑删除的表空间可能具有其他表空间中的表的索引,对外键约束的影响,对存储过程的影响等。)
毋庸置疑,您需要在测试环境中测试这种类型的恢复过程之前您在生产中依赖此技术。
如果不进行测试,使用RMAN来备份所有数据文件会更好。
注意:自Oracle 8以来,我没有做过这样的事情,可能是Oracle 7.3(当我们不得不推出自己的热备份脚本时)。由于我们已经开始使用RMAN,所以我没有必要测试这样的东西。
注意:可能需要在ALTER DATABASE OPEN之前运行RECOVER DATABASE。我想你可能会收到一个关于“需要更多恢复的数据文件”的异常警告,就像当一个表空间处于BEGIN BACKUP模式时启动数据库时那样......