我没有怎么接触过oracle,甚至都不知道oracle的表在哪里,触发器在哪里。但我现在需要实现以下的功能,希望各位多多帮忙。我需要让sql server数据库中的两个表和另外一台服务器(比如为100.100.100.2)上的oracle数据库中的两个表实现内容同步,当然它们的字段都是一样的。我想是不是可以在oracle数据库那里写一个触发器?比如这两个表在两种数据库中都叫list1、list2,list1的字段为ID、aa、bb三个字段,list2的字段为ID、cc、dd三个字段,那么请教大家这个触发器应该怎么写呢?如果写好了,我放到oracle里麻烦吗?谢谢各位!!
对于我这样一个oracle盲来说似乎有点难了:(请教各位大虾,还有别的办法吗??
oracle还真是麻烦啊!
一共有三种方法:1、 透明网关(Transparent Gateways)
2、 通用连接(Generic Connectivity)之ODBC连接
3、 通用连接(Generic Connectivity)之OLE DB连接
现在利用第二种方法使Oracle与SQL Server直连。1. 安装HS部件。 缺省情况下,HS服务是和Oracle 8.1.7一起安装的,你可以查询SYS用户下是否存在HS_BASE_CAPS视图,以确认HS部件是否安装,如果没有可以用相关的安装盘进行安装。 2. 配置ODBC系统连接字。 在控制面板选择“Data Sources (ODBC)”,在“系统DNS”内配置ODBC for SQL Server连接(DNS名称 eg:111)
3. 配置tnsnames.ora,它位于ORACLE_HOME\NETWORK\ADMIN。 在这个文件中增加如下代码: hgdb(要访问的SQL SERSER 的数据库名) = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTNAME(本机IP也可))(PORT = 1521))) (CONNECT_DATA = (SID = hgdb) (要访问的SQL SERSER 的数据库名,要和Listener里配置的sid相同) (HS=OK) (打开HS服务选项 )
4. 配置listener.ora,它位于ORACLE_HOME\NETWORK\ADMIN。 在这个文件中增加如下代码: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = hgdb) (要访问的SQL SERSER 的数据库名,与tnsname名称相对应 )(ORACLE_HOME = C:\oracle\ora90) (PROGRAM = hsodbc)(要使用的HS服务程序,如果使用OLE DB,程序名为hsole )
5. 重新启动Oracle listener。 6. 新增位于ORACLE_HOME\HS\ADMIN内文件,这里是inithgdb。 两行代码: HS_FDS_CONNECT_INFO = 111(ODBC 中DNS名称) HS_FDS_TRACE_LEVEL = 0 7, 设置数据库参数global_names=false。设置global_names=false不要求建立的数据库链接和目的数据库的全局名称一致。
global_names=true则要求, 多少有些不方便。oracle9i和oracle8i都可以在DBA用户下用SQL命令改变global_names参数alter system set global_names=false;
8. 用管理员用户登录SQL PLUS,创建DATABASE LINK。 create database link hgdb connect to sa identified by sa using ‘hgdb’;
9. 测试连接。如: SQL> select * from rolldown@hgdb;
到此我们已经完成了使用ODBC连接SQL SERVER的配置工作。现在,就需要你在ORACLE中的表上写一个触发器,当ORACLE表中数据改变时触发SQLSERVER中的表,我想这个你应该自己会写吧,要不你怎么会SQLSERVER呢?呵呵!
通过job进行同步在SQL server中通过addlinkedserver 建立连接表
EXEC sp_addlinkedserver
'oradb',
'Oracle',
'MSDAORA',
'用于 Oracle 数据库的 SQL*Net 别名'exec sp_addlinkedsrvlogin 'oradb','false',null,'oracleUser','oraclePassWord'
select * from oracledb..oracleuser.tablename --注意大小写
其实楼主是想要oracle保持和sqlserver同步,sqlserver是楼主要操作的数据库,触发器就应该建在sqlserver上,问题应该是如何从sqlserver连接oracle数据库。
--------------------------------------------------------------------------这位同志理解错误啊,我的意思上要sqlserver和oracle保持同步,所以触发器应该在oracle上才对吧!
----------------------------------------------------------------------------
请问大侠,如果是这样的话,我从sql server里调用oracle的存储过程是不是设置也很复杂的阿??