最近做的项目都是跟数据库相关的一些东西,有时间就总结一下吧,首先总结一下dblink。
1.什么时候会是用dblink
当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库就要创建远程数据库的dblink。通过dblink本地数据库可以像访问本地数据库一样访问远程数据表中的数据。
2.如何在本地创建dblink
创建dblink有两种方式,不过在创建dblink之前用户必须有创建dblink的权限。查看有关dblink的权限,比如用tel25_yy/abc123@RCO09 查看本地dblink的权限:
select * from user_sys_privs t where t.privilege like upper('%link%');
结果是:
TEL25_YY DROP PUBLIC DATABASE LINK NO
TEL25_YY CREATE PUBLIC DATABASE LINK NO
在数据库中dblink有三种权限CREATE DATABASE LINK(所创建的dblink只能是创建者能使用,别的用户使用不了),CREATE PUBLIC DATABASE LINK(public表示所创建的dblink所有用户都可以使用),DROP PUBLIC DATABASE LINK。
创建dblink的第一种方式:在本地数据库tnsname.ora文件中配置了要远程访问的数据库。
比如:在本地RCO09 上创建dblink
create database link yy_telus_test
connect to tel25_yy IDENTIFIED BY abc123 using 'RCO08';
其中yy_telus_test 是你创建的dblink的名字,tel25_yy 是你远程访问数据库的用户名,abc123是你远程访问数据库的密码,RCO08 是你通过dblink要远程访问的数据库。
创建完成后,你在本地RCO09上就可以访问RC008上的表了。比如:查看test_forall表:
select * from test_forall@RC008;
第二种方式:是在本地数据库tnsnames.ora文件中没有配置要访问的远程数据库,要把tnsnames.ora的信息直接放在创建dblink语句后面。
RCO08 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)
(HOST = 192.168.1.5) (PORT = 1521))
(CONNECT_DATA = (SID=RCO08)))
其实两种方法配置dblink是差不多的,但是还是第二种方法比较好,不受本地服务的影响。
3.如何查看已经建好的dblink
select * from ALL_DB_LINKS where username='TELUS25_YY';
TELUS25_YY YY_TEL_TEST2 TELUS25_YY RCO07 16/12/14
TELUS25_YY YY_TEL_TEST TELUS25_YY RCO08 16/12/14