Oracle 跨库 查询 复制表数据 分布式查询介绍
方法一:
在目前绝大部分数据库有分布式查询的需要。下面简单的介绍如何在oracle中配置实现跨库访问。
比如现在有2个数据库服务器,安装了2个数据库。数据库server a和b。现在来实现在a库中访问b的数据库。
第一步、配置a服务器端的tnsnames.ora文件(tnsnames.ora network configuration file),该文件存放的位置为:
$oracle_home/network/admin/tnsnames.ora
添加如下行,其中dblink为连接名(可自定义),host和port为数据库侦听的ip及端口,service_name为数据库的sid,
mediadblink =
(description =
(address_list =
(address = (protocol = tcp)(host = 10.0.0.1)(port = 1521))
)
(connect_data =
(service_name = db)
)
)
第二步、在a服务器的一个库中建立b的一个数据的dblink。
语法如下:
执行如下查询语句,其中mediadb为database link名(可自定义),mediadblink为先前在tnsnames.ora中定义的连接名,
dbuser为用户名,password为密码
-- create database link
create database link mediadb
connect to dbuser identified by password
using 'mediadblink';
第三步.使用链接的数据库
3.1 查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名@database link名”,如
select * from table_name@mediadb ;
3.2 也可以为这个表创建一个同义词
create synonym aaa for table_name@mediadb ;
如下语句的效果和3.1中的一样
select * from aaa;
删除同义词的语句为
drop synonym aaa;
select * from tabname@dcmdb where 1=1;
方法二:
首先创建数据库链接:
create public database link 数据链名称 connect to 登陆用户名 identified by 密码 using '(description =
(address_list =
(address = (protocol = tcp)(host = 对方oracle服务器的ip地址)(port = 端口号))
)
(connect_data =
(service_name = 对方oracle服务器服务名)
)
)'
其中 数据链名称 为添加到本地oracle数据库控制台(oracle enterprise manager console)树节点的服务名
要查询对方数据库的表tablename语句如下:
select 字段名 from tablename@数据链名称;
复制表数据:
insert into 表名(字段名) (select 字段名 from tablename@数据链名称);
查看dblink:
select owner, db_link from dba_db_links;
删除:
drop database link dblink名称
drop public database link dblink名称
oracle密码的问题:
sql> create user aaa identified by 1;
create user aaa identified by 1
*
error 位于第 1 行:
ora-00988: 缺少或无效口令
sql> create user aaa identified by"1";
用户已创建
上一篇: Oracle中查看引起Session阻塞的2个脚本分享
下一篇: Oracle中手动删除数据库教程