2017-09-07 11 views
0

質問:値が整数またはブール値ではなく文字列であるinitパラメータに有効なdbms_system.set_int_param_in_sessionと同等のものがありますか?oracle 12c cursor_sharing alter multple sessions

Backstory: 私は、APIのバインド変数を使用しないサードパーティのアプリケーションに問題があります。これは、アプリケーションが同じSQLを何度も繰り返し発行するため、CPUとパフォーマンスが低下します。 (ハード解析)私は、カーソルの共有パラメータをFORCEに設定するとパフォーマンスが向上することを発見しましたが、その際にセキュリティ上の問題があります。サードパーティのアプリケーションは多くのセッションを維持しています(〜30-50)。私の現在のアプローチは、サードパーティアプリケーションがそのことをやっている間に強制的にcursor_sharingを設定し、それが完了したときにcursor_sharingを正確に戻すことです。クルージー?はい、非常に。私たちはいくつかの調査を行い、dbms_system.set_int_param_in_sessionプロシージャを見つけました。これは、データ型整数のinitパラメータでのみ動作する点を除いて、適切な解決策と思われます。データ型stringの値を持つパラメータに相当するものはありますか?

答えて

0

イムもdbms_systemパッケージに利用可能なinfoに基づいてDBMS_SYSTEMを、使用して精通していないが、私は、セッション・レベルでadd_parameter_valueを使用しようと、次のエラーになってしまった:

SQL> set serveroutput on 
DECLARE 
sid_value VARCHAR2(10); 
BEGIN 
    dbms_system.get_env('ORACLE_SID', sid_value); 
    dbms_output.put_line(sid_value); 
    dbms_system.add_parameter_value('cursor_sharing', 'EXACT', 'MEMORY', sid_value, 4); 
END; 
/
show errorsSQL> 2 3 4 5 6 7 8 mydb 
DECLARE 
* 
ERROR at line 1: 
ORA-20004: cursor_sharing is not a list parameter 


SQL> 

ので、次のトリガーを試してみましたあなたの要件に応じて変更することができるユーザーSCOTTの場合にのみ、cursor_sharingforceと設定します。

SQL> create or replace trigger csf 
after logon 
on database 
begin 
    if user='SCOTT' then 
     execute immediate 'alter session set cursor_sharing=force'; 
    else 
     execute immediate 'alter session set cursor_sharing=exact'; 
    end if; 
end; 
/2 3 4 5 6 7 8 9 10 11 

Trigger created. 

SQL> 
SQL> 
SQL> conn scott/tiger 
Connected. 
SQL> show parameter cursor_sharing 

NAME     TYPE  VALUE 
--------------------- --------- --------------- 
cursor_sharing  string FORCE 
SQL> 
SQL> conn system/manager 
Connected. 
SQL> show parameter cursor_sharing 

NAME     TYPE  VALUE 
--------------------- --------- --------------- 
cursor_sharing  string EXACT 
SQL> 

これは、値を元の値に戻すことを避けるのに役立ちます。

関連する問題