使用DBLink过程中遇到的一系列问题总结

在历史数据转移项目中,遇到了不少关于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来实现远程历史库的查询

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Oracle存储过程使用DBLink跨库同步数据: ```sql CREATE OR REPLACE PROCEDURE SYNC_DATA_ACROSS_DB ( db_link_name IN VARCHAR2, source_table_name IN VARCHAR2, destination_table_name IN VARCHAR2 ) AS BEGIN -- 在目标数据库创建一个临时表 EXECUTE IMMEDIATE 'CREATE TABLE temp_table AS SELECT * FROM ' || destination_table_name || ' WHERE 1=0'; -- 将源数据库的数据插入到临时表 EXECUTE IMMEDIATE 'INSERT INTO temp_table SELECT * FROM ' || source_table_name || '@' || db_link_name; -- 删除目标数据库的旧数据 EXECUTE IMMEDIATE 'DELETE FROM ' || destination_table_name; -- 将临时表的数据插入到目标数据库 EXECUTE IMMEDIATE 'INSERT INTO ' || destination_table_name || ' SELECT * FROM temp_table'; -- 删除临时表 EXECUTE IMMEDIATE 'DROP TABLE temp_table'; COMMIT; END; / ``` 这个存储过程接受三个参数,分别是DBLink的名称,源表的名称和目标表的名称。它首先在目标数据库创建一个临时表,然后将源数据库的数据插入到这个临时表。接着,它删除目标数据库的旧数据,并将临时表的数据插入到目标数据库。最后,它删除临时表并提交事务。 要使用这个存储过程,只需要调用它并传入适当的参数: ```sql BEGIN SYNC_DATA_ACROSS_DB('DBLINK_NAME', 'SOURCE_TABLE_NAME', 'DESTINATION_TABLE_NAME'); END; ``` 其,DBLink的名称是你在源数据库创建的DBLink的名称,源表的名称是你想要同步的表的名称,目标表的名称是你想要将数据同步到的表的名称。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值