oracle积累

  1. 网站资料
    http://www.oracle.com/technology/global/cn/obe/11gr1_db/bidw/partition/partition.htm
  2. 计算本星期的起始结束日期
    --得到星期一的日期
    select trunc(sysdate,''DD'')-to_char(sysdate,''D'')+2 from dual; 
    --得到星期天的日期
    select trunc(sysdate,''DD'')-to_char(sysdate,''D'')+8 from dual;
  3. 使用explain plan分析sql;
    使用如下的两个命令显示查询执行的路径:
    set autotrace on 命令
    explain plan 命令
    set autotrace on 命令返回查询数据,显示sql执行路径;
    explain plan 显示sql执行路径,不执行查询操作,可见,explain plan更具实用性;

    下面是我的操作记录
    登录
    sqlplus dev/chenli@testdb ;
    执行
    set autotrace on;
    提示错误信息:
    SP2-0613: Unable to verify PLAN_TABLE format or existence
    SP2-0611: Error enabling EXPLAIN report
    错误信息告诉我们,没有plan_table,由于plan_table表结构在不同版本的oracle下会有所不同,所以不要随便创建这个表,在oracle的安装路径下面,提供了创建plan_table表的sql脚本,该sql脚本文件的路径是:$ORACLE_HOME/rdbms/admin/utlxplan.sql
    在sqlplusq模式下,执行如下命令,创建plan_table
    @$ORACLE_HOME/rdbms/admin/utlxplan.sql
    返回
    Table created.
    也可以把这个文件中的建表sql拷贝出来,到plsqldever中执行,创建plan_table表;
    sqlplus模式下,再次执行set autotrace on;
    没有错误信息返回;
    这时再执行sql语句,就会在返回结果后面,显示sql执行路径,和分析结果;

    用explain plan;不先运行查询sql的情况下,生成查询的执行路径;
    命令格式如下:
    explain plan
    for
    sql;
  4. 查看组合分区建表脚本
    在plsqldever中,只能看到组合分区表的表结构,看不到建表脚本,为了查看建表脚本,可以通过一个oracle自带的程序包来完成,具体操作sql如下:
    SELECT DBMS_METADATA.GET_DDL(''TABLE'',''TABLE_NAME'',''USER_NAME'') FROM DUAL;
    在上面的参数中,TABLE_NAME是被查询的表的名字,USER_NAME表归属的用户名字.
    如果如上格式填写正确的参数,执行sql,就可以抓去到组合分区表的建表脚本.
    如果执行如上sql的时候,出现如下错误:
    ORA-31603: object "CP_EXT_PKGINFO_HIS_T" of type TABLE not found in schema
    "SCHEMA"
    ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105
    ORA-06512: at "SYS.DBMS_METADATA_INT", line 3209
    ORA-06512: at "SYS.DBMS_METADATA_INT", line 3594
    ORA-06512: at "SYS.DBMS_METADATA_INT", line 4483
    ORA-06512: at "SYS.DBMS_METADATA", line 326
    ORA-06512: at "SYS.DBMS_METADATA", line 410
    ORA-06512: at "SYS.DBMS_METADATA", line 449
    ORA-06512: at "SYS.DBMS_METADATA", line 615
    ORA-06512: at "SYS.DBMS_METADATA", line 1221
    ORA-06512: at line 1
    那么,请检查传入的三个参数,最应该注意的是最后一个参数,他是一个数据库用户名;有些参考书上将上面描述成SELECT DBMS_METADATA.GET_DDL(''TABLE'',''TABLE_NAME'',''SCHEMA'') FROM DUAL;
    其实SCHEMA在oracle中就是一个oracle用户
  5. 取消日志记录,提高性能
    在海量插入数据和创建表的时候,不记录日志比记录日志在性能上有很大的提高,使用方法
     insert into table_a nologging select * from table_b;
    create table_a nologging as select * from table_b;


转载于:https://my.oschina.net/u/921799/blog/634838

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值