关闭

12C SQL方面新特性小结

发表于:2014-11-25 09:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:静以致远√团团    来源:51Testing软件测试网采编

  DDL日志
  在之前的版本中没有可选方法来对DDL操作进行日志记录。而在12c R1中,你现在可以将DDL操作写入xml和日志文件中。这对于了解谁在什么时间执行了create或drop命令是十分有用的。要开启这一功能必须对ENABLE_DDL_LOGGING 初始参数加以配置。这一参数可以在数据库或会话级加以设置。当此参数为启用状态,所有的DDL命令会记录在$ORACLE_BASE/diag/rdbms/DBNAME/log|ddl 路径下的xml和日志文件中。一个xml中包含DDL命令,IP地址,时间戳等信息。这可以帮助确定在什么时候对用户或表进行了删除亦或是一条DDL语句在何时触发。
  开启DDL日志功能
  SQL> ALTER SYSTEM|SESSION SET ENABLE_DDL_LOGGING=TRUE;
  以下的DDL语句可能会记录在xml或日志文件中:
  CREATE|ALTER|DROP|TRUNCATE TABLE
  DROP USER
  CREATE|ALTER|DROP PACKAGE|FUNCTION|VIEW|SYNONYM|SEQUENCE
  截断表CASCADE
  在之前的版本中,在子表引用一个主表以及子表存在记录的情况下,是不提供截断此主表操作的。而在12c中的带有CASCADE操作的TRUNCATE TABLE可以截断主表中的记录,并自动对子表进行递归截断,并作为DELETE ON CASCADE服从外键引用。由于这是应用到所有子表的,所以对递归层级的数量是没有CAP的,可以是孙子表或是重孙子表等等。
  这一增强摈弃了要在截断一个主表之前先截断所有子表记录的前提。新的CASCADE语句同样也可以应用到表分区和子表分区等。
  SQL> TRUNCATE TABLE CASCADE;
  SQL> TRUNCATE TABLE PARTITION CASCADE;
  如果对于子表的外键没有定义ON DELETE CASCADE 选项,便会抛出一个ORA-14705错误
  对SQL*Plus的各种增强
  SQL*Plus的隐式结果:12c中,在没有实际绑定某个RefCursor的情况下,SQL*Plus从一个PL/SQL块的一个隐式游标返回结果。这一新的dbms_sql.return_result过程将会对PL/SQL 块中由SELECT 语句查询所指定的结果加以返回并进行格式化。以下代码对此用法进行了描述:
  SQL> CREATE PROCEDURE mp1
  res1 sys_refcursor;
  BEGIN
  open res1 for SELECT eno,ename,sal FROM emp;
  dbms_sql.return_result(res1);
  END;
  SQL> execute mp1;
  当此过程得以执行,会在SQL*Plus上返回格式化的记录。
  会话级序列
  在12c中现在可以创建新的会话级数据库序列来支持会话级序列值。这些序列的类型在有会话级的全局临时表上最为适用。
  会话级序列会产生一个独特范围的值,这些值是限制在此会话内的,而非超越此会话。一旦会话终止,会话序列的状态也会消失。以下示例解释了创建一个会话级序列:
  SQL> CREATE SEQUENCE my_seq START WITH 1 INCREMENT BY 1 SESSION;
  SQL> ALTER SEQUENCE my_seq GLOBAL|SESSION;
  对于会话级序列,CACHE, NOCACHE, ORDER 或 NOORDER 语句会予以忽略。
  WITH语句的改善
  在12c中,你可以用SQL更快的运行PL/SQL函数或过程,这些是由SQL语句的WITH语句加以定义和声明的。以下示例演示了如何在WITH语句中定义和声明一个过程或函数:
  WITH
  PROCEDURE|FUNCTION test1 (…)
  BEGIN
  END;
  SELECT FROM table_name;
  /
  尽管你不能在PL/SQL单元直接使用WITH语句,但其可以在PL/SQL单元中通过一个动态SQL加以引用。
  扩展数据类型
  在12c中,与早期版本相比,诸如VARCHAR2, NAVARCHAR2以及 RAW这些数据类型的大小会从4K以及2K字节扩展至32K字节。只要可能,扩展字符的大小会降低对LOB数据类型的使用。为了启用扩展字符大小,你必须将MAX_STRING_SIZE的初始数据库参数设置为EXTENDED。
  要使用扩展字符类型需要执行以下过程:
  1. 关闭数据库
  2. 以升级模式重启数据库
  3. 更改参数: ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED;
  4. 执行 utl32k.sql as sysdba : SQL> @?/rdbms/admin/utl32k.sql
  5. 关闭数据库
  6. 以读写模式重启数据库
  对比LOB数据类型,在ASSM表空间管理中,扩展数据类型的字段以SecureFiles LOB加以存储,而在非ASSM表空间管理中,它们则是以BasciFiles LOB进行存储的。
  注意:一旦更改,你就不能再将设置改回STANDARD。
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号