备份和恢复表

时间:2014-09-17 11:35:43

标签: sql oracle

Database: Oracle 11g R2

Tool: TOAD for Oracle 10.6

我想要备份一张桌子。因此,我使用了以下查询:

CREATE TABLE table_backup AS (

SELECT *

FROM table

);

我需要对表进行一些更改,并在验证更改后将其还原到以前的版本。

为此,我将DROP表并使用上述查询从备份中恢复它。

我的问题是,当我这样做时,是否所有的拨款,索引,分区等都保留在已恢复的表格中?

此外,是否有更好的方法来实现我的要求。

1 个答案:

答案 0 :(得分:1)

documentation说:

  

删除表会使相关对象无效并删除表上的对象权限。如果要重新创建表,则必须重新授予表的对象权限,重新创建表的索引,完整性约束和触发器,并重新指定其存储参数。

当您执行create table as ... select语句时,会移动或复制许可,索引,分区等。原始表和复制表之间没有关系。当您放弃原始表时,其所有授权等都将丢失。将备份表重命名为原始备份表并不能神奇地恢复它们。

其他选项包括:

  • 导出原始表格,包括拨款。进行更改后,删除表并重新导入。
  • 重命名原始表格,保留赠款等;然后使用原始名称重新创建表格(可能是重命名的表格)。完成后,删除新表并将旧表重命名为其原始名称。但要小心 - 不要忘记带走真正的桌子。如果您的验证需要任何授权等,那么您必须将这些授权应用于新表格;索引需要不同的名称,这可能会使这一点复杂化。
  • 在不同的模式中复制表(例如,使用导出/导入)并测试您在那里的更改,然后将其丢弃。再次注意你正在处理/删除的副本。如有必要,您可以复制相关表以保持完整性。
  • 删除原始表格,重新创建,修改并验证,然后再次删除;和use flashback drop恢复原始表。你需要确保它设置的闪回以支持这一点 - 所以它必须足够大以容纳两个丢弃的表,例如。快速但导入/导出可能更安全。
  • 逐个恢复您的个人更改,如果您正在测试更改,则存在风险 - 很容易错过。

您还需要考虑任何参照约束(PK / FK)以及它们是否会受到重命名或删除/重新创建/导出/导入的影响。