在一個資料庫中模擬兩個資料庫(每個資料庫中使用者都建立表的同義詞)

mengzhaoliang發表於2008-12-16

OS:AIX5.3
Oracle:Oracle10.2.0.1.0
標題:在一個資料庫中模擬兩個資料庫(每個資料庫中都表的同義詞)

需求描述:目前需要在一個資料庫中模擬兩個資料庫(每個資料庫中都需要有2個使用者訪問相同的物件,這就需要建立私有同義詞)。原來的資料庫中存在一個lhomswas使用者,該使用者所擁有的物件增刪改查許可權都賦予給lhdt使用者,該使用者還建立了與表名一樣的公共同義詞(public synonym),現在需要新建一個jtomswas使用者,這個使用者匯入其他的資料庫,jtomswas使用者所擁有的物件都授權給jtdt使用者。(這同時需要新建jtdt使用者,並在jtomswas使用者的表中建立私有的同義詞,這樣方便jtdt使用)。


因為資料庫已經存在了lhomswas使用者,並且存在了lhdt使用者。
1、用lhomswas使用者檢視自己擁有的同義詞

SQL>select * from all_synonyms where table_owner='LHOMSWAS';

如果表中沒有公共的同義詞,可以建立;把所有的表建立相應的公共同義詞sql語句,如:

SQL>select  'create or replace public synonym '||  table_name ||  ' for lhomswas.'||table_name||';'   from   user_tables;

把產生的sql語句匯出來,然後在lhomswas使用者下執行即可。這樣可以把lhomswas使用者的所有表建立相應的同義詞了。

2、用lhomswas檢視自己所擁有的表是否已經授權給了lhdt使用者

SQL>select * from user_tab_privs;

如果沒有授權,把所有表的增刪改查許可權授權給lhdt使用者sql語句,如:

SQL>select   'grant select,update,insert,delete on '||table_name||' to lhdt;'   from user_tables;

把產生的sql語句匯出來,然後在lhomswas使用者下執行即可。這樣可以把lhomswas使用者的所有表授權給lhdt使用者了。


3、在資料庫中建立表空間,用來供新建立jtomswas使用

SQL> create tablespace jtomswas

 2 datafile '/home/oraoms/oradata/omsdata/jtomswas.dbf'

3 size 512M autoextend on maxsize 10G;

Tablespace created.

4、建立jtomswas使用者

SQL> create user jtomswas

2 identified by jtomswas

3 default tablespace jtomswas ;

User created.


5、授權許可權:

SQL> grant connect,resource,dba to jtomswas;

Grant succeeded.


(暫時賦予DBA角色的許可權,以便匯入資料,不然許可權不夠)

 

6、現在先匯出其他資料庫中的資料,以便匯入進來(資料庫比較大的話,有可能需要好幾個小時)
在Windows的CMD視窗,或者是Linux、UNIX的命令視窗(前提是能夠使用Oracle exp、imp的命令):

exp  jtomswas/password@ORCL   file=E:\BeiJingDatabaseBackup20081215\beijing20081215.dump    log=E:\BeiJingDatabaseBackup20081215\beijing20081215.log


7、匯入到目前的資料庫中來(資料庫比較大的話,有可能需要好幾個小時)
在Windows的CMD視窗,或者是Linux、UNIX的命令視窗(前提是能夠使用Oracle exp、imp的命令):

imp      fromuser=jtomswas   touser=jtomswas   rows=y  ignore=yes   grants=no   file=E:\BeiJingDatabaseBackup20081215\beijing20081215.dump    log=E:\BeiJingDatabaseBackup20081215\Impbeijing20081216.log


8、新建jtdt使用者

SQL> create   user  jtdt

      2 identified by jtdt;

 User created.

9、給jtdt使用者授與許可權:

SQL>grant  connect,resource   to   jtomswas;

暫時賦予connect,resource的角色。

10、需要把jtomswas使用者的表許可權僅供jtdt使用者使用,所有建立私有的同義詞,以便與jtdt通訊,用jtomswas使用者查詢

SQL>select   'create synonym jtdt.'|| table_name || '   for   jtomswas.'||table_name||';'    from   user_tables;

把產生的sql語句匯出來,然後在jtomswas使用者下執行即可。這樣可以把jtomswas使用者的所有表建立相應的私有同義詞了。


11、把jtomswas使用者的表許可權授予給jtdt使用者

SQL>select   'grant select,update,insert,delete on  '|| table_name ||'  to jtdt;'   from user_tables;

把產生的sql語句匯出來,然後在jtomswas使用者下執行即可。這樣可以把jtomswas使用者的所有表授權給jtdt使用者了。


到此結束!

 

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12778571/viewspace-512092/,如需轉載,請註明出處,否則將追究法律責任。

相關文章