ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 在一个数据库中模拟两个数据库(每个数据库中用户都建立表的同义词)

在一个数据库中模拟两个数据库(每个数据库中用户都建立表的同义词)

原创 Linux操作系统 作者:mengzhaoliang 时间:2008-12-16 16:24:52 0 删除 编辑

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   jtomswas/password@NEWORCL   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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2008-01-30

  • 博文量
    335
  • 访问量
    2985174