sql16

[Q]执行exec dbms_logmnr_d.build('Logminer.ora','file directory'),提示下标超界,怎么办 
[A]完整错误信息如下, 
SQL> exec dbms_logmnr_d.build('Logminer.ora','file directory')  
BEGIN dbms_logmnr_d.build('Logminer.ora','file directory'); END;  
*  
ERROR 位于第 1 行:  
ORA-06532: 下标超出限制  
ORA-06512: 在"SYS.DBMS_LOGMNR_D", line 793  
ORA-06512: 在line 1  
解决办法为: 
1.编辑位于"$ORACLE_HOME/rdbms/admin"目录下的文件"dbmslmd.sql"  
改变行:  
TYPE col_desc_array IS VARRAY(513) OF col_description;  
为 
TYPE col_desc_array IS VARRAY(700) OF col_description;  
并保存文件 
2. 运行改变后的脚本 
SQLPLUS> Connect internal  
SQLPLUS> @$ORACLE_HOME/rdbms/admin/dbmslmd.sql  
3.重新编译该包 
SQLPLUS> alter package DBMS_LOGMNR_D compile body; 
  
[Q]执行execute dbms_logmnr.start_logmnr(DictFileName=>'DictFileName')提示ORA-01843:无效的月份,这个是什么原因 
[A]我们分析start_logmnr包 
PROCEDURE start_logmnr(  
startScn IN NUMBER default 0 ,  
endScn IN NUMBER default 0,  
startTime IN DATE default TO_DATE('01-jan-1988','DD-MON-YYYY'),  
endTime IN DATE default TO_DATE('01-jan-2988','DD-MON-YYYY'),  
DictFileName IN VARCHAR2 default '',  
Options IN BINARY_INTEGER default 0 );  
可以知道,如果TO_DATE('01-jan-1988','DD-MON-YYYY')失败,将导致以上错误 
所以解决办法可以为 
1、Alter session set NLS_LANGUAGE=American 
2、用类似如下的方法执行 
execute dbms_logmnr.start_logmnr (DictFileName=> 'f:\temp2\TESTDICT.ora', starttime => TO_DATE(  
'01-01-1988','DD-MM-YYYY'), endTime=>TO_DATE('01-01-2988','DD-MM-YYYY'));


[B]第四部分、性能调整[/B] 

[Q]如果设置自动跟踪 
[A]用system登录 
执行$ORACLE_HOME/rdbms/admin/utlplan.sql创建计划表 
执行$ORACLE_HOME/rdbms/admin/plustrce.sql创建plustrace角色 
如果想计划表让每个用户都能使用,则 
SQL>create public synonym plan_table for plan_table; 
SQL> grant all on plan_table to public; 
如果想让自动跟踪的角色让每个用户都能使用,则 
SQL> grant plustrace to public; 
通过如下语句开启/停止跟踪 
SET AUTOTRACE ON |OFF  
| ON EXPLAIN | ON STATISTICS | TRACEONLY | TRACEONLY EXPLAIN 
  

你可能感兴趣的:(oracle,sql,脚本,F#)