是什么Dbms_Redefinition
?Oracle 文档说它是一个为对象重新定义提供接口的包。
我想了解这个“重新定义”到底是什么意思?这种重新定义与 DDL 和 DML 命令有何不同?“在线”是什么意思?
是什么Dbms_Redefinition
?Oracle 文档说它是一个为对象重新定义提供接口的包。
我想了解这个“重新定义”到底是什么意思?这种重新定义与 DDL 和 DML 命令有何不同?“在线”是什么意思?
此包的典型用例是将“普通”表更改为分区表或索引组织表。“在线”是指,此更改可以在不中断您的申请的情况下完成(在某些情况下)
通常,当您想要进行此类更改时,您必须创建新表并将数据从旧表复制到新表。然后你必须删除旧表(让你的应用程序停止)并重命名新表。在此过程中,如果应用程序继续将数据插入旧表中,您可能会丢失数据。
定义,就像在数据定义语言 (DDL) 中一样,意味着定义数据库对象。
在这种情况下,重新定义意味着重新定义数据库对象。
在 DBMS_REDEFINITION 可用之前,可以并且仍然可以使用带有 DDL 脚本的许多不同策略来重新定义数据库对象。使用 DDL 脚本您通常会发现在一段时间内重新定义的数据库对象对用户不可用,也称为脱机。数据库对象离线的时间越长,用户社区的“快乐”就越少。
解决方案是使用 DBMS_REDEFINITION,它可以在不停机的情况下重新定义数据库对象。
数据库中的关键问题有时是您希望更改其结构或定义,同时将其保持为用户可在线访问:
在您修改其结构时,任何人仍然可以插入/删除/更新表。
Oracle 为此提供了 DBMS_REDEFNITION 包:
引用自:
http://www.dba-oracle.com/t_dbms_redefinition_example.htm
Now with all that said, Oracle provides a robust and reliable package for performing many common online table level reorganizations - dbms_redefinition.
DBMS_REDEFINITION 中的不同存储过程必须在一个过程之后使用,这在上面的链接中有详细描述。
此处列出了该过程的摘要,有关详细信息,请参阅上面的链接:
1. Verify that the table is a candidate for online redefinition
2. Create an interim table
3. Enable parallel DML operations
4. Start the redefinition process (and do not stop until step 9 is done)
5. Copy dependent objects
6. Check for any errors
7. Synchronize the interim table (optional)
8. Complete the redefinition
9. Drop the interim table