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;

برچسب:
نویسنده: خنجی