当前位置: 首页 > 工具软件 > wwas-admin > 使用案例 >

oracle的一ww,oracle积累 - 米图ww的个人空间 - OSCHINA - 中文开源技术交流社区

秦才
2023-12-01

计算本星期的起始结束日期

--得到星期一的日期

select trunc(sysdate,''DD'')-to_char(sysdate,''D'')+2 from dual;

--得到星期天的日期

select trunc(sysdate,''DD'')-to_char(sysdate,''D'')+8 from dual;

使用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;

查看组合分区建表脚本

在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用户

取消日志记录,提高性能

在海量插入数据和创建表的时候,不记录日志比记录日志在性能上有很大的提高,使用方法

insert into table_a nologging select * from table_b;

create table_a nologging as select * from table_b;

 类似资料: