خرید بک لینک

1 SQL History در نسخه 23c امکان مشاهده آخرین دستورات اجرا شده توسط sessionها را فراهم می کند(حدودا 50 دستور برای هر session) 1 بر اساس این قابلیت، دستوراتی که اجرای آنها به خطا خورده را هم نمایش می دهد.

برای فعال کردن قابلیت SQL History باید پارامتر SQL_HISTORY_ENABLED را به مقدار TRUE تنظیم کرد مقدار پیش فرض این پارامتر برابر با False است:

SQL> show parameter  SQL_HISTORY_ENABLED
NAME                 TYPE   	 VALUE
-------------------- --------- ------- 
sql_history_enabled  boolean 	FALSE

این پارامتر در دو سطح session و system قابل تنظیم است:

SQL> alter system set sql_history_enabled=true;
System altered

بعد از تنظیم این پارامتر، برای مشاهده لیست دستورات اجرا شده می توان از ویوی V$SQL_HISTORY استفاده کرد:

SQL> desc v$sql_history
Name                           Type          Nullable Default Comments 
------------------------------ ------------- -------- ------- -------- 
KEY                            NUMBER        Y                         
SQL_ID                         VARCHAR2(13)  Y                         
ELAPSED_TIME                   NUMBER        Y                         
CPU_TIME                       NUMBER        Y                         
BUFFER_GETS                    NUMBER        Y                         
IO_INTERCONNECT_BYTES          NUMBER        Y                         
PHYSICAL_READ_REQUESTS         NUMBER        Y                         
PHYSICAL_READ_BYTES            NUMBER        Y                         
PHYSICAL_WRITE_REQUESTS        NUMBER        Y                         
PHYSICAL_WRITE_BYTES           NUMBER        Y                         
PLSQL_EXEC_TIME                NUMBER        Y                         
JAVA_EXEC_TIME                 NUMBER        Y                         
CLUSTER_WAIT_TIME              NUMBER        Y                         
CONCURRENCY_WAIT_TIME          NUMBER        Y                         
APPLICATION_WAIT_TIME          NUMBER        Y                         
USER_IO_WAIT_TIME              NUMBER        Y                         
IO_CELL_UNCOMPRESSED_BYTES     NUMBER        Y                         
IO_CELL_OFFLOAD_ELIGIBLE_BYTES NUMBER        Y                         
SQL_TEXT                       VARCHAR2(100) Y                         
PLAN_HASH_VALUE                NUMBER        Y                         
SQL_EXEC_ID                    NUMBER        Y                         
SQL_EXEC_START                 DATE          Y                         
LAST_ACTIVE_TIME               DATE          Y                         
SESSION_USER#                  NUMBER        Y                         
CURRENT_USER#                  NUMBER        Y                         
CHILD_NUMBER                   NUMBER        Y                         
SID                            NUMBER        Y                         
SESSION_SERIAL#                NUMBER        Y                         
IS_FULL_SQLTEXT                VARCHAR2(1)   Y                         
ERROR_SIGNALLED                VARCHAR2(1)   Y                         
ERROR_NUMBER                   NUMBER        Y                         
ERROR_FACILITY                 VARCHAR2(4)   Y                         
STATEMENT_TYPE                 VARCHAR2(5)   Y                         
CON_ID                         NUMBER        Y     

از طریق ستونهای SID و #serial می توانیم session مورد نظر را تعیین کنیم همچنین ستونهای ELAPSED_TIME، SQL_TEXT، ERROR_NUMBER، STATEMENT_TYPE و … هم می توانند بسیار کاربردی باشند.

SQL> select sid from v$mystat where rownum=1;
       SID
----------
        70
SQL> select /*usefzadeh*/ * form ss;
ORA-00923: FROM keyword not found where expected

SQL> select sql_id, sql_text,ELAPSED_TIME,error_facility,error_number, statement_type from v$sql_history where sid=70 and sql_text like '%usefza%';

مثال دیگری را در این زمینه می بینیم:

SQL> select /*vahid2*/ * from sys.user$;
ORA-41900: missing READ privilege on "SYS"."USER$"

select sql_id, sql_text,ELAPSED_TIME,error_facility,error_number, statement_type from v$sql_history where sid=52 and sql_text like '%vahid2%'

*برای دستوراتی که اجرای آنها به خطا خورده ستون error_signalled مقدار Yes را نمایش خواهد داد.

مثال بعدی از یک QUERY است که بدون خطا اجرا شده:

SQL> select /*usef2*/ count(*) from dba_source;
  COUNT(*)
----------
    319284

select sql_id, sql_text,ELAPSED_TIME,error_facility,error_number, statement_type from v$sql_history where sid=70 and sql_text like '%usefza%'

دستورات DML و DDL هم ثبت خواهند شد:

SQL> create table iran1402 as select * from v$datafile;
Table created.

SQL> select sql_id, sql_text,ELAPSED_TIME,error_facility,error_number, statement_type from v$sql_history where sid=56 and sql_text like '%iran%';

SQL> delete iran1402;
9 rows deleted.

SQL>  select sql_id, sql_text,ELAPSED_TIME,error_facility,error_number, statement_type from v$sql_history where sid=%';

به طور پیش فرض تعداد دستوری که موقتا برای هر session ذخیره می شود برابر با 50 می باشد این مقدار از طریق پارامتر sql_history_buffers_ قابل تنظیم است:

select * from (SELECT a.ksppinm  "Parameter",b.ksppstvl "Session_Value",c.ksppstvl "Instance_Value" FROM x$ksppi a, x$ksppcv b, x$ksppsv c
 WHERE a.indx = b.indx AND a.indx = c.indx AND a.ksppinm LIKE '/_%' escape '/') 
 where "Parameter" like '%_sql_history_buffers%'
Parameter            Session_Value        Instance_Value
-------------------- -------------------- ---------------
_sql_history_buffers 50                   50

ویوی v$SQL_HISTORY_STATS اطلاعاتی را در مورد sql history ارائه می کند و مشخص می کند این قابلیت برای کدام container فعال شده و یا به ازای هر container چه تعداد دستور ذخیره شده دارد و …

SQL>  select c.CON_ID,c.TOTAL_BUFFERS,c.USED_SESSIONS,c.SQL_HISTORY_SGA_LIMIT_KB,c.ENTRY_LIMIT_PARAM,c.SQLTEXT_LIMIT,c.ENABLED from v$SQL_HISTORY_STATS c;

 

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:[email protected]

برچسب: نویسنده: خنجی تاريخ: دوشنبه 16 مرداد 1402 ساعت: 15:26

صفحه بندی