oracle11g新特性之模式管理

oracle11g新特性之模式管理

ID:35515183

大小:133.00 KB

页数:7页

时间:2019-03-25

oracle11g新特性之模式管理_第1页
oracle11g新特性之模式管理_第2页
oracle11g新特性之模式管理_第3页
oracle11g新特性之模式管理_第4页
oracle11g新特性之模式管理_第5页
资源描述:

《oracle11g新特性之模式管理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、DDLWait选项Jill(AcmeRetailers的DBA)尝试更改名为SALES的表,为其添加一列TAX_CODE。这是很常见的任务;她执行了以下SQL语句:SQL>altertablesalesadd(tax_codevarchar2(10));但是,她收到了以下消息,而非“Tablealtered”之类的内容:altertablesalesadd(tax_codevarchar2(10)) *ERRORatline1: ORA-00054:resourcebusyandacquirewith NOWAITspe

2、cifiedortimeoutexpired错误消息描述的是:该表目前可能正由一个事务使用,因此要获得该表的独占锁定不太可能。当然,表的行不会永远锁定。当会话执行提交动作后,会释放对这些行的锁定,但在此之前,由于解除锁定期间很长,其他会话可能会更新表的其他行—这样,获得表的独占锁定的时机又消失了。在典型的商务环境中,以独占方式锁定表的窗口会定期打开,但DBA可能无法恰好在那时执行alter命令。当然,Jill也可以反复键入相同的命令,直到获得独占锁定或者失败(两者取其先)。在Oracle数据库11g中,Jill有更好的选

3、择:DDLWait选项。她可以执行以下命令:SQL>altersessionsetddl_lock_timeout=10;Sessionaltered.现在,如果会话中的DDL语句没有获得独占锁定,也不会显示错误消息。相反,它将等待10秒钟。在这10秒钟内,它将不断重试DDL操作,直到成功或超时(两者取其先)。如果执行以下命令:SQL>altertablesalesadd(tax_codevarchar2(10));该语句将挂起,并且不会显示错误消息。这样,Jill就将重复尝试操作外包给了Oracle数据库11g(就像电

4、话通过程序重试繁忙号码),而不必反复尝试以获得难以捉摸的独占锁定可用时机。现在,Jill十分喜欢这个特性,并与其他所有DBA一起分享这个特性。由于在系统繁忙期间更改表时,每个人都遇到过相同的问题,他们都发现这个新特性非常有帮助。因此,Jill很想知道是否可以将该行为设为默认行为,这样就不需要每次都执行ALTERSESSION语句?是的,可以。如果您执行ALTERSYSTEMSETDDL_LOCK_TIMEOUT=10,会话将在DDL操作期间自动等待该时间段。与任何其他ALTERSYSTEM语句一样,该语句可被ALTERS

5、ESSION语句覆盖。添加具有默认值的列尽管对该特性感到满意,Jill还在考虑与第一个问题相关的另一个问题。她希望添加TAX_CODE列,但该列不能为空。显然,当她向非空表添加非空列时,还必须指定默认值“XX”。因此,她编写了以下SQL:altertablesalesaddtax_codevarchar2(20)default'XX'notnull;但她在这里停下了。SALES表十分巨大,大约有4亿行。她知道,在执行该语句时,Oracle会立即添加该列,但在将控制权返回给她之前将更新所有行中的值“XX”。更新4亿行不仅要

6、花费很长时间,还要填充还原段、生成大量重做任务并产生极大的性能开销。因此,Jill必须在“安静时段”(即,停机期间)才能进行此更改。Oracle数据库11g中有更好的方法吗?当然有。上述语句将不会对表中的所有记录执行更新。尽管对于列值将自动设为“XX”的新记录来说,这不是问题,但当用户选择现有记录的该列时,这将返回NULL,是吗?实际上并非如此。当用户选择现有记录的列时,Oracle将从数据字典获取默认值并将其返回给用户。这样,您就实现了一箭双雕:可以将一个新列定义为非空并具有默认值,同时不会导致任何重做和还原开销。真棒

7、!虚拟列Acme的数据库包含了一个名为SALES的表,如前所示。该表的结构如下:SALES_IDNUMBER CUST_IDNUMBER SALES_AMTNUMBER某些用户希望添加一个名为SALE_CATEGORY的列,以便根据销售量和当前客户来标识销售的类型:LOW、MEDIUM、HIGH和ULTRA。该列将帮助他们识别相应动作的记录,并将记录路由给相关人员以进行处理。以下是列值的逻辑:如果sale_amt大于:且sale_amt小于或等于:则sale_category为01000LOW10001100000MED

8、IUM1000011000000HIGH1000001无限ULTRA尽管该列是重要的业务需求,但开发团队不希望更改代码以创建必要的逻辑。当然,您可以在表中添加一个名为sale_category的新列,然后编写一个触发器以使用上述逻辑填充该列—一个相当简单的操作。但是,由于与触发器代码的上下文切换,可能会导致性能问题。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。