Oracle11g新特性之模式管理
DDL Wait 选项Jill(Acme Retailers 的 DBA)尝试更改名为 SALES 的表,为其添加一列 TAX_CODE。这是很常见的任务;她执行了以下 SQL 语句:SQL> alt
DDLWait 选项 JillAcmeRetailersDBASALESTAX_CODESQL (的)尝试更改名为的表,为其添加一列。这是很常见的任务;她执行了以下语句: >altertablesalesadd(tax_codevarchar2(10)); SQL “Tablealtered” 但是,她收到了以下消息,而非之类的内容: altertablesalesadd(tax_codevarchar2(10)) *ERRORatline1: ORA-00054:resourcebusyandacquirewith NOWAITspecifiedortimeoutexpired 错误消息描述的是:该表目前可能正由一个事务使用,因此要获得该表的独占锁定不太可能。当然,表的行不会永远锁定。当会话执行提交动作后,会释放对这些行的锁定,但在 — 此之前,由于解除锁定期间很长,其他会话可能会更新表的其他行这样,获得表的独占锁定的时机又消失了。在典型的商务环境中,以独占方式锁定表的窗口会定期打开,但 DBAalter 可能无法恰好在那时执行命令。 Jill 当然,也可以反复键入相同的命令,直到获得独占锁定或者失败(两者取其先)。 11gJillDDLWait Oracle 在数据库中,有更好的选择:选项。她可以执行以下命令: SQL>altersessionsetddl_lock_timeout=10;Sessionaltered. DDL1010DDL 现在,如果会话中的语句没有获得独占锁定,也不会显示错误消息。相反,它将等待秒钟。在这秒钟内,它将不断重试操作,直到成功或超时(两者取其先)。 如果执行以下命令: SQL>altertablesalesadd(tax_codevarchar2(10)); JillOracle11g 该语句将挂起,并且不会显示错误消息。这样,就将重复尝试操作外包给了数据库(就像电话通过程序重试繁忙号码),而不必反复尝试以获得难以捉摸的独占锁 定可用时机。 JillDBA 现在,十分喜欢这个特性,并与其他所有一起分享这个特性。由于在系统繁忙期间更改表时,每个人都遇到过相同的问题,他们都发现这个新特性非常有帮助。因此, JillALTERSESSION 很想知道是否可以将该行为设为默认行为,这样就不需要每次都执行语句? ALTERSYSTEMSETDDL_LOCK_TIMEOUT=10DDLALTERSYSTEM 是的,可以。如果您执行,会话将在操作期间自动等待该时间段。与任何其他语句一样,该语句可被 ALTERSESSION 语句覆盖。 添加具有默认值的列

