sqlserver到oracle数据无损迁移
SqlServer2005移植到Oracle
从SQL server 2005中移植数据到Oracle 10g1.移植前准备在移植前,需要安装必需的各种软件,如下:(1).安装好SQL server 2005的补丁包和SP2。
(2).安装Oracle安装包里的oracle客户端浏览器(PL/SQL Developer)。
(可以根据需要按照汉化补丁,汉化包不安装也可)(3).硬件要求:在Oracle数据库所在的硬盘保持足够剩余空间(至少有2GB的空间剩余);建议在启用Oracle服务时机器的内存不少于2GB。
没有特别说明的情况下,本文的数据移植是针对普通的属性数据。
2.移植2.1.创建数据库打开Oracle中的Database Configuration Assistant进行数据库的创建,如图所示:图表1 打开Database Configuration Assistant进入Database Configuration Assistant后点击“下一步”,然后出现如图表2所示的界面,选择“创建数据库”后点击“下一步”:如图表3所示选择第一个“一般用途”然后点击下一步:图表3 选择模板如图标2所示在创建数据库过程中的第3步,在“全局数据库名”中输入数据库名称,SID则会自动默认为全局数据库名,然后点击“下一步”;点击如图表5所示界面中的“确定”按钮系统就开始创建数据库了。
图表5图表6 正在传教数据库最后点击如图表4所示中的“退出”按钮就创建数据库完成了。
图表7 创建数据库完成2.2.登录Oracle打开PL/SQL Developer并用system(数据库默认的用户名)用户身份登录到XQ2DSGN并选择连接为SYSDBA,如图所示:图表8 登录到PLSQL2.2.1.创建表空间创建表空间的sql语句:SQL>create tablespace xq2dsgn datafile 'G:\oracle\product\10.2.0\ oradata\xq2dsgn\xq2dsgn.dbf' size 2048m autoextend on next 10m maxsize unlimited ;(参考:通过PL/SQL Developer登录到Oracle数据库上后,打开菜单:文件/新建/命令窗口,打开一个命令窗口然后在该命令窗口中执行脚本创建和删除表空间,新建用户和授权的操作,如图所示:图表9 打开命令窗口创建表空间Sql>create tablespace xqds2gn datafile ' D:\oradata\xq2dsgn\ xq2dsgn.dbf ' size 200m autoextend on next 10m maxsize unlimited;Sql>alter database datafile ' D:\oradata\xq2dsgn\ xq2dsgn.dbf ' autoexte nd on;1 DATAFILE: 表空间数据文件存放路径2 SIZE: 起初设置为200M3 UNIFORM: 指定区尺寸为128k,如不指定,区尺寸默认为64k4 空间名称xq2dsgn 与数据文件名称xq2dsgn.dbf 不要求相同,可随意命名.5 AUTOEXTEND ON/OFF表示启动/停止自动扩展表空间6alter database datafile ' D:\oradata\xq2dsgn\ xq2dsgn.dbf ' resize 500 m;//手动修改数据文件大小为500M图表10 表空间创建完成删除表空间语句如下:DROP TABLESPACE xq2dsgn INCLUDING CONTENTS AND DATAFILES;2.2.2.创建用户1.建立用户并为用户指定缺省的永久表空间和临时表空间SQL> create user xq2dsgn identified by xq2dsgndefault tablespace xq2dsgntemporary tablespace temp;用户已创建。
用SQL DTS实现SQL Server到Oracle的数据迁移
用SQL DTS实现SQL Server到Oracle的数据迁移陈拓 chentuo@2005 年 2月 15 日 最后修改日期 2005 年 3月 27 日以下的操作以 SQL Server2000 和 Oracle 10g 为例。
一、 在Oracle数据库中建立一个新帐户如果已有可用用户,跳过这一部分。
1.用SQL*plus创建新用户l建立一个新帐户 ct,PL/SQL 脚本如下:SET ECHO OFFPROMPTPROMPT specify password for ct as parameter 1 (ct):DEFINE pass = &1PROMPTPROMPT specify default tablespeace for ct as parameter 2 (USERS):DEFINE tbs = &2PROMPTPROMPT specify temporary tablespace for CT as parameter 3 (TEMP):DEFINE ttbs = &3PROMPTPROMPT specify password for SYS as parameter 4 (sys):DEFINE pass_sys = &4PROMPTPROMPT specify log path as parameter 5 (D:\oracle\product\10.1.0\):DEFINE log_path = &5PROMPT-- The first dot in the spool command below is-- the SQL*Plus concatenation characterDEFINE spool_file = &log_path.ct_main.logSPOOL &spool_fileREM =======================================================REM 删除用户及其方案REM =======================================================DROP USER CT CASCADE;REM =======================================================REM 创建新用户,指定默认表空间和临时表空间REM =======================================================CREATE USER CT IDENTIFIED BY &pass;ALTER USER CT DEFAULT TABLESPACE &tbsQUOTA UNLIMITED ON &tbs;ALTER USER CT TEMPORARY TABLESPACE &ttbs;REM =======================================================REM 授权 CONNCET AND RESOURCE 角色REM =======================================================GRANT CONNECT TO CT;GRANT RESOURCE TO CT;REM =======================================================REM 从 sys方案授权(方案\SYS\源类型\程序包\dbms_stats)REM =======================================================CONNECT sys/&pass_sys AS SYSDBA;GRANT execute ON sys.dbms_stats TO ct;REM =======================================================REM 设置本次会话的语言和区域REM =======================================================CONNECT ct/&passALTER SESSION SET NLS_LANGUAGE='SIMPLIFIED CHINESE';ALTER SESSION SET NLS_TERRITORY=CHINA;spool offl查看相关信息用 DBA_ROLES 视图查看角色信息:SQL> conn sys/sys@oract as sysdbaSQL> select * from DBA_ROLES;用 DBA_ROLE_PRIVS 视图查看授予授予用户的角色:SQL> select * from DBA_ROLE_PRIVS where GRANTEE='CT'; 用 ROLE_SYS_PRIVS 视图查看授予角色的系统权限:SQL> select * from ROLE_SYS_PRIVS where ROLE='CONNECT';SQL> select * from ROLE_SYS_PRIVS where ROLE='RESOURCE'; 用 SESSION_ROLES 视图查看用户当前已启用的角色:SQL> conn ct/ct@oractSQL> select * from SESSION_ROLES;l将此脚本存为文件 ct_main.sqll以 SYS 或 SYSTEM 登录C:\>sqlplus sys/sys as sysdbal运行脚本 ct_main.sqlSQL> @D:\lecture\oracle\ct_main.sqll查看操作日志文件:D:\oracle\product\10.1.0\ ct_main.log2.用JDeveloper创建新用户The user name you use to create a connection must have adequate privilege to create a user, either by having been granted CREATE USER privilege or having been granted a role such as administrator that contains that privilege. If you did not create the connection with a user with the correct privileges, you will not be able to select User from the New Gallery.用于创建一个连接的用户名必须有足够的权限来创建用户,即可以是1) 选择 View | Connection Navigator2) 展开 Database 并且选择一个 database connection3) 在 connection中,右击schema 或者其中的任一项,选择 NewFrom the New Gallery, in Filter By, choose All TechnologiesFrom the New Gallery, in Categories , expand Database Tier and choose Database Objects从 Database Objects,选择 User,并且 and click OK to open the New Database User wizardIn the pages of the wizard enter parameters and select options to define the tableClick NextOn the Finish page, click Finish to create the table.二、用 Microsoft DST 将数据从SQL Server 导出到 Oracle1.启动DST开始 > 程序 > Microsoft SQL Server > 导入和导出数据:图1 启动DST2.出现“DTS导入/导出向导”界面,下一步:图2 DTS导入/导出向导3.选择数据源在数据源中选取“用于 SQLServer 的Microsoft OLE DB 提供程序”。
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数据迁移
图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的数据迁移方案理论说明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的数据迁移
《高级数据库应用》课程项目报告《数据库迁移》姓名:组员:班级学号:指导教师:完成报告时间:数据库迁移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)具体表的迁移,已经完成奖惩信息表的迁移。
SQLServer与Oracle数据迁移报告
SQL Server 与 Oracle数据交换组长:组员:学院:专业:教师:一、设计目的综合运用所学Web数据库以及c#编程相关知识,查询SQL Server、Oracle 数据库的相关信息,完成数据从SQL Server到Oracle的迁移二、设计要求显示SQL Server 2000数据库中的对象显示所有视图允许通过选择某一个或几个字段,将数据读出并且保存在某个XML文件中完成数据从SQL Server到Oracle的迁移三、程序环境数据库: SQL Server 2000, Oracle10g开发工具:Microsoft Visual Studio 2008开发技术: 四、系统详细设计1.显示SQL Server 2000数据库中的对象在第一个DropDownList控件利用自动绑定的功能,新建与SQLServer2000的master库的连接,运用SQL查询语句在表SYSOBJECTS 中查出所有数据库名,并绑定到控件中。
设置另一个DropDownList控件用来让用户选择想要查询的数据库对象。
数据库对象有视图、索引、表结构、存储过程、用户、触发器和函数这几项。
再设置另外一个DropdownList控件,用手动绑定数据的方法,利用控件的SelectView的方法将数据名保存在变量dataBaseName中,然后通过SQL语句查询出这个库的所有表名,包括系统表和用户表。
设置Datagridview控件,用来接收查询结果。
在查询按钮控件中设置事件,当按下按钮根据所想查询的数据库名,表名和对象名使用sqlDataAdapter执行sql语句,并用Dataset中的FILL方法将查询结果存储在Gridview的Datasource并绑定,这样就能显示出所查询的数据库对象的结果。
2.显示所有视图在第一个功能中只是把某个库中所有的视图名和相关的字段显示出来,并没有显示出某个视图的详细信息。
增加一个输入框,用来输入想要查询的特点的视图名,利用存储过程查询出建立视图的语句并显示在Gridview2控件中,利用查询语句查询出所选视图的详细信息并显示在Gridview3中。
Sql server 迁移到oracle 方案
Sql server 迁移到oracle 方案1.系统目前运行情况系统目前采用的数据库是sql server 2005操作系统平台是windows server 2003操作系统的配置:16cpu,32g内存诊断:目前系统运行较慢,windows server 2003和sql server 2005不能充分利用现有的硬件配置,已经形成瓶颈,导致资源浪费。
2.sql server和oracle的产品比较1).Oracle为客户端开启会话有两种方式:共享服务和专用服务。
在专用服务情况下,监听器为连接请求创建新进程(Unix环境下是Process,Windows下我想应该是Thread吧);共享服务情况下,监听器将客户请求交给Dispatcher,由Dispatcher安排多客户的作业。
SQL Server在默认情况下自动为客户端连接创建线程,当有非常多的客户连接时,SQL Server可以使用线程池管理多会话,这类似于Oracle的共享服务。
2).Oracle的内存管理分三块:SGA、PGA、UGA;在MSDN中并没有提及怎样控制SQL Server的内存分配,只是提到SQL Server的虚拟地址空间分成缓冲池占用空间和其余空间,且SQL Server有动态内存管理机制。
3). Oracle的实例一次只能管理一个数据库,数据库在集群环境下可由多个实例管理。
而SQL Server单个实例一次能管理多个数据库。
Oracle数据库存储方式有OS文件、裸分区、ASM等,SQL Server的数据库存储只能是系统文件。
4). Oracle数据库包含表空间,表空间可以使用多个文件存储数据,表空间就类似于SQL Server中的文件组。
区是物理连续上连接的存储空间,区中包括最小I/O单位——块(Oracle)或页(SQL Server)。
但SQL Server页大小是8KB,区包含8个页;Oracle不同表空间可以有不同的块大小,区的大小和保护块的数量也不固定。
使用Oracle 移植工作台从 Microsoft SQL Server 移植到 Oracle 数据
使用Oracle 移植工作台从Microsoft SQL Server 移植到Oracle 数据库10g目的本模块介绍了如何使用 Oracle 移植工作台从 Microsoft SQL Server 数据库移植到 Oracle 数据库 10g。
所需时间大约 2 个小时主题本教程将讨论下列主题:概述情景前提条件安装和配置Oracle 移植工作台创建源模型创建Oracle 模型自定义Oracle 模型将表空间、用户以及用户表移植到目标数据库中将数据移植到目标数据库中将其余模式对象移植到目标数据库中验证成功移植了存储过程和触发器生成和查看Oracle 移植工作台报告总结概述Oracle 移植工作台是什么?Oracle 移植工作台是一种简化从第三方数据库系统到Oracle 平台(Oracle9i 和 Oracle 数据库 10g)移植过程的工具。
Oracle 移植工作台在集成环境中移植整个数据库模式(包括触发器和存储过程)。
通过 Oracle 移植工作台,您可以:•使用向导和脚本在各个阶段进行移植•使用联机捕获或脱机捕获检索源数据库信息•自定义信息库中的 Work In Progress 数据库对象•分析存储过程、触发器以及视图,并将它们转换为Oracle PL/SQL•通过报告和消息监视移植的状态。
Oracle 移植工作台从源数据库库(如 SQL Server)提取信息,并创建 Oracle 目标数据库。
为了移植不同的源数据库,Oracle 移植工作台针对其所能移植的每一个数据库使用专门的插件。
通过脱机捕获方法,Oracle 移植工作台从源数据库检索元数据,并将它们存储到您载入到工作台信息库的一组文件中。
工作台信息库是 Oracle 数据库中的一组表,包含有关移植的所有信息。
工作台信息库由源模型(表示源数据库)和 Oracle 模型(表示 Oracle 数据库)组成。
您可以在工作台信息库对源模型和 Oracle 模型进行修改,而不会影响生产环境。
sql server数据向oracle转移如何做-
sql server数据向oracle转移如何做?public class TestSqlpublic static void main(String[] args) throws SQLException, ClassNotFoundException/* jdbc的oracle连接*/// String sDBDriver = oracle.jdbc.driver.OracleDriver/* odbc的连接*/String oralce_sDBDriver = oracle.jdbc.driver.OracleDriver String oralce_sConnStr = jdbc:oracle:thin:localhost:1521:orcl/* jdbc的SQL server连接*///jdbc.url=jdbc:sqlserver://IP;instanceName=ProductDB;databa seName=product_index;selectMethod=cursorString sqlServer_sDBDriver = com.microsoft.sqlserver.jdbc.SQLServerDriverString sqlServer_sConnStr = jdbc:sqlserver://localhost:1433;DatabaseName=jyxm // 客户端游标// String sConnStr =// jdbc:sqlserver://localhost:1433; DatabaseName=mahanso //;selectMethod=cursor// 服务器端游标// String sConnStrServerCursor =//jdbc:sqlserver://localhost:1433;DatabaseName=mahanso;sele ctMethod=cursorString sqlServer_UserName = saString sqlServer_PassWord = *******String oralce_UserName = systemString oralce_PassWord = ********// 登记驱动Class.forName(oralce_sDBDriver);Class.forName(sqlServer_sDBDriver);// 连接到数据库Connection cn_oracle = DriverManager.getConnection(oralce_sConnStr,oralce_UserName, oralce_PassWord);Connection cn_sqlserver = DriverManager.getConnection( sqlServer_sConnStr, sqlServer_UserName, sqlServer_PassWord);Statement s_oracle = cn_oracle.createStatement();Statement s_sqlserver = cn_sqlserver.createStatement();ResultSet rs = s_sqlserver.executeQuery( select * from area where id between 1 and 20000 );// 字段1// 字段2String name = new String( 1 );// 字段3int deep= new Integer(1);int parentid = new Integer(1);// 向oracle数据库插入数据while (rs.next())name = rs.getString( name );deep = rs.getInt(deep);parentid = rs.getInt(parentid);s_oracle.execute( insert into area values( +name+ , +deep+ , +parentid+ ) );方法2:任务——导出——for Oracle——连接Oracle——复制表——ssis——完成。
如何从SQLSERVER迁移大批量数据到ORACLE
分析:
微软DTS在异种数据库之间传送数据时,采用ODBC开放数据连接方式,而ODBC的速度慢是众所周知的缺点,导致异种数据库间传送数据慢。而SQLSERVER是微软自己的数据库系统,采用DTS导SQLSERVER的时候能很快,这是一个优点;oracle使用工具sqlldr能够很快的将文本数据导入oracle自己的数据库也是一个优点。结合两个工具,可以提供快速的对大量数据进行迁移。
在例一中字符串由 "标志,所以需要加optionally enclosed by '"',在例二中不需
在例一中日期格式需要在域名后加 'date "yyyy-mm-dd hh24:mi:ss",
即
LOAD DATA
INITFILE 'tbilllog1.txt'
insert into table tbilllog1
insert into table tbilllog1
fields terminated by ',' optionally enclosed by '"'
(
callid,
callidnum,
callerno,
calleeno,
waitbegin date "yyyymmdd",
waitend date "yyyymmdd",
text= double quote{"} (缺省)
在comumn和text选项会影响到oracle的controlfile的设置
sql server向oracle迁移
SQL SERVER 到ORACLE 迁移的方法----引用数据库端SQL语法的迁移以下为常用的SQL语法迁移,包括数据类型、ID列向SEQUENCE迁移、表(主键、外键、CHECK、UNIQUE、DEFAULT、INDEX)、游标、存储过程、函数、触发器、常用SQL语法与函数几个方面,考虑SQL SERVER 的实际情况,没有涉及ORACLE特有的PACKAGE、EXCEPTION等。
在以下的描述中,将SQL SERVER的TRANSACT-SQL简称为T-SQL。
在ORACLE 中,其语法集称为PL/SQL。
<一> 数据类型的迁移<1>、ORACLE端语法说明在ORACLE中,分析其数据类型,大致可分为数字、字符、日期时间和特殊四大类。
其中,数字类型有NUMBER;字符类型有CHAR与VARCHAR2;日期时间类型只有DATE一种;除此之外,LONG、RAW、LONG RAW、BLOB、CLOB和BFILE等数据类型都可视为特殊数据类型。
<2>、SQL SERVER端语法说明在SQL SERVER中,参照上面对ORACLE的划分,数据类型也大致可分为数字、字符、日期时间和特殊四大类。
数字类型又可分为精确数值、近似数值、整数、二进制数、货币等几类,其中,精确数值有DECIMAL[(P[, S])]与NUMERIC[(P[, S])];近似数值有FLOAT[(N)];整数有INT、SMALLINT、TINYINT;二进制数有BINARY[(N)]、VARBINARY[(N)];货币有MONEY、SMALLMONEY。
字符类型有CHAR[(N)]与VARCHAR[(N)]。
日期时间类型有DATETIME、SMALLDATETIME。
除此之外,BIT、TIMESTAMP、TEXT和IMAGE、BINARY VARING等数据类型都可视为特殊数据类型。
<3>、从SQL SERVER向ORACLE的迁移方案比较ORACLE与SQL SERVER在数据类型上的不同,当从SQL SERVER向ORACLE迁移时,可以做如下调整:方法:公司原系统中的Money 用于金额时转换用number(14,2);用于单价时用 number(10,4)代替;<二> ID列向SEQUENCE迁移<1>、SQL SERVER端语法说明在SQL SERVER中,可以将数据库中的某一字段定义为IDENTITY列以做主键识别,如:jlbh numeric(12,0) identity(1,1) /*记录编号字段*/CONSTRAINT PK_tbl_example PRIMARY KEY nonclustered (jlbh) /*主键约束*/在这里,jlbh是一个ID列,在向具有该列的表插入记录时,系统将从1开始以1的步长自动对jlbh的值进行维护。
SQLServer-Oracle导出导入数据及表的方法
SQL_server_与Oracle数据库类型区别以及迁移计划(一)
SQL_server_与Oracle数据库类型区别以及迁移计划一、数据类型区别:以上详细说明:Orace:主要支持char ,varchar2,long,number,datetime,raw,long raw,clob,blob,bfie 前面三个是Character数据类型,varchar2支持可变长度的字符串,long支持可变长度的字符数据,raw,long raw用于存储二进制数据,long raw 可变长度最后三个是大对象(lob)数据类型,存储非结构化的信息,例如声音剪辑,视频文件CLOG表示Character Lob,可以存储大量的字符数据,它对于存储非结构化的XML 文档非常有用。
BLOG表示Binary LOG,此数据类型可以存储大型二进制对象,如图形、视频剪辑,声音文件等支不支持,money,货币Sql server 主要支持的文本类型char ,varchar,nchar,nvarchar,text,ntext,image,货币类型Money,二进制binary,varbinary二、概念上的区别:1.Oracle 是一种对象关系数据库管理系统(ORDBMS),而Sql server 只是关系型数据库管理系统(RDBMS).2.Oracle使用Internet文件系统,该系统基于Java的应用程序,可以使数据库基于成为Internet的开发平台;Sql server 是基于windows3.Orace 主要的三类文件是:数据文件,控制文件,恢复日志文件Sql server: 主要数据文件(必须有且只能有一个),次要数据文件以及日志文件4.两者支持的命令类别差不多,数据定义语言,数据操纵语言,事务处理控制语言,数据控制语言.在Oracle中,在事务控制语言中除了commit,rollback等还多了一个Savepoint,设置保存点。
5.oracle sql的扩展叫PL/SQL,主要的结构化查询工具有sql*plus,isql*plus, pl/sql等Ms sql的扩展叫Transact-SQL,主要的结构化查询工具就是自带的查询分析器二、语法区别:Oracle和SQL Server的语句区别1、列的选择用plsql执行数据查询的时候,from字句是必须的,这同sql server 的要求是一样的。
【信息化-精编】使用Oracle移植工作台从MicrosoftSQLServer移植到Oracle数据
使用Oracle移植工作台从MicrosoftSQLServe r移植到Oracle数据使用Oracle移植工作台从MicrosoftSQLServer移植到Oracle数据库10g目的本模块介绍了如何使用Oracle移植工作台从MicrosoftSQLServer数据库移植到Oracle数据库10g。
所需时间大约2个小时主题本教程将讨论下列主题:概述情景前提条件安装和配置Oracle 移植工作台创建源模型创建Oracle 模型自定义Oracle 模型将表空间、用户以及用户表移植到目标数据库中将数据移植到目标数据库中将其余模式对象移植到目标数据库中验证成功移植了存储过程和触发器生成和查看Oracle 移植工作台报告总结概述Oracle移植工作台是什么?Oracle移植工作台是一种简化从第三方数据库系统到Oracle平台(Oracle9i和Oracle数据库10g)移植过程的工具。
Oracle移植工作台在集成环境中移植整个数据库模式(包括触发器和存储过程)。
通过Oracle移植工作台,您可以:•使用向导和脚本在各个阶段进行移植•使用联机捕获或脱机捕获检索源数据库信息•自定义信息库中的WorkInProgress数据库对象•分析存储过程、触发器以及视图,并将它们转换为OraclePL/SQL•通过报告和消息监视移植的状态。
Oracle移植工作台从源数据库库(如SQLServer)提取信息,并创建Oracle目标数据库。
为了移植不同的源数据库,Oracle移植工作台针对其所能移植的每一个数据库使用专门的插件。
通过脱机捕获方法,Oracle移植工作台从源数据库检索元数据,并将它们存储到您载入到工作台信息库的一组文件中。
工作台信息库是Oracle数据库中的一组表,包含有关移植的所有信息。
工作台信息库由源模型(表示源数据库)和Oracle模型(表示Oracle数据库)组成。
您可以在工作台信息库对源模型和Oracle模型进行修改,而不会影响生产环境。
将SQLServer2005中的数据同步到Oracle中
将SQLServer2005中的数据同步到Oracle中有时由于项⽬开发的需要,必须将SQLServer2005中的某些表同步到Oracle数据库中,由其他其他系统来读取这些数据。
不同数据库类型之间的数据同步我们可以使⽤链接服务器和SQLAgent来实现。
假设我们这边(SQLServer2005)有⼀个合同管理系统,其中有表contract 和contract_project是需要同步到⼀个MIS系统中的(Oracle9i)那么,我们可以按照以下⼏步实现数据库的同步。
1.在Oracle中建⽴对应的contract 和 contract_project表,需要同步哪些字段我们就建那些字段到Oracle表中。
这⾥需要注意的是Oracle的数据类型和SQLServer的数据类型是不⼀样的,那么他们之间是什么样的关系拉?我们可以在SQLServer下运⾏:SELECT *FROM msdb.dbo.MSdatatype_mappingsSELECT *FROM msdb.dbo.sysdatatypemappings来查看SQLServer和其他数据库系统的数据类型对应关系。
第⼀个SQL语句是看SQL转Oracle的类型对应,⽽第⼆个表则更详细得显⽰了各个数据库系统的类型对应。
根据第⼀个表和我们的SQLServer中的字段类型我们就可以建⽴好Oracle表了。
ORACLE bigint NUMBER 19 3 1ORACLE binary BLOB NULL 0 1ORACLE binary RAW -1 4 1ORACLE bit NUMBER 1 3 1ORACLE char CHAR -1 4 1ORACLE char CLOB NULL 0 1ORACLE char VARCHAR2 -1 4 1ORACLE datetime DATE NULL 0 1ORACLE decimal NUMBER -1 3 1ORACLE double precision FLOAT NULL 0 1ORACLE float FLOAT NULL 0 1ORACLE image BLOB NULL 0 1ORACLE int NUMBER 10 3 1ORACLE money NUMBER 19 3 1ORACLE nchar NCHAR -1 4 1ORACLE nchar NCLOB NULL 0 1ORACLE ntext NCLOB NULL 0 1ORACLE numeric NUMBER -1 3 1ORACLE nvarchar NCLOB NULL 0 1ORACLE nvarchar NVARCHAR2 -1 4 1ORACLE nvarchar(max) NCLOB NULL 0 1ORACLE real REAL NULL 0 1ORACLE smalldatetime DATE NULL 0 1ORACLE smallint NUMBER 5 3 1ORACLE smallmoney NUMBER 10 3 1ORACLE sysname NVARCHAR2 128 4 1ORACLE text CLOB NULL 0 1ORACLE timestamp RAW 8 4 1ORACLE tinyint NUMBER 3 3 1ORACLE uniqueidentifier CHAR 38 4 1ORACLE varbinary BLOB NULL 0 1ORACLE varbinary RAW -1 4 1ORACLE varbinary(max) BLOB NULL 0 1ORACLE varchar CLOB NULL 0 1ORACLE varchar VARCHAR2 -1 4 1ORACLE varchar(max) CLOB NULL 0 1ORACLE xml NCLOB NULL 0 1ORACLE bigint NUMBER 19 3 1ORACLE binary BLOB NULL 0 1ORACLE binary RAW -1 4 1ORACLE bit NUMBER 1 3 1ORACLE char CHAR -1 4 1ORACLE char CLOB NULL 0 1ORACLE char VARCHAR2 -1 4 1ORACLE datetime DATE NULL 0 1ORACLE decimal NUMBER -1 3 1ORACLE double precision FLOAT NULL 0 1ORACLE float FLOAT NULL 0 1ORACLE image BLOB NULL 0 1ORACLE int NUMBER 10 3 1ORACLE money NUMBER 19 3 1ORACLE nchar CHAR -1 4 1ORACLE nchar CLOB NULL 0 1ORACLE ntext CLOB NULL 0 1ORACLE numeric NUMBER -1 3 1ORACLE nvarchar CLOB NULL 0 1ORACLE nvarchar VARCHAR2 -1 4 1ORACLE nvarchar(max) CLOB NULL 0 1ORACLE real REAL NULL 0 1ORACLE smalldatetime DATE NULL 0 1ORACLE smallint NUMBER 5 3 1ORACLE smallmoney NUMBER 10 3 1ORACLE sysname VARCHAR2 128 4 1ORACLE text CLOB NULL 0 1ORACLE timestamp RAW 8 4 1ORACLE tinyint NUMBER 3 3 1ORACLE uniqueidentifier CHAR 38 4 1ORACLE varbinary BLOB NULL 0 1ORACLE varbinary RAW -1 4 1ORACLE varbinary(max) BLOB NULL 0 1ORACLE varchar CLOB NULL 0 1ORACLE varchar VARCHAR2 -1 4 1ORACLE varchar(max) CLOB NULL 0 1ORACLE xml CLOB NULL 0 1ORACLE bigint NUMBER 19 3 1ORACLE binary BLOB NULL 0 1ORACLE binary RAW -1 4 1ORACLE bit NUMBER 1 3 1ORACLE char CHAR -1 4 1ORACLE char CLOB NULL 0 1ORACLE char VARCHAR2 -1 4 1ORACLE datetime DATE NULL 0 1ORACLE decimal NUMBER -1 3 1ORACLE double precision FLOAT NULL 0 1ORACLE float FLOAT NULL 0 1ORACLE image BLOB NULL 0 1ORACLE int NUMBER 10 3 1ORACLE money NUMBER 19 3 1ORACLE nchar NCHAR -1 4 1ORACLE nchar NCLOB NULL 0 1ORACLE ntext NCLOB NULL 0 1ORACLE numeric NUMBER -1 3 1ORACLE nvarchar NCLOB NULL 0 1ORACLE nvarchar NVARCHAR2 -1 4 1ORACLE nvarchar(max) NCLOB NULL 0 1ORACLE real REAL NULL 0 1ORACLE smalldatetime DATE NULL 0 1ORACLE smallint NUMBER 5 3 1ORACLE smallmoney NUMBER 10 3 1ORACLE sysname NVARCHAR2 128 4 1ORACLE text CLOB NULL 0 1ORACLE timestamp RAW 8 4 1ORACLE tinyint NUMBER 3 3 1ORACLE uniqueidentifier CHAR 38 4 1ORACLE varbinary BLOB NULL 0 1ORACLE varbinary RAW -1 4 1ORACLE varbinary(max) BLOB NULL 0 1ORACLE varchar CLOB NULL 0 1ORACLE varchar VARCHAR2 -1 4 1ORACLE varchar(max) CLOB NULL 0 1ORACLE xml NCLOB NULL 0 12.建⽴链接服务器。
SQLServer2024数据库最快迁移方案
SQLServer2024数据库最快迁移方案1.环境准备在开始迁移之前,首先需要准备好迁移环境。
这包括安装目标数据库系统(如 SQL Server 2024)、创建目标数据库,并确保目标数据库的性能和可用性符合需求。
2.数据库分析在迁移之前,需要对原始数据库进行分析,了解其结构、数据量和性能特点。
可以使用 SQL Server Profiler 或其他性能分析工具来获取这些信息。
此外,还需要确定迁移的目标,包括迁移到目标数据库的哪些表、视图、存储过程等对象。
3.迁移方案选择根据数据库分析的结果,选择合适的迁移方案。
以下是一些常用的迁移方案:a.数据库备份和还原:将原始数据库备份为BAK文件,然后在目标数据库中还原。
这是一种简单快捷的迁移方法,适用于数据量较小的情况。
b. 数据库复制:使用 SQL Server 的复制功能,将原始数据库的数据复制到目标数据库。
这种方法适用于需要实时复制数据的场景。
c. 数据库升级:先将原始数据库升级到较新的 SQL Server 版本(如 SQL Server 2024),然后再将升级后的数据库迁移到目标数据库。
这种方法适用于需要保留原始数据库的数据和结构的情况。
d. 数据迁移工具:使用第三方数据迁移工具,如 SQL Server Integration Services(SSIS),将原始数据库的数据导出为 CSV 或其他格式,然后再导入到目标数据库。
这种方法适用于需要对数据进行转换和清洗的情况。
4.迁移过程优化在实际迁移过程中,可以采取一些优化措施来提高迁移的速度和效率:a.使用多线程并发操作:通过在迁移过程中使用多个线程并发执行,可以加快数据的导入和导出速度。
b.分批次迁移数据:将数据分成多个批次进行迁移,每次迁移一部分数据,这样可以减少单次迁移的数据量,提高迁移的效率。
c.禁用索引和约束:在迁移过程中,可以暂时禁用目标数据库的索引和约束,以加快数据导入的速度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 文件中,当出现“{#$&}”时表示接下来是下一行数据,出现“{@#$}”时表示接下来是下一列数据。
将查询结果集完整导出,不对数据做任何格式化或者修改操作,保证数据的原生无损。
bcp"sql语句"queryout"绝对路径\导出数据的文件名.txt"-c-r"行终止符,出现该字符,表示一行数据已完整"-t"列终止符,表示列终止出现时,列数据已完整"-S"可以是ip可以使可以被解析的地址"-U"数据库用户名"-P"密码"2.3实战分析在不指定行分隔符时,默认导出时的行终止符是回车符,然而从实战中的出来的经验是:无法保证客户所提供的数据中有奇葩数据,数据中存在回车符,如果一旦出现回车符,那么将会使导出的数据在导入时,出现错误,数据完整无损无法被保证。
因此行列分隔符一定要单独以极特殊字符进行指定,并在导入时进行指定。
最大限度保证数据的完整无损。
第三章oracle数据导入3.1导入须知一般在使用oracle数据库时会使用linux或者solaris进行搭建,而此时跨平台的数据文件传输,以及文件内容格式的完整不变,成为一个需要考虑的点,但是由于在数据导出时进行特殊字符指定行列分割,因此在这里出现数据乱码或者回车符不兼容的可能性被降到了最低。
导入使用sqlldr命令,具体参数以及使用方法请自行查询学习。
此为oracle 自带工具。
3.2导入3.2.1导入准备以及导入【1】在做数据导入之前,首先要将sqlserver中表的表结构进行转换到oracle,方法有两种:1、通过手动建表。
2、通过工具进行转换。
不管哪一种方法,需要注意的是:【2】在表创建完成之后需要对表结构进行一定的扩张改造:1、所有表字段中的最大长度,修改到尽可能长,因为你无法确定客户在第一次到第二次数据给你的期间有没有对表结构进行过调整。
因此给数据一个足够大的桶。
2、去除所有约束条件,如果手动建表可以在建表之初将所有限制条件去掉,因为你无法确定客户的数据是在加了限制条件前加入还是之后,并且有一些特殊字符在不通编码格式下也许会被认为成一致,因此,保证数据无损统一,去除所有约束条件。
3、分析源表,有一些可能为空的字段,分析是否需要对其进行数据初始化,进行初始化函数的编写,因为你无法确定老系统给出的数据可以为空的字段在新系统中是否可以无影响,【这一步并非必须但如果要做一定需要割接组同事参与】【3】导入主机oracle客户端安装并配置tnsnames,并配置环境变量1、理论上是要求所有命令在使用时不需要进行绝对路径的添加的,因此对于PATH以及相关环境变量需要进行配置。
2、由于在导入语句中为保证导入不出错需要对连接串进行指定解析,因此客户端的tnsnames需要进行配置。
【4】在导出、建表、表改造、环境配置准备完成之后,需要进行ctl文件生成,此处不做赘述,具体编写规则请自行查询学习,此处只针对实战中的ctl进行分析(ACCOUNT_BUSINESS.ctl):OPTIONS(skip=0,rows=300000)LOAD DATAinfile ACCOUNT_BUSINESS.txt"str'{#$&}'"TRUNCATEINTO TABLE ACCOUNT_BUSINESSFields terminated by'{@#$}'trailing nullcols(RECORDID"to_number(:RECORDID)",SUBBOOK CHAR(1000),SUBCLASS CHAR(1000),RECORDTIME"is_date(substr(:RECORDTIME,1,19),'yyyy-mm-dd hh24:mi:ss')",RECORDTYPE"to_number(:RECORDTYPE)",MONEY"to_number(:MONEY)",MONEYTYPE CHAR(1000),RECORDDESC CHAR(1000),XID CHAR(1000),NOTE CHAR(4000),RECORDPOINT CHAR(1000),RECORDPERSON CHAR(1000),AUDITING_LEVEL"to_number(:AUDITING_LEVEL)",AUDITINGXID CHAR(1000),BUSINESSDATE"is_date(substr(:BUSINESSDATE,1,19),'yyyy-mm-dd hh24:mi:ss')",ACCOUNTDATE"is_date(substr(:ACCOUNTDATE,1,19),'yyyy-mm-dd hh24:mi:ss')",OPLOG CHAR(4000),XIDBAK CHAR(1000),UPDATETIME"is_date(substr(:UPDATETIME,1,19),'yyyy-mm-dd hh24:mi:ss')")从ctl文件中可以看到:1、对于时间类需要初始化,并格式化,不管其传过来的数据是否完整、是否为空,为空的不可以进行格式化在自写函数is_date中进行判断并赋值。
2、对于数字类列需要进行to_number,不会影响数据,但是为了将string的数据专为number进行存储,数据不会被影响。
3、Char类型数据,不论数据长度为多少,将列容器调大之后在导入时将长度调到最大,保证不会漏或者错读数据。
4、文件最前头需要对数据文件、行列分割、导入前动作、行数、导入到那个表提交等进行参数设定,本ctl文件中的参数经过匹配已经将参数调节的比较优化,从最初版本导入需要两个小时变成了导入需要20分钟。
【5】导入,在准备好了数据、表、控制文件以及环境之后,最终需要使用导入语句进行将这些进行串接,命令为sqlldr,有很多参数,但并不进行一一讲解,只讲实战操作以及注意事项。
sqlldr userid=要导入的用户名/密码@连接串解析名control=ACCOUNT_BUSINESS.ctl direct=true此语句中的direct参数需要说明一下,此参数的值应该是true或者false而并非y或者n,给错值,此参数并不会生效。
此参数为控制文件中的rows提交行数参数是否生效的凭证。
如果给错或者不给,rows参数不会生效,即:数据全部读取完成之后一起进行commit。
生效时,每当rows条提交一次,后者效率更高。
另外:表中有clob字段时该参数不生效并且在导入语句执行时会进行提示,导入时间会因此较长,并且其中没有日志打出,一定要耐心等待。
【6】数据校验数据无损迁移的工作到此结束,为了确保导出结果无误,要进行数据检验检测。
首先要在执行目录下查看是否存在.bad文件,此文件记录导入失败的数据,如果出现此文件证明有数据导入出错。
其次需要让数据的使用者,一般是割接组进行数据基础校验,因为他们对于老系统的数据十分熟悉,数据也是他们使用所以更为专业化。
第四章后话本文旨在将从sqlserver数据迁移到oracle的一些工作经验进行总结,其中所使用到的数据以及语句已经将敏感信息屏蔽,也将一些基础类的学习分到了自学上,使得文档可以更加的精短有力,突出重点。
在项目中真实实践的结果是成功的,总迁移的数据量初步估算突破一亿条,出错数量仅为初期调优时测试的几十条,后续实际生产数据迁移时错误率为0,因此将此方法进行总结成文,希望可以对以后的工作学习有所帮助,如果不妥还请指正。