Oracle与SQL Server之间的数据迁移
很多时间,要在异构数据库之间进行数据迁移或抽取,如果在SQL中提取ORACLE的数据,可以通过ODBC、OLEDB等多种方式,要从ORACLE提取SQL中的数据,大都是通过透明网关来实现的。
在异构数据抽取过程中,最好采用SQL92标准的语法编写SQL代码,同时要注意不同数据库之间数据类型的转换关系,如ORACLE的日期类型用DATE、SQL用Datetime等。
一 关于ORACLE的透明网关配置
ORACLE安装时(9i),将TRANSPARENT GATEWAY FOR MSSQL选中,在ORACLE主目录\BIN中,有个tg4msql.exe程序,它是透明网关程序啦,同时在主目录中还有tgrmsql的一个目录,ORACLE_HOME\tg4msql\admin目录中的inittg4msql.ora就是需要进行配置才能在ORACLE中连接SQL。
1 如何配置透明网关呢?打开inittg4msql.ora:
# HS init parameters
xzh代表SQL服务名,pubs代表要访问的SQL数据库。
HS_FDS_CONNECT_INFO="SERVER=xzh;DATABASE=pubs" HS_FDS_TRACE_LEVEL=OFF HS_FDS_RECOVERY_ACCOUNT=RECOVER HS_FDS_RECOVERY_PWD=RECOVER
2 监听的配置oracle_home\network\admin\Listiner.ora
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = xzh)(PORT = 1521)) ) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = xzh)(PORT = 1527)) ) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = xzh.world) (ORACLE_HOME = D:\oracle\ora92) (SID_NAME = xzh) ) (SID_DESC = (GLOBAL_DBNAME = tg4msql) (PROGRAM = tg4msql) (SID_NAME = tg4msql) (ORACLE_HOME = D:\oracle\ora92) ) )
加亮代码是要在监听文件中新加部分,GLOBAL_DBNAME、SID_NAME可以任意,PROGRM必须指向tg4msql。
3 本地服务文件的配置oracle_home\network\admin\TnsNames.ora
XZH = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = xzh)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = xzh.world) ) ) TG4MSQL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = xzh)(PORT = 1527)) ) (CONNECT_DATA = (SID = tg4msql) ) (HS = OK) )