Sql server2000 到oracle 的数据库同步

合集下载

sqlserver到oracle数据无损迁移

sqlserver到oracle数据无损迁移

sqlserver到oracle数据无损迁移编者:liuli10@版本:V1.7最后修订日期:2015-11-21第一章简介1.1数据迁移随着时代发展数据越来越被重视,而很多时候,当系统需要更新换代的时候,升级后系统所是有的数据库与当前系统的数据库并不一致,此时不仅需要数据割接,最重要的是:如何能将老系统中的数据无损的割接到新系统、新数据库中。

因此,结合项目实战经验,针对从windows平台下数据库sqlserver到linux平台下oracle数据库的数据无损迁移进行总结。

1.2数据库简介一般此处会有很多数据库以及出品公司的历史以及发展历程,在编者看来然而并没有什么大用途,百度百科都可以搜索的到,因此本章结束,直接进入实战总结环节。

第二章sqlserver数据导出2.1sqlserver数据导出命令当然不可否认windows为sqlserver提供了强大的图形化平台,导出数据变得只需要点一点就能完成,然而这样的数据导出对于大批量有要求的操作,是极其劳神伤财的,因此,必须要通过命令行进行格式化导出,因此,这里介绍sqlserver 本机数据库导出命令。

2.1.1bcp命令以及参数介绍/liyanmingkong/article/details/6087674/uid-25472509-id-4304562.html/link?url=WV2JJM4JHxR7Qct8rr_-499zPc3aP_7E5rOt5l yEnG_Mj_tE9_-ZN1JPE2Vc2wRpkO8QkNGNLVznDfMgniCOnxXhK5jQppNpZk8 Jo1x8o23为了将文档尽可能精简,bcp命令的参数以及介绍请自行去以上任意网址查询。

或者自行baidu或者google搜索。

2.2实战语句解析实战语句为:bcp"select*from gwbnboss.dbo.ACCOUNT_BUSINESS"queryout "C:\Users\liuli9\Desktop\sqlserverdata_mov\textfile\ACCOUNT_BUSINESS.txt"-c -r"{#$&}"-t"{@#$}"-S"127.0.0.1"-U"数据库用户名"-P"密码"最终导出的结果存在于C:\Users\liuli9\Desktop\sqlserverdata_mov\textfile\ACCOUNT_BUSINESS.txt 文件中,当出现“{#$&}”时表示接下来是下一行数据,出现“{@#$}”时表示接下来是下一列数据。

将SQLSERVER中的数据同步到ORACLE中

将SQLSERVER中的数据同步到ORACLE中

如何将SQLServer2005中的数据同步到Oracle中有时由于项目开发的需要,必须将SQLServer2005中的某些表同步到Oracle数据库中,由其他其他系统来读取这些数据。

不同数据库类型之间的数据同步我们可以使用链接服务器和SQLAgent来实现。

假设我们这边(SQLServer2005)有一个合同管理系统,其中有表contract 和contract_project是需要同步到一个MIS系统中的(Oracle9i)那么,我们可以按照以下几步实现数据库的同步。

1.在Oracle中建立对应的contract 和contract_project表,需要同步哪些字段我们就建那些字段到O racle表中。

这里需要注意的是Oracle的数据类型和SQLServer的数据类型是不一样的,那么他们之间是什么样的关系拉?我们可以在SQLServer下运行:SELECT*FROM msdb.dbo.MSdatatype_mappingsSELECT*FROM msdb.dbo.sysdatatypemappings来查看SQLServer和其他数据库系统的数据类型对应关系。

第一个SQL语句是看SQL转Oracle的类型对应,而第二个表则更详细得显示了各个数据库系统的类型对应。

根据第一个表和我们的SQLServer中的字段类型我们就可以建立好Oracle表了。

ORACLE bigint NUMBER1931ORACLE binary BLOB NULL01ORACLE binary RAW-141ORACLE bit NUMBER131ORACLE char CHAR-141ORACLE char CLOB NULL01ORACLE char VARCHAR2-141ORACLE datetime DATE NULL01ORACLE decimal NUMBER-131ORACLE double precision FLOAT NULL01ORACLE float FLOAT NULL01ORACLE image BLOB NULL01ORACLE int NUMBER1031ORACLE money NUMBER1931ORACLE nchar NCHAR-141ORACLE nchar NCLOB NULL01ORACLE ntext NCLOB NULL01ORACLE numeric NUMBER-131ORACLE nvarchar NCLOB NULL01ORACLE nvarchar NVARCHAR2 -141ORACLE nvarchar(max) NCLOB NULL01ORACLE real REAL NULL01ORACLE smalldatetime DATE NULL01ORACLE smallint NUMBER531ORACLE smallmoney NUMBER1031ORACLE sysname NVARCHAR2 12841ORACLE text CLOB NULL01ORACLE timestamp RAW841ORACLE tinyint NUMBER331ORACLE uniqueidentifier CHAR3841ORACLE varbinary BLOB NULL01ORACLE varbinary RAW-141ORACLE varbinary(max) BLOB NULL01ORACLE varchar CLOB NULL01ORACLE varchar VARCHAR2-141ORACLE varchar(max) CLOB NULL01ORACLE xml NCLOB NULL01ORACLE bigint NUMBER1931ORACLE binary BLOB NULL01ORACLE binary RAW-141ORACLE bit NUMBER131ORACLE char CHAR-141ORACLE char CLOB NULL01ORACLE char VARCHAR2-141ORACLE datetime DATE NULL01ORACLE decimal NUMBER-131ORACLE double precision FLOAT NULL01ORACLE float FLOAT NULL01ORACLE image BLOB NULL01ORACLE int NUMBER1031ORACLE money NUMBER1931ORACLE nchar CHAR-141ORACLE nchar CLOB NULL01ORACLE ntext CLOB NULL01ORACLE numeric NUMBER-131ORACLE nvarchar CLOB NULL01ORACLE nvarchar VARCHAR2-141ORACLE nvarchar(max) CLOB NULL01ORACLE real REAL NULL01ORACLE smalldatetime DATE NULL01ORACLE smallint NUMBER531ORACLE smallmoney NUMBER1031ORACLE sysname VARCHAR212841ORACLE text CLOB NULL01ORACLE timestamp RAW841ORACLE tinyint NUMBER331ORACLE uniqueidentifier CHAR3841ORACLE varbinary BLOB NULL01ORACLE varbinary RAW-141ORACLE varbinary(max) BLOB NULL01ORACLE varchar CLOB NULL01ORACLE varchar VARCHAR2-141ORACLE varchar(max) CLOB NULL01ORACLE xml CLOB NULL01ORACLE bigint NUMBER1931ORACLE binary BLOB NULL01ORACLE binary RAW-141ORACLE bit NUMBER131ORACLE char CHAR-141ORACLE char CLOB NULL01ORACLE char VARCHAR2-141ORACLE datetime DATE NULL01ORACLE decimal NUMBER-131ORACLE double precision FLOAT NULL01ORACLE float FLOAT NULL01ORACLE image BLOB NULL01ORACLE int NUMBER1031ORACLE money NUMBER1931ORACLE nchar NCHAR-141ORACLE nchar NCLOB NULL01ORACLE ntext NCLOB NULL01ORACLE numeric NUMBER-131ORACLE nvarchar NCLOB NULL01ORACLE nvarchar NVARCHAR2 -141ORACLE nvarchar(max) NCLOB NULL01ORACLE real REAL NULL01ORACLE smalldatetime DATE NULL01ORACLE smallint NUMBER531ORACLE smallmoney NUMBER1031ORACLE sysname NVARCHAR2 12841ORACLE text CLOB NULL01ORACLE timestamp RAW841ORACLE tinyint NUMBER331ORACLE uniqueidentifier CHAR3841ORACLE varbinary BLOB NULL01ORACLE varbinary RAW-141ORACLE varbinary(max) BLOB NULL01ORACLE varchar CLOB NULL01ORACLE varchar VARCHAR2-141ORACLE varchar(max) CLOB NULL01ORACLE xml NCLOB NULL012.建立链接服务器。

SQLServer链接服务器至Oracle

SQLServer链接服务器至Oracle

SQLServer链接服务器至Oracle1. 我方服务器必须安装msdtc服务,并进行相应配置。

2. 我方服务器必须安装oracle client,这个要对应中心站oracle版本的客户端。

3. 我方服务器必须安装Oracle Services For Microsoft Transaction Server [版本]Oracle Provider for OLE DB [版本]这2个可以在Oracle官方网站下载[/technology/software/tech/windows/odpnet/index.html]此文件为分布式事务必须的插件。

4. Oracle给我们分配一个Oracle的用户名和密码,具有写入/读取表的权限。

5. 在我方系统的SQLServer服务器上建立链接服务器,指向Oracle数据库,链接服务器访问接口必须为[Oracle Provider for OLE DB](否则无法启动分布式事务)。

1. 在写存储过程向oracle数据库中 insert、delete、update的时候,一定要加上SET XACT_ABORT ON此为开启镶嵌事务标志,否则分布式事务会失败。

2. 对于从oracle或sqlserver中select数据的时候没有必要加入事务范围内,会锁表浪费时间。

3. 查询语句格式为:SELECT * FROM openquery(ORA_DBENSIS, 'select ID from TEST_TRANS')或者SELECT * FROM ORA_DATABASE..TEST_USER.TEST_TRANS用户名TEST_USER、表名TEST_TRANS必须大写4. 插入语句格式为:INSERT openquery(ORAENSIS, 'select ID from TEST_TRANS where 1=0')values (1)在SQL SERVER中访问ORACLE表的方法在SQL SERVER中,能否访问ORACLE表,进行查询操作呢?答案无疑是可以的,下面就为你介绍在SQL SERVER中访问ORACLE表的实现方法,供您参考。

sqlserver同步数据到oracle

sqlserver同步数据到oracle

如何将SQLServer2005中的数据同步到Oracle中有时由于项目开发的需要,必须将SQLServer2005中的某些表同步到Oracle数据库中,由其他其他系统来读取这些数据。

不同数据库类型之间的数据同步我们可以使用链接服务器和SQLAgent来实现。

假设我们这边(SQLServer2005)有一个合同管理系统,其中有表contract 和contract_project是需要同步到一个MIS系统中的(Oracle9i)那么,我们可以按照以下几步实现数据库的同步。

1.在Oracle中建立对应的contract 和 contract_project表,需要同步哪些字段我们就建那些字段到Oracle表中。

这里需要注意的是Oracle的数据类型和SQLServer的数据类型是不一样的,那么他们之间是什么样的关系拉?我们可以在SQLServer下运行:SELECT*FROM m sdb.dbo.MSdatatype_m appingsSELECT*FROM m sdb.dbo.sysdatatypem appings来查看SQLServer和其他数据库系统的数据类型对应关系。

第一个SQL语句是看SQL转Oracle的类型对应,而第二个表则更详细得显示了各个数据库系统的类型对应。

根据第一个表和我们的SQLServer中的字段类型我们就可以建立好Oracle表了。

2.建立链接服务器。

我们将Oracle系统作为SQLServer的链接服务器加入到SQLServer中。

具体做法参见我以前的文章/studyzy/archive/2006/12/08/690307.html3.使用SQL语句通过链接服务器将SQLServer数据写入Oracle中。

比如我们建立了链接服务器MIS,而Oracle中在MIS用户下面建立了表contract_project,那么我们的SQL语句就是:DELETE FROM MIS..MIS.CONTRACT_PROJECT--清空Oracle表中的数据INSERT into MIS..MIS.CONTRACT_PROJECT--将SQLServer中的数据写到Oracle中SELECT contract_id,project_code,actual_moneyFROM contract_project如果报告成功,那么我们的数据就已经写入到Oracle中了。

用Java实现SQL Server到Oracle数据迁移

用Java实现SQL Server到Oracle数据迁移

图1 New Gallery窗口7)在“创建数据库用户”窗口中输入用户名和口令参数,并选择默认表空间和临时表图3Manage Libraries 窗口•在“管理库”窗口中选择Libraries 标签。

图11 项目属性窗口图12 项目属性窗口⏹在Add Libraries窗口中找到前面设置的SQLServer JSBC 驱动程序库,单击图13Add Libraries窗口图14 添加Oracle JDBC驱动程序●在JDeveloper 10.1.3中写连接SQL Server的JDBC JAVA测试程序:System.out.println("Error Trace in getConnection() : " + e.getMessage());}return con;}private String getConnectionUrl(){returnurl+serverName+":"+portNumber+";databaseName="+databaseName+";selectMethod="+ selectMethod+";";}private void closeConnection(){try{if(con!=null)con.close();con=null;}catch(Exception e){e.printStackTrace();}}public void displayDbProperties(){java.sql.DatabaseMetaData dm = null;java.sql.ResultSet rs = null;try{con= this.getConnection();if(con!=null){dm = con.getMetaData();System.out.println("驱动器信息:");System.out.println("\t驱动器名字: "+ dm.getDriverName());System.out.println("\t驱动器版本: "+ dm.getDriverVersion ());System.out.println("\n数据库信息:");System.out.println("\t数据库名字: "+ dm.getDatabaseProductName());System.out.println("\t数据库版本: "+ dm.getDatabaseProductVersion());System.out.println("显示可用的数据库目录:");rs = dm.getCatalogs();while(rs.next()){System.out.println("\tcatalog: "+ rs.getString(1));}rs.close();rs = null;closeConnection();}else System.out.println("Error: No active Connection");}catch(Exception e){e.printStackTrace();}dm=null;}public static void main(String[] args) {SQLServerT est sQLServerT est = new SQLServerT est();sQLServerT est.displayDbProperties();}}编译运行,结果如下图15SQL Server JDBC连接测试程序运行结果public SQLT oOracleIV() {}private String getConnectionUrl(){returnurl+serverName+":"+portNumber+";databaseName="+databaseName+";selectMethod="+ selectMethod+";";}private java.sql.Connection getConnection(){try{// A. 注册SQL Server JDBC 驱动程序Class.forNam e("com.microsoft.jdbc.sqlserver.SQLServerDriver");// B. 创建新数据库连接con = java.sql.DriverManager.getConnection(getConnectionUrl(),userName,password);if(con!=null) System.out.println("SQL Server Connection Successful!");}catch(Exception e){e.printStackTrace();System.out.println("Error SQL Server Trace in getConnection() : " + e.getMessage());}return con;}private java.sql.Connection getOracleConnection(){try{// A. 注册Oracle JDBC 驱动程序Class.forNam e("oracle.jdbc.driver.OracleDriver");// B. 创建新数据库连接conn = java.sql.DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oract", "ct" ,"ct");if(conn!=null) System.out.println("Oracle Connection Successful!");}catch(Exception e){e.printStackTrace();System.out.println("Error Oracle Trace in getConnection() : " + e.getMessage());}return conn;}private void closeSQLServerConnection(){try{if(con!=null)con.close();con=null;}catch(Exception e){e.printStackTrace();}}private void closeOracleConnection(){try{if(conn!=null)conn.close();conn=null;}catch(Exception e){e.printStackTrace();}}public void displayDbProperties(){java.sql.DatabaseMetaData dm = null;String InsertStatem ent ="";try{con = this.getConnection();conn = this.getOracleConnection();if(con!=null && conn!=null){// C. 创建Statement 对象Statement stmt = con.createStatement();Statement stmtOracle = conn.createStatement();// D. 执行SELECT 命令,查询结果存放在ResultSet 对象中ResultSet rset = stmt.executeQuery("SELECT * FROM 入库单");// E. 取得ResultSet 结果集相关的信息ResultSetMetaData md = rset.getMetaData();// F. 取得ResultSet 对象中的字段数量int no_cols = md.getColumnCount();String[] col_names = new String[no_cols];// G. 取得ResultSet 对象中各字段名称for (int i = 0; i < no_cols; i++)col_names[i] = md.getColumnLabel(i+1);// H. 先打印出各字段名称for (int i = 0; i < no_cols; i++)System.out.print(col_names[i]+"\t");System.out.println("\n---------------------------------------");// I. 打印每笔数据列中各字段数据while (rset.next()) {for (int i = 1; i <= no_cols; i++)System.out.print(rset.getString(i) + "\t");System.out.println("");// J. 数据插入Oracle 中InsertStatement="INSERT INTOINPUTVOUCHER(InputVoucher_id,AccountSetCode,VoucherNumber," +"InputDate,ProviderCode,Operator,Checker,CarryForwardSign)" +" VALUES (" + rset.getString(1) + ",'" + rset.getString(2) +"','" + rset.getString(3) + "'," +"TO_DATE(SUBSTR('" + rset.getString(4) +"',1,19),'yyyy-mm-dd hh24:mi:ss'),'" + rset.getString(5) +"','" +rset.getString(6) + "','" + rset.getString(7) + "'," + rset.getString(8) + ")";System.out.print(InsertStatement+"\n");stmtOracle.executeUpdate(InsertStatement);}rset.close();rset = null;stmt.close();closeSQLServerConnection();closeOracleConnection();}else System.out.println("Error: No active Connection");}catch(Exception e){e.printStackTrace();}dm=null;// B. 创建新数据库连接conn = java.sql.DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oract", "ct" ,"ct");if(conn!=null) System.out.println("Oracle Connection Successful!");}catch(Exception e){e.printStackTrace();System.out.println("Error Oracle Trace in getConnection() : " + e.getMessage());}return conn;}private void closeSQLServerConnection(){try{if(con!=null)con.close();con=null;}catch(Exception e){e.printStackTrace();}}private void closeOracleConnection(){try{if(conn!=null)conn.close();conn=null;}catch(Exception e){e.printStackTrace();}}public void displayDbProperties(){java.sql.DatabaseMetaData dm = null;String InsertStatem ent ="";try{con = this.getConnection();conn = this.getOracleConnection();if(con!=null && conn!=null){// C. 创建Statement 对象Statement stmt = con.createStatement();Statement stmtOracle = conn.createStatement();// D. 执行SELECT 命令,查询结果存放在ResultSet 对象中ResultSet rset = stmt.executeQuery("SELECT * FROM 入库单明细");// E. 取得ResultSet 结果集相关的信息ResultSetMetaData md = rset.getMetaData();// F. 取得ResultSet 对象中的字段数量int no_cols = md.getColumnCount();String[] col_names = new String[no_cols];// G. 取得ResultSet 对象中各字段名称for (int i = 0; i < no_cols; i++)col_names[i] = md.getColumnLabel(i+1);// H. 先打印出各字段名称for (int i = 0; i < no_cols; i++)System.out.print(col_names[i]+"\t");System.out.println("\n---------------------------------------");// I. 打印每笔数据列中各字段数据while (rset.next()) {for (int i = 1; i <= no_cols; i++)System.out.print(rset.getString(i) + "\t");System.out.println("");// J. 数据插入Oracle 中InsertStatement="INSERT INTOINPUTVOUCHERDETAIL(InputVoucherDetail_id,InputVoucher_id,AccountSetCode," +"VoucherNumber,MerchCode,MerchName,Unit,Quantity,Price,Note,KeepBoo kSign, ReturnSign,CarryFforwardSign,Storage_id)" +" VALUES (" + rset.getString(1) + "," + rset.getString(2) + ",'" + rset.getString(3) + "','" +rset.getString(4) + "','" + rset.getString(5) + "','" +rset.getString(6) + "','" + rset.getString(7) + "'," +rset.getString(8) + "," + rset.getString(9) + ",'" +rset.getString(10) + "'," + rset.getString(11) + "," +rset.getString(12) + "," + rset.getString(13) + "," +rset.getString(14) + ")";System.out.print(InsertStatement+"\n");stmtOracle.executeUpdate(InsertStatement);}rset.close();rset = null;stmt.close();closeSQLServerConnection();closeOracleConnection();}else System.out.println("Error: No active Connection");}catch(Exception e){e.printStackTrace();}dm=null;}public static void main(String[] args) {SQLToOracleIVDetail sQLT oOracleIVDetail = new SQLToOracleIVDetail();sQLToOracleIVDetail.displayDbProperties();}}编译、执行,完成SQL Server表“入库单明细”到Oracle表“INPUTVOUCHERDETAIL”的数据迁移。

oracle到sqlserver的数据迁移方案__理论说明

oracle到sqlserver的数据迁移方案__理论说明

oracle到sqlserver的数据迁移方案理论说明1. 引言1.1 概述本文将详细介绍将Oracle数据库迁移到SQL Server数据库的方案,包括理论说明及具体操作步骤。

Oracle和SQL Server是目前企业常用的两种关系型数据库管理系统(DBMS),它们在应用场景、功能特性以及数据存储方式等方面存在一些差异。

因此,在进行数据库迁移时,需要仔细分析比较两种数据库系统,选择适合的迁移方案,并进行必要的数据准备工作。

1.2 文章结构本文共分为下述部分:引言部分提供对整篇文章内容的总览和概述;在数据迁移方案说明中,我们将就Oracle和SQL Server这两种数据库进行比较,并探讨选择适当迁移方案所需考虑的因素;接着,我们将详解实际的迁移过程,包括导出Oracle数据库数据、创建SQL Server数据库结构以及导入数据到SQL Server数据库;最后,在迁移后验证与优化部分,我们将讨论如何验证迁移后数据的一致性,并提供一些建议来优化SQL Server数据库的性能;最后得出结论。

1.3 目的本文旨在帮助读者了解Oracle到SQL Server的数据迁移过程,并提供相关理论和指导。

通过阅读本文,读者将能深入了解两种数据库系统的区别,掌握数据迁移的基本原理和方法,并具备迁移后验证与优化的能力。

无论是计划将现有Oracle数据库迁移到SQL Server,还是为新项目选择合适的数据库系统,本文都能提供有用的参考和指导。

2. 数据迁移方案说明:2.1 Oracle和SQL Server的比较:Oracle和SQL Server是两个广泛使用的关系型数据库管理系统。

虽然它们都有类似的功能,但在某些方面存在一些差异。

- 性能和可扩展性:Oracle被认为在大型企业级应用和高负载环境中具有更好的性能表现,而SQL Server则更适用于中小型企业或低负载环境。

- 成本:一般来说,使用Oracle可能需要更高的成本,包括购买许可证、维护费用等。

sqlserver迁移到oracle具体实现

sqlserver迁移到oracle具体实现

sqlserver迁移到oracle具体实现一、需求背景因系统业务发展需要,需要对各地数据进行集中管理,其中各地系统都是sqlserver2000数据库,数据大量集中,需要使用oracle数据库,因此涉及sqlserver数据迁移至oracle数据库的问题。

二、处理步骤处理步骤分为初始导出和增量交换两个操作步骤进行。

1 、其中初始导出设定一个时间截止时间将之前的业务数据利用数据库导出功能将数据导出,数据导出后由文件交换服务器传送的方式将初始导出数据导入到oracle数据库服务器中,然后通过SQLLOAD工具将数据导入。

2、增量交换在初始导出设定一个时间截止后开始启用,增量交换就是在初始导出完成后,将有变更的数据形成文件,由文件交换服务器传送,最终同步到oracle数据库服务器中,然后通过SQLLOAD工具将数据导入,与初始导出不同的是,这里要通过程序控制导出的增量数据和导出文件名。

三、初始导出1.业务数据业务数据初始导出将利用数据库导出功能将数据以文件的方式拷贝到oracle数据库服务器进行导入。

步骤:1)业务数据导成文件2)业务数据文件拷贝到oracle数据库服务器进行导入2.实现2.1.利用导出导入工具实现异构数据迁移1)sqlserver初始数据利用bcp工具导成csv格式文件--sqlserver数据导成文件--预先创建导出表格式文件:exec master..xp_cmdshell 'bcp master.dbo.sysusers format nul -T -c -f "c:\students.fmt"'--根据格式文件导出表数据(可以导成txt或csv文件格式)修改格式文件,用逗号分隔符declare @sql varchar(8000)set @sql='bcp "SELECT * FROM master..sysusers" queryout "c:\aa.csv" /f "c:\students.fmt"' exec master..xp_cmdshell @sql2)通过sqlload工具将初始数据导入oracle数据库服务器--sqlload直接导入命令示例result.csv文件内容1,默认 Web 站点,192.168.2.254:80:,RUNNING2,other,192.168.2.254:80:,STOPPED3,third,192.168.2.254:81:,RUNNINGresult.ctl文件内容:load datainfile 'c:\result.csv'into table resultxt(resultid char terminated by ',',website char terminated by ',',ipport char terminated by ',',status char terminated by whitespace)创建表:create table resultxt(resultid varchar2(500),website varchar2(500),ipport varchar2(500),status varchar2(500))/执行文件导入命令sqlldr hr/hr@orcl c:\result.ctl log=c:\resulthis.out四、增量交换1.业务数据业务数据增量交换将利用数据库导出功能将数据以文件的方式拷贝到oracle 数据库服务器进行导入。

SQLServer到Oracle的数据迁移

SQLServer到Oracle的数据迁移

《高级数据库应用》课程项目报告《数据库迁移》姓名:组员:班级学号:指导教师:完成报告时间:数据库迁移1.实验环境:硬件环境:⏹Intel(R) Core(TM)2 Duo CPU P4200 2.13GHz⏹ 2.00GHz 2.00GB 内存软件环境:⏹windowsXP Professional sp3⏹oracle 9i⏹SQL server 2005⏹Oracle SQL Developer2.前提:是要在oracle中建立一个和SQL Server中名字一样的数据库,并创建新的用户名和密码3迁移过程:(1)一般情况:只迁移表,而不是存储过程、函数等,可以使用SQL Server 2005自带的导入导出工具。

1)迁移方法:右键单击SQL Server中你要导出的数据库--》任务--》导出数据--》下一步--》添好各选项(SQL Server数据源的)下一步--》数据源等默认——》下一步,目标选择Microsoft OLE DB Provider for Oracle,属性中填入你要导入的oracle数据库的名字,用户名,密码------>下一步------>选中全部表,下一步------>下一步------>下一步. 将会将表结构和表中的数据一同导入到oracle中去。

2)实例:将SQL Server数据库aaa导出到Oracle中<1>首先在Oracle中创建数据库aaa.:图(1):在Oracle中创建数据库aaa.<2>下一步:选择创建数据库:图(2):选择创建数据库<3>创建数据库名称aaa:图(3)创建数据库名称aaa<4>右键单击SQL Server中的aaa数据库,选择任务,导出数据:图(4)从SQL的aaa数据库中导出数据<5>运行数据库导出向导:<6>选择目标Microsoft OLE DB Provider for Oracle:<7>数据库连接属性:图(7)输入连接属性图(8)选择要迁移的内容<8>选择要复制的表或者视图:<9>是否保存SSIS包:<10>完成该向导:<11>执行成功:<12>具体表的迁移:图(14)具体表的迁移,已经完成奖惩信息表的迁移。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Sql server2000 到oracle 的数据库同步(快照形式)(部分质料收集自网页,测试成功)
利用sql server的复制技术和oracle的odbc数据源我们可以实现数据库的同步,下面是一个从sql server到oracle数据同步的单向实现。

首先安装sql server2000数据库和oracle10g数据库,在一般情况下数据库建好以后,在企业管理器里看到的sql注册是(local)(windows NT)
Sql server复制技术不支持昵称,例如使用“(local)”作为服务器名。

因此我们需要这个服务的sql server注册,创建新的服务器就行注册。

步骤一:
先删除这个名为local的sql server注册,然后右击sql server组,新建sql server注册---》下一步,在可用的服务器的文本框会自动显示你的计算机名称我这是qb(在这里也可以在客户端网络使用工具失眠配置计算机的别名也可以实现这一步),点击添加,添加到“添加的服务器里”--一直下一步就好了。

步骤二:
在要发布的数据库里面创建要发布的测试表。

单击刚刚以计算机名建好的sql server 注册,以选中它--》工具--》复制--》配置发布、订阅服务器和分发---》一直下一步到选择快照文件夹路径“\\qb\c$\Program Files\Microsoft SQL Server\MSSQL\ReplData”使用特殊的共享名称,该名称通常只能由在计算机“SEOGIRL”上有管理权限的登录访问。

此共享可能不能由在其它计算机上运行的代理程序访问,例如请求订阅的代理程序。

点击下一步到有提示确实要使用此快照文件夹路径吗?这一步要选择否;我们需要手动建一个问价夹:例如在C盘根目录下:建一个c:\ReplData,在这个文件夹的属性里设置“共享此文件夹”,然后返回咱们刚才的“快照文件夹”,在里边选择刚建的文件夹目录--》下一步--》下一步--》完成--》关闭
步骤三:配置发布和分发服务器和订阅服务器:
点击‘数据库’然后在菜单里面选择---工具----复制----》配置发布和分发服务器和订阅服务器,在这之前我们要配置oracle数据源。

首先我们要在oracle的net congigure assistant里面配置连接,
选择第三项下一步:
服务器名称就是你的oracle数据接口名称---下一步—》主机名就选你要连接的oracle 的主机地址,要是本机的话就是loaclhost,要是吉他主机的话直接输入ip就可以了。

然后一直下一步完成;接下来在控制面板里面---选择管理工具---数据源(odbc)选择系统dns:
点击添加:
选择mircosoft odbc for oracle确定后就是输入相关你的oracle数据库的信息:
输入相关信息
然后确定;关闭
返回到:sql server-工具----复制----》配置发布和分发服务器和订阅服务器,
选择发布服务器---》新建
输入你的发布服务器名称就是一开始新建的那个服务器注册名----》点击使用windows身份验证----》确定
接下点击发布数据库选择要发布的数据库
接下来点击订阅服务器----》点击新建---》点击ole db数据源—确定---》点击添加
在第一个文本框输入你的oracle连接数据库名称
服务器类型选择其他数据库---》选择mircosofe ole db provider oracle,产品名称可以不输入,数据库源就是我们刚刚配置的那个
提供程序字符串要按照:UID=username;PWD=password输入就可以点击确定。

接下来选择工具---》复制—》创建和管理发布---》选择要发布的数据库点击创建发布—》
一直点击到
我在这用的是快照发布---点击下一步—》
我们要用oeacle来订阅所以选择第三项:
下一步选择要发布的数据库表:然后一直点击到完成;
步骤四:
在发布内容里面的发布项里面点击右键选择强制订阅项:
下一步:
选择启动的oracle订阅服务器:
下一步一直点击到完成这样就创建了oracle对sqlserver相关表的订阅:
步骤5:
在发布内容项里面点击右键:属性:选择状态:点击代理程序属性—》-选择调度—》编辑—》更改—》选择同步代理程序的发生周期我这选的是1分钟,也就是每隔一分钟代理程序就会启
动来同步sqlsever发布的表的数据到oracle数据库里面;如果成功的话你会在你的oracle数据库里面发现一面已经多了一张你在sqlserver里面建立的测试表;数据也一致,有兴趣的可以研究下。

当然我么在使用的时候可以选择增量的方式来建立这种同步事务,这样在源数据没有事务发生的情况下,代理程序就不会启动,就会处于空闲状态,当源数据有事务发生,比如添加或删除一条记录,这个发布服务器就会启动代理程序来同步这种事务到目标数据库里面。

这应该是比较理想的做法。

相关文档
最新文档