欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Oracle 跨库 查询 复制表数据 分布式查询介绍

程序员文章站 2022-05-18 23:47:04
方法一: 在目前绝大部分数据库有分布式查询的需要。下面简单的介绍如何在oracle中配置实现跨库访问。 比如现在有2个数据库服务器,安装了2个数据库。数据库server...

方法一:

在目前绝大部分数据库有分布式查询的需要。下面简单的介绍如何在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";

用户已创建