在历史数据转移项目中,遇到了不少关于DBLink方面的问题,包括创建DBLink的疑难杂症、不支持查询含有LOB字段的表,表间连接产生的全表扫描等等,其中driving_site提示字是最近才接触到的一个知识点。下面对DBLink的一些知识进行了梳理。
1. 创建DBLink
1.1创建命令
create database link zlbak connect to zlbak01 identified by his using 'orcl';
注意,引号里的orcl,是在数据库服务器配置好的服务名,不是客户端本机配置的。
1.2名称
如果参数global_names为True,则要求创建的DBLink名称必须与被连接库的global_name相同。
create database link orcl connect to zlbak01 identified by his using 'orcl';
被连接的库,global_name可能很长,例如:
select * from global_name;
ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM
可以通过下面的命令将名称改短,去掉点后面的字符。
update global_name set global_name = 'orcl';
注意,千万不能改为空,否则会造成数据库无法启动,需要用特殊的方法才能解决。
如果通过下面这种方法修改,之前有域名的话,修改后仍然会有点后名的域名。
alter database rename global_name to orcl
当global_names为True时,如果要建多个DBLink指向同一个库,不能重名,怎么办呢?
create database link orcl@link1 connect to zlbak01 identified by his using 'orcl';
create database link orcl@link2 connect to zlbak01 identified by his using 'orcl';
原来,需要在GLOBAL_NAME后面加上@再加上一个标识。
既然global_names为True时这么麻烦,是否可以改为false呢?
如果不用流复制的话,完全是可以的,修改方法:
alter system set global_name=false;
修改后重新启动数据库设置才能生效,改成false之后,DBLink的名称就可以随意取了。
1.3特殊案例
记得是在2014年,做第一家用户的历史数据转出,完成之后,准备通过DBLink来实现远程历史库的查询