oracle link sql

最近天天从SQLSERVER倒数据,妈的手工一天才导出几个表, 并且还十分郁闷。

那么我就带给大家一个好的方法; 使用透明网关来实现数据异构数据库的导出。

环境 WIN7 ORACLE 11G R2  SQLSERVER2008
;因为我的WIN7 是64位 ODBC与其他数据库连接稍有点问题,但是话费了一个晚上加1白天的时间还是把问题解决;
步骤

一、  ORACEL 11G R2 和SQLSERVER已经安装好了;

安装11G GATEWAY 这个需要去官方下载。
安装后11G 有时候会安装在$ORACLE_HOME中的 有时候会在HOME上新建一个tg_1的文件夹存放这些东西, 其实无所谓了。
二 、安装后,需配置3个文件。

1  dg4msql目录下的 \admin\inittest.ora 这个文件是拷贝他D:\oracle\product\11.2.0\dbhome_2\dg4msql\admin\initdg4msql.ora

2 修改你新建的inittest.ora  
HS_FDS_CONNECT_INFO="192.168.175.238;database=test"

        HS_FDS_TRACE_LEVEL=OFF

        HS_FDS_RECOVERY_ACCOUNT=RECOVER

 HS_FDS_RECOVERY_PWD=RECOVER.

    注意:若是SQLSERVER中有命名的实例 那么11G的写法如下:
HS_FDS_CONNECT_INFO="[192.168.175.115]\\sql2008;database=BStyle_Business_0413"
HS_FDS_TRACE_LEVEL=OFF
_FDS_RECOVERY_ACCOUNT=RECOVER

HS_FDS_RECOVERY_PWD=RECOVER

在LISTENER中增加
(SID_DESC=
      (SID_NAME=test)
 (ORACLE_HOME=D:\oracle\product\11.2.0\dbhome_2)
(PROGRAM=dg4msql)
配置TNSNAME.ORA1
test =

  (DESCRIPTION =

    (ADDRESS_LIST =
 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.175.238)(PORT = 1521))
)
 (CONNECT_DATA =
(SERVICE_NAME =test)

    )
三 连接数据库创建DBLINK   ----KENAN 和IDENTIFIED BY 为MSSQL的账号和密码

CREATE PUBLIC DATABASE LINK MSLINK  

CONNECT TO "KENAN" IDENTIFIED BY  “***”

USING 'TEST'

OK  
就开始测试了
其他事项   
1、即使SQL   SERVER是设置为大小写不敏感的,但oracle通过TG4MSQL访问SQL    SERVER时,还是会按SQL   SERVER系统表中登记的对象名来判断对象是否存在,因此,如果在SQL   SERVER中按create    table   t_test(c1   int,   ...)来创建的表,那么在oracle中想查找c1为10的记录就必须写为  select   *   from   t_test@DBLINKNAME   where   "c1"=10;   
  2、按oracle配置手册上说可以在oracle中直接执行SQL    SERVER的存储过程,但如果存储过程的拥有者不是DBLINK所设置的用户,那么直接执行存储过程会报“表或视图不存在”。解决的办法是通过  dbms_hs_passthrough.execute_immediate来执行存储过程。   
  3、在oracle中通过网关访问SQL   SERVER后,一定要提交事务。包括执行select。   
  4、如果是通过网关同步数据,最好是先将要同步的数据全插入SQL   SERVER的中间表,然后在SQL    SERVER中执行存储过程来判断哪些是要修改哪些是要新插入。这样做效率很高。否则通过网关来比较两边的数据会很慢。而且要控制不要频繁提交。   
 5、如果MS SQL SERVER数据库设置自增值列的话,用insert into test@dblinkname() values()时会出错,无法成功。应尽量避免这种方式操作。解决的办法是通过 dbms_hs_passthrough.execute_immediate来执行存储过程。
 6、如果ORACLE与MS SQL SERVER 要启用分布式事务更新数据,必须在MS SQL SERVER中要访问的数据库中创建一张创建表的脚本:
DROP TABLE HS_TRANSACTION_LOG
go

CREATE TABLE HS_TRANSACTION_LOG(

  GLOBAL_TRAN_ID char (64) NOT NULL,
TRAN_COMMENT char (255) NULL

)
go
grant all on HS_TRANSACTION_LOG to public
在$(oraclehome)\ora92\tg4msql\admin\tg4msql_tx.sql。
2 O* }& s0 D8 u9 {* d- a/ s3 o" X而且连接SQL SERVER的用户要读写权限。

还有 若是使用透明网关进行导数据 那么最好
alter database flashback on/off
然后再alter system set db_recovery_file_dest='';
今天我在导出数据的时候遇到了闪回去慢  造成脚本无法继续进行

你可能感兴趣的:(oracle link sql)