2017-01-18 29 views
1

我有一個oracle數據庫與3個用戶(user1/user1,user2/user2,user3/user3) 和我有相同的數量/結構的表3個用戶。如何在多個用戶(模式)執行SQL腳本 - ORACLE

我的問題是:當我想更新例如我的table1在user1中,我想要更新user2和user3中的相同table1爲了讓它們更新, 我想執行我的腳本一次,沒有登錄到其他用戶並執行相同的腳本,因爲我將有其他用戶(4和5),這將需要大量時間在所有用戶中執行一個腳本。

我想知道是否有工具或技術爲多個用戶執行一次腳本。

在此先感謝。

回答

0

我會在我有一個文件夾

  • SQL腳本
  • 即同時連接到每個數據庫並運行該腳本的OS腳本

OR

與擁有所有其他權限的用戶一起運行3,並對腳本進行個性化設置,以便每個腳本運行該腳本。

2

您可以使用SQLPlus構建一個腳本,該腳本爲每個用戶運行腳本一次。 假設你有一個這樣的腳本:

script.sql

select count(1) from obj; 

,並要運行它的兩個用戶;你可以建立一個腳本如下所示:

scriptLauncher.sql

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

結果:

SQL> @d:\scriptLauncher 
Connected. 

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

Connected. 

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

當然,這意味着你有你的密碼儲存在一個普通的文本文件,這可能是需要考慮的安全風險。

+0

除了這個答案之外,考慮授予對單個用戶的各種用戶的代理訪問權限。使用像下面這樣的單個用戶連接到每個代理用戶:conn alek [hr]/**** @ xe。最後,參數化該單個用戶的密碼。這應該避免安全問題。 –

1

試試這個,如果你的腳本只有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; 
/

yourscript.SQL應該只包含DML命令由分裂; 沒有別的。 或者你可以修改它 - 創建一個過程有字符串參數。參數將是單個DML命令,將爲所有用戶循環執行。

或只使用

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; 

沒有限制你的腳本yourscript.SQL,除了不使用模式名稱爲您的DML操作

附:前綴執行用戶應該有足夠的權利。