2017-01-18 7 views
1

私は3人のユーザー(user1/user1、user2/user2、user3/user3)を持つoracleデータベースを持っています と私は同じ番号/ 3人のユーザー。複数のユーザー(スキーマ)でSQLスクリプトを実行する方法 - ORACLE

私の問題は:私はuser1の私のtable1を更新したいとき、私はそれらを更新し続けるためにuser2とuser3の同じtable1を更新したい 私は一度だけスクリプトを実行したい私は他のユーザー(4と5)がいるので、他のユーザーにログインして同じスクリプトを実行すると、すべてのユーザーで1つのスクリプトを実行するのに多くの時間がかかります。

複数のユーザーに一度スクリプトを実行するためのツールやテクニックがあるのだろうかと思います。

ありがとうございます。

答えて

0

私は私が持っているフォルダを持っているでしょう

  • SQLスクリプト
  • 時に各データベースに接続し、スクリプトを実行するOSスクリプト

OR

他の3つ以上の権限を持つユーザーで実行し、それぞれを実行するようにスクリプトをパーソナライズします。

2

SQLPlusを使用して、ユーザーごとにスクリプトを1回実行するスクリプトを構築できます。

script.sql: は、あなたがこのようなスクリプトがあるとし

select count(1) from obj; 

、あなたは二人のユーザーのためにそれを実行したいです。これは、あなたが、プレーンにパスワードを保存しなければならないことを意味もちろん

SQL> @d:\scriptLauncher 
Connected. 

    COUNT(1) 
---------- 
     15 

Connected. 

    COUNT(1) 
---------- 
     35 

scriptLauncher.sql

conn alek/****@xe 
@d:\script 
conn hr/****@xe 
@d:\script 

結果を次のようなスクリプトを作成することができますこれはセキュリティ上のリスクと考えられます。

+0

この回答に加えて、さまざまなユーザーへのプロキシアクセスを1人のユーザーに許可することを検討してください。次のような単一のユーザーを使用して各プロキシユーザーに接続します。conn alek [hr]/**** @ xe。最後に、その単一ユーザーのパスワードをパラメータ化します。これはセキュリティ上の懸念を避けるべきです。 –

1

スクリプトがyourscript.SQLがで分割さのみDMLコマンドが含まれている必要があり

SET SERVEROUTPUT ON 
DECLARE 
    TYPE my_users_type IS VARRAY (5) OF VARCHAR (256); 
    my_users my_users_type;  
BEGIN 
    my_users := my_users_type ('USER1', 'USER2', 'USER3');   --your users 
    FOR i IN my_users.FIRST .. my_users.LAST LOOP 
     EXECUTE IMMEDIATE 'ALTER SESSION SET CURRENT_SCHEMA =' || my_users (i); 
     @D:\yourscript.SQL; --your script with path 
    END LOOP; 
end; 
/

のみDML操作を持っている場合は、これを試してみてください。 他には何もありません。 それを変更することができます - プロシージャを作成するには文字列パラメータがあります。パラメータはすべてのユーザに対してループで実行される単一のDMLコマンドです。

またはちょうどあなたのDML操作に接頭辞として

P.S.をスキーマ名を使用しない以外、スクリプトyourscript.SQLに

ALTER SESSION SET CURRENT_SCHEMA = USER1 
@D:\yourscript.SQL; 
ALTER SESSION SET CURRENT_SCHEMA = USER2 
@D:\yourscript.SQL; 
ALTER SESSION SET CURRENT_SCHEMA = USER3 
@D:\yourscript.SQL; 

制限なしを使用ユーザーの実行には十分な権限が必要です。

関連する問題