Sql server 将SQL Server数据库的架构与Oracle数据库相匹配

Sql server 将SQL Server数据库的架构与Oracle数据库相匹配,sql-server,oracle,database-schema,Sql Server,Oracle,Database Schema,是否有已知的产品可以在SQL Server和Oracle之间的任何级别上执行模式匹配(如上所述)?如果不是一个产品,是否会有一个文档化的方法来说明如何对数据库表、字段甚至数据进行语义搜索和比较 我有一个现有的SQL Server数据库,它目前在更新数据时遇到很多问题,因为它使用了大量未记录和无法读取的遗留代码来从各种外部数据源提取信息。幸运的是,存在一个Oracle数据库,根据业务的性质,该数据库似乎包含SQL Server DB所需的所有信息。问题是,这两个环境之间的模式大不相同。它们不遵循通

是否有已知的产品可以在SQL Server和Oracle之间的任何级别上执行模式匹配(如上所述)?如果不是一个产品,是否会有一个文档化的方法来说明如何对数据库表、字段甚至数据进行语义搜索和比较

我有一个现有的SQL Server数据库,它目前在更新数据时遇到很多问题,因为它使用了大量未记录和无法读取的遗留代码来从各种外部数据源提取信息。幸运的是,存在一个Oracle数据库,根据业务的性质,该数据库似乎包含SQL Server DB所需的所有信息。问题是,这两个环境之间的模式大不相同。它们不遵循通用的命名约定,甚至可能不遵循相同的规范化(有些表可能一个是平面的,另一个是规范化的)


考虑到两个数据库之间有数百个表,尝试遍历SQL Server中的每个表和列,然后在Oracle one上手动和可视化地搜索可能的匹配项的天真方法似乎是不切实际的。

有商业解决方案(即数据库比较套件、跨数据库工作室)在市场上,它可以用来比较同质和异构数据库环境。但是,只为模式比较而花钱购买这些工具不是一个好主意

可能有几种方法/工具/解决方案根据其范围具有一定的局限性。我给出了比较SQLServer和Oracle之间模式匹配的解决方案。匹配级别(如表内容和数据结构)取决于您的实现级别

在我的方法中,建议以下步骤来完全满足您的要求:

  • 建立SQL Server到Oracle数据库的链接服务器。回复跟踪中提到了这些步骤
  • 现在,直接从SQL Server环境本身访问SQL Server和Oracle表。使用以下方法比较表格数据是可行的:
  • SQL Server:

    select field1, field2, field_N from openquery(DEV, 'select * from oracle_owner_schema.testtable') 
    minus 
    select field1, field2, field_N from sqlserver_database.schema_name.testtable
    
    3您可以使用SQL Server和Oracle中的字典表以相同的方式比较数据结构(字段长度、数据类型、默认值等)


    建立SQL Server到Oracle数据库的链接服务器
  • 设置ODAC

  • 将缺少的DLL从instaclient复制到c:\oracle\product…\client\u 1\BIN[安装ODAC的位置。]

  • 在c:\oracle\product…\client\u 1\network\admin\tnsnames.ora中添加主机名、端口号和服务名称,示例:

    本地服务器=

    (说明=

    (ADDRESS_LIST =
    
      (ADDRESS = (PROTOCOL = TCP)(HOST = IP_Hostname_Oracle_Server)(PORT = 1521))
    
    )
    
    (CONNECT_DATA =
    
      (SERVICE_NAME = orcl)
    
    )
    
    )

  • SQL Server中的配置:

    a。连接到SQL server

    b。数据库>服务器对象>链接服务器>提供程序>OraOLEDB.Oracle>右侧

    c。单击>属性>“选中启用‘允许Inprocess’”,然后保存它

    d。数据库>服务器对象>链接服务器>右键单击>新建链接服务器>

    ****************常规选项卡***********************************

  • 链接服务器:MSSQL中链接服务器的任何名称

    Provide name: Oracle Provider
    
    Product Name: Oracle
    
    Datasource: Provide name which you have added in tnsnames.ora 
    
    
    ****************Security TAB***************************
    
    Choose "Be made using this security contest:"
    
        Remote login: username for remote database <<e.g. guest >>
    
        With password: password <<e.g. guest>>
    
    提供名称:Oracle提供程序
    产品名称:甲骨文
    数据源:提供您在tnsnames.ora中添加的名称
    ****************安全选项卡***************************
    选择“使用此安全竞赛制作:”
    远程登录:远程数据库的用户名
    密码:password
    
    如何使用: 从openquery中选择*(链接的_服务器_名称,'从模式_名称.表_名称中选择*); i、 e.从openquery中选择*(在MSSQL中为链接服务器选择任何名称,'从oracle中选择*。'

    注意:ODAC和oracle客户端的版本应该相同。

    我不确定这个想法是否对您有帮助,但使用Oracle SQL Developer V 3.0和4.0,您可以尝试比较数据库。我知道,使用该工具可以将SQL Server迁移到Oracle,如果您也可以比较数据库,那么值得一试。正如您所说的,因为两个数据库都是单独设计的,没有常识,不需要以任何方式共享数据。您必须逐表逐列地匹配它。您可以使用建模工具来帮助理解DBs。但这项工作并不容易。祝你好运:(