您的位置:程序门 -> ms-sql server -> 应用实例



sql 2000导入oracle 9i


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


sql 2000导入oracle 9i
发表于:2007-12-24 15:51:31 楼主
要把一个sql   2000的数据库导入到oracle   9i中,我用dts导入,但是主键无法导入,而且我得sql有些表的id是自增长的,还要重做触发器,还有一些字段问题无法解决。sql中ntext到oracle中自动变为long类型,但是有些大数据无法显示,手工改成blob还是不行。请教各位如何导入,有没有什么工具之类的,谢谢了!!
发表于:2007-12-24 15:53:241楼 得分:0
这些东西没办法解决,只能是把数据导进去后,再重新建立.
发表于:2007-12-24 15:55:522楼 得分:0
如何把ms   sql   server2000数据库移植到oracle9i

第一章   数据迁移基础
在信息共享日益普遍的情况下,各行各业都在进行着企业信息化建设,为了节约信息建设的费用,大都从现有的系统进行扩充或升级,erp之路任重而道远,一般情况下,企业往往有大量的重要数据要迁移到新系统中去。
数据迁移是一项繁锁而又单调的工作,面对各种各样的基础数据,定制开发数据迁移工具往往费时费力,切不通用,那么到底什么工具能够胜任我们的工作呢?ms   dts可以将各种各样的数据源导入到各种各样的数据库,易学易用,在异构数据转换过程中,lob(txtt、image)字段的转换是容易失败的地方。
 
图1.1   字段合并
ms   dts在数据转换方面简单易学,功能强大,不仅可以使用vbscript与jscript脚本进行数据合并、分解、转换、汇总,还可以用package的方式将转换过程存储在服务器上,通过代理服务多次/定时/调度地执行。
 
图1.2   异构数据
 
图1.3   脚本编写
msdts承袭了ms的易学易用的优良传统,对使用者的要求很低,经过短时间培训,一般文员都可以使用ms   dts导入导出数据啦。
 
图1.4   调度计划
第二章   异构数据迁移
很多时间,要在异构数据库之间进行数据迁移或抽取,如果在ms   sql   server中提取oracle的数据,可以通过odbc、oledb等多种方式,要从oracle提取sql中的数据,大都是通过透明网关来实现的。
在异构数据抽取过程中,最好采用sql92标准的语法编写sql代码,同时要注意不同数据库之间数据类型的转换关系,如oracle的日期类型用date、ms   sqlserver的日期类型用datetime等。在excel导入到ms   sqlserver或oracle时,还要注意数字串的字段往往被目的数据库隐式转换成数字型的字段。

一   关于oracle的透明网关配置(for   ms   sql   server)
oracle安装时(9i),将transparent   gateway   for   mssql选中,在oracle主目录\bin中,有个tg4msql.exe程序,它就是透明网关程序,同时在主目录中还有tgrmsql的这个目录,oracle_home$\tg4msql\admin目录中的inittg4msql.ora文件,必须手工进行配置才能在oracle中连接ms   sql   server。
 
图2.1   tg4msql  
1   如何配置透明网关呢?打开inittg4msql.ora:
#
#   hs   init   parameters
#   xzh代表ms   sqlserver服务名,pubs代表要访问的ms   sqlserver数据库
#
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   =mysql)  
              (program   =   tg4msql)  
              (sid_name   =   mysql)
              (oracle_home   =   d:\oracle\ora92)
        )
    )
加亮部分代码是要在监听文件中手工添加,global_dbname、sid_name可以任意指定,progrm必须指向tg4msql   如图2.1所示。
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   =mysql)
        )
        (hs   =   ok)
    )
上例中ms   sql   server的本地服务名指定为tg4msql,可以任意写,sid必须是listiner.ora中指定的那个sid_name,port也必须是监听中指定的port,主机等都要符合一致。到此为止,我们把透明网关大致已经配置好啦,如果要访问ms   sql   server数据库,还要在oracle中创建数据库链才行。
4   在ms   sqlserver中创建登录帐号xzh口令xzh,授权使之可以访问pubs数据库。
sql> create     database     link     from_sql     connect   to   xzh   identified   by   xzh   using   ‘tg4msql'
using   ‘tg4msql'中的   ‘tg4msql'是tnsnames.ora中配置好的指定ms   sql   server服务器的可以被oracle访问的本地服务名,from_sql是我们以后要引用的数据库链名,切记ms   sql   server中的登录帐号(xzh/xzh)必须符合oracle的帐号规范,如果用(xzh/0000)就会在创建数据库链路时失败。
sql> select   *   from   sales@from_sql
如果有数据返回,表示我们访问sql数据库的通道已经建成,请大胆使用吧,但对远程异构数据库不充许进行ddl操作。
sql> create   table   all_users@tg4msql   from   all_users;
error   位于第   1   行:
ora-02021:   不允许对远程数据库进行   ddl   操作
二   ms   sql   server访问oracle的方法
1   通过行集函数opendatasource
    select     *     from   opendatasource(   'msdaora',
        'data   source=xzh.oracle;user   id=pos;password=pos')..pos.a0325
msdaora是oledb   for   oracle的驱动,初始化字符串中必须提供要访问的oracle本地服务名、用户名、口令。然后引用表中数据时要以服务器..用户名.表名的格式。注意一定是四部分组成,用户名与表名一定要大写,服务器与用户名之间是两个点号。
select   *   into   pubs.dbo.a0325   from  
opendatasource(   'msdaora',
                  'data   source=uite;user   id=pos;password=pos'   )..pos.a0325
说明:将oracle服务器uite中pos模式的a0325导入到ms   sqlserver的pubs数据库,注意a0325在这条语气执行时被创建,如果a0325已经存在pubs数据库中,可以使用insert   into的语法导入数据
insert   into   pubs.dbo.a0325   from  
opendatasource(   'msdaora',
                  'data   source=uite;user   id=pos;password=pos'   )..pos.a0325
  2   通过ms   sqlserver的链接服务器访问oracle的数据
      --在查询分析器中查看已经存在的链接服务器
      select*from   sysservers
      --添加链接服务器orcl到ms   sql   server,也可以在企业管理器中创建
      EXEC   sp_addlinkedserver
      @server   =   'orcl',                                         --orcl是sql中链接服务器名称
      @srvproduct   =   'oracle',        --oracle                 固定的            
      @provider   =   'msdaora',                           --msdaora       固定的
      @datasrc   =   'uite'                                         --datasrc             本地服务名
     
      EXEC   sp_dropserver   ‘orcl'               --删除链接服务器
     
在这里声明一下,如果现在就访问oracle肯定不能,因为没有提供登录oracle的用户名/口令
EXEC   sp_addlinkedsrvlogin   'orcl',   false,   'sa',   'pos',   'pos'
sa是ms   sqlserver的登录帐号,pos/pos是oracle的登录帐号。
select   *   from   orcl..pos.a0325
from后面必须是四部分组成。为什么执行后报错呢,本人一直在寻找解决办法,最后发现通过t-sql语句没法解决,只有打开ms   sqlserver的企业管理器。
 
图2.2   配置oracle的远程帐号
 
图2.3设置远程登录帐号
select   *   from   orcl..pos.a0325      
通过图2.2、2.3以后,在查询分析器执行时,立即从oracle的orcl服务器上pos模式的a0325表中查到数据,注意在图2.3步操作过程中,必须在安全性页面选中“用此安全上下文进行”的复选项,然后在“远程登录/使用密码”所对应的文本中输入orcl服务器上有登录权限的帐号。
select   *   from   openquery(orcl,   'select   *   from   pos.a0325')
3   使用ms   sql   server的openrowset函数
select   a.*
from   openrowset('msdaora',
      'uite';'pos';'pos',   pos.a0325)   as   a   order   by   a.id
说明:有些地方使用行集函数要用别名才能引用,请大家注意。
4使用odbc的方式
select   a.*
from   openrowset('msdasql','orcl_odbc';'pos';'pos',
      pos.a0325)   as     a     order   by   a.id
说明:orcl_odbc是访问oracle   服务器uite的odbc数据源,以上所有代码在sql   query   analyze   中通过。关于ms   sql   server访问oracle有四种方式,其中通过odbc与链接服务器的方式做起来难度较大,对于初学者会复杂一些,使用ole   db   for   oracle的驱动时,有opendatasource与openrowset函数可以使用,都很方便,笔记喜欢使用后者,交待一下,在数据存取方面,ole   db效率较odbc为佳。


快速检索

最新资讯
热门点击