使用数据库连接来访问远程数据库中的表
需求:当我们想查询远程的数据库表,同时和本地数据库的表进行联合操作的时候。
本实验描述:在主机192.168.0.15的tnsnames.ora文件中有200字符串,保证可以使用conn scott/tiger@200等远程登录主机192.168.0.200上的数据库。
在主机192.168.0.15上使用sys用户本地登录,创建一个共有的数据库连接,名称为dh,连接到主机192.168.0.200数据库的system用户。
SQL> create public database link dh connect to system identified by oracle using '200';
Database link created.
SQL> select * from dba_db_links;
PUBLIC DH.COM SYSTEM
200
15-SEP-15
SQL> select * from v$instance;
1 mydb desktop15.example.com 11.2.0.1.0 15-SEP-15 OPEN NO 1 STARTED
ALLOWED NO ACTIVE PRIMARY_INSTANCE NORMAL NO
SQL> select * from v$instance@dh;
1 ORACLE1 oracle1 11.2.0.1.0 15-SEP-15 OPEN NO 1 STARTED
ALLOWED NO ACTIVE PRIMARY_INSTANCE NORMAL NO
SQL> select * from scott.e@dh;
7788 SCOTT ANALYST 7566 19-APR-87 4000 20
7369 SMITH CLERK 7902 17-DEC-80 800 20
更新192.168.0.200主机数据库中的scott用户的e表中的工资,并提交。
SQL> update scott.e@dh set sal=sal+1;
2 rows updated.
SQL> select * from scott.e@dh;
7788 SCOTT ANALYST 7566 19-APR-87 4001 20
7369 SMITH CLERK 7902 17-DEC-80 801 20
SQL> commit;
在主机192.168.0.200上查询,发现更新成功。
SQL> select * from scott.e;
7788 SCOTT ANALYST 7566 19-APR-87 4001 20
7369 SMITH CLERK 7902 17-DEC-80 801 20
通过同义词来透明的访问和操作远程的表:
在主机192.168.0.15上的scott用户下创建表e200作为主机192.168.0.200上scott用户下的e表的同义词。
SQL> create synonym scott.e200 for scott.e@dh;
Synonym created.
SQL> select * from scott.e200;
7788 SCOTT ANALYST 7566 19-APR-87 4001 20
7369 SMITH CLERK 7902 17-DEC-80 801 20
更新同义词表scott.e200:
SQL> update scott.e200 set sal=sal-2;
2 rows updated.
SQL> select * from scott.e200;
7788 SCOTT ANALYST 7566 19-APR-87 3999 20
7369 SMITH CLERK 7902 17-DEC-80 799 20
SQL> commit;
在主机192.168.0.200上查看scott.e表,发现数据已更新:
SQL> select * from scott.e;
7788 SCOTT ANALYST 7566 19-APR-87 3999 20
7369 SMITH CLERK 7902 17-DEC-80 799 20
用户数据的复制:
实验:将主机192.168.0.58上的scott用户映射到192.168.0.15主机上的u03用户
注:u03用户可以事先在主机192.168.0.15上创建,并赋予和远程主机上的scott用户相同的权限。也可以不用创建,只是在映射的时候制定用户名u03,默认密码和远程主机scott用户的密码相同(即tiger),该实验中58主机上的scott用户的表所在的为USERS,默认映射到15主机的USERS表空间(如果15上没有USERS表空间則必须也指定表空间的映射,具体如下)
SQL> grant connect,resource to u03 identified by u03;
SQL> create public database link link58_system connect to system identified by oracle using '58';
[oracle@desktop15 expdir]$ impdp system/oracle network_link=link58_system schemas=scott remap_schema=scott:u03;
如果在15主机上存在和远程主机相同的表空间和用户,可以不用指定表空间和用户的映射。默认映射到同名的表空间及用户下。
[oracle@desktop15 ~]$ impdp system/oracle network_link=link58_system schemas=myu01
如果在15主机上不存在和远程主机相同的表空间和用户,则必须指定表空间和用户的映射,否则会报错:
[oracle@desktop15 ~]$ impdp system/oracle network_link=link58_system schemas=myu01 remap_tablespace=tbs1:users remap_schema=myu01:u05;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30373263/viewspace-2125692/,如需转载,请注明出处,否则将追究法律责任。