SqlServer移植到Oracle.docx
《SqlServer移植到Oracle.docx》由会员分享,可在线阅读,更多相关《SqlServer移植到Oracle.docx(21页珍藏版)》请在冰豆网上搜索。
SqlServer移植到Oracle
从SQLserver2005中移植数据到Oracle10g
1.移植前准备
在移植前,需要安装必需的各种软件,如下:
(1).安装好SQLserver2005的补丁包和SP2。
(2).安装Oracle安装包里的oracle客户端浏览器(PL/SQLDeveloper)。
(可以根据需要按照汉化补丁,汉化包不安装也可)
(3).硬件要求:
在Oracle数据库所在的硬盘保持足够剩余空间(至少有2GB的空间剩余);建议在启用Oracle服务时机器的内存不少于2GB。
没有特别说明的情况下,本文的数据移植是针对普通的属性数据。
2.移植
2.1.创建数据库
打开Oracle中的DatabaseConfigurationAssistant进行数据库的创建,如图所示:
图表1打开DatabaseConfigurationAssistant
进入DatabaseConfigurationAssistant后点击“下一步”,然后出现如图表2所示的界面,选择“创建数据库”后点击“下一步”:
图表2创建数据库
如图表3所示选择第一个“一般用途”然后点击下一步:
图表3选择模板
如图标2所示在创建数据库过程中的第3步,在“全局数据库名”中输入数据库名称,SID则会自动默认为全局数据库名,然后点击“下一步”;
图表4创建数据库
点击如图表5所示界面中的“确定”按钮系统就开始创建数据库了。
图表5
图表6正在传教数据库
最后点击如图表4所示中的“退出”按钮就创建数据库完成了。
图表7创建数据库完成
2.2.登录Oracle
打开PL/SQLDeveloper并用system(数据库默认的用户名)用户身份登录到XQ2DSGN并选择连接为SYSDBA,如图所示:
图表8登录到PLSQL
2.2.1.创建表空间
创建表空间的sql语句:
SQL>createtablespacexq2dsgndatafile'G:
\oracle\product\10.2.0\oradata\xq2dsgn\xq2dsgn.dbf'size2048mautoextendonnext10mmaxsizeunlimited;
(参考:
通过PL/SQLDeveloper登录到Oracle数据库上后,打开菜单:
文件/新建/命令窗口,打开一个命令窗口然后在该命令窗口中执行脚本创建和删除表空间,新建用户和授权的操作,如图所示:
图表9打开命令窗口
创建表空间
Sql>createtablespacexqds2gndatafile'D:
\oradata\xq2dsgn\xq2dsgn.dbf'size200mautoextendonnext10mmaxsizeunlimited;
Sql>alterdatabasedatafile'D:
\oradata\xq2dsgn\xq2dsgn.dbf'autoextendon;
1DATAFILE:
表空间数据文件存放路径
2SIZE:
起初设置为200M
3UNIFORM:
指定区尺寸为128k,如不指定,区尺寸默认为64k
4空间名称xq2dsgn与数据文件名称xq2dsgn.dbf不要求相同,可随意命名.
5AUTOEXTENDON/OFF表示启动/停止自动扩展表空间
6alterdatabasedatafile'D:
\oradata\xq2dsgn\xq2dsgn.dbf'resize500m;
//手动修改数据文件大小为500M
图表10表空间创建完成
删除表空间
语句如下:
DROPTABLESPACExq2dsgnINCLUDINGCONTENTSANDDATAFILES;
2.2.2.创建用户
1.建立用户并为用户指定缺省的永久表空间和临时表空间
SQL>createuserxq2dsgnidentifiedbyxq2dsgn
defaulttablespacexq2dsgn
temporarytablespacetemp;
用户已创建。
(userxq2dsgn表示用户名:
xq2dsgn,identifiedby后面表示密码)
2.2.3.对用户进行授权
授予用户会话的权限如图所示:
Grantcreatesessiontoxq2dsgn;
授予用户创建表格的权限;
Grantcreatetabletoxq2dsgn;
授予用户设定表空间大小的权限;
Grantunlimitedtablespacetoxq2dsgn;
授予用户DBA权限:
grantdbatoxq2dsgn;
图表11创建用户和授权
2.3.导出数据
2.3.1.打开SQLserver导入导出数据向导
登录到SQLserver2005资源对象管理器选择“数据库”并找到要导出到Oracle中的数据库,然后右击选择“任务”→“导出数据”。
如图所示:
图表12DTS导出数据
2.3.2.选择数据源
弹出窗体如下图,点击“下一步”
2.3.3.选择目标数据库和配置属性
如下图所示选择“Oracleproviderforoledb”
图表13选择目标数据库
(2)导入到本地计算机的属性配置
如图所示,在“输入服务器名称”中输入刚才在本计算机上新建的Oracle数据库名称,在“用户名称”和“密码”中输入刚才新建及设定的用户名和密码,点击“测试连接”提示“测试连接成功”则可以点击“确定”并进行下一步操作了。
图表14配置属性
(3)导入到域中的其他计算机上的属性配置
如图所示:
其中服务名称输入的是目标计算机的IP和目标Oracle数据库名称。
2.3.4.选择源表和源视图及目标表,并编辑映射
选择需要导出的表或者全选(这里建议根据表的类型和复杂程度选择一个或者多个进行导出,以免全选发生错误时很难更正)。
图表15选择源表和源视图
编辑映射。
在该图中,在每行的目标表处点击,然后点击“编辑映射”按钮,弹出窗体如下图:
点击右上方的“编辑SQL”按钮,弹出如下窗体:
该窗体显示了oracle数据库中,即将创建的数据库表的sql语句。
如果有以下情况:
(1)表名、字段名中有小写字母;
(2)字段类型不正确;(3)存在EVENTID字段或者其他的uniqueidentifier16类型的字段(GUID对应的字段);我们需要进行修改:
(1)确保引号内的表名、字段名均为大写;
(2)字段类型正确;(3)VARCHAR2(38)DEFAULTSYS_GUID()NOTNULL
该表中,我们需要对EVENTID字段进行修改,修改后的窗体如下图:
修改完毕,点击“确定”按钮。
该步骤,需要依次检查每个表,确认每个表的sql语句无误后,才能进行下一步操作。
()
有些表名及字段名均存在小写或者大小写均有的现象,直接导入Oracle数据库,则引起使用中的一些错误。
因此,我们在这里手工将上图的sql语句中,引号内的表名、字段名全部改为大写,并将“列映射”页面的目标数据字段改为全部大写,如果想要继续使用小写的表名则注意引号的应用这里不做说明.
2.3.5.执行导出
选择完表后点击“下一步”或者点击“完成”如果不出错则提示导入成功如图所示:
图表16执行导入成功
3.特殊字段处理
3.1.对于自增长字段的处理
Sqlserver数据库中,有时会采用自增长的字段做为主键,但oracle数据库中没有这样的字段,因此需要我们单独处理这样的字段。
以下以StationSeries表的objectid字段为例进行说明。
StationSeries表的objectid在sqlserver数据库中为int类型,标识增量为1;导入oracle数据库中后,字段类型为integer。
(1)新建一个sql窗口(登陆plsql后,File主菜单,new–>sqlwindow即可)。
(2)在该窗口中输入以下sql语句:
Selectmax(objectid)fromstationseries;
(3)按F8,执行该语句,看到最大ID值为4743。
如下图:
(3)新建一个序列。
在sql窗口,输入以下sql语句:
createsequenceOBJECTID_STATIONSERIESminvalue4744maxvalue99999999999999999999999999startwith4744incrementby1nocache;
用鼠标选中该条语句,并按F8,执行该语句,即创建了一个序列。
说明:
该语句中,OBJECTID_STATIONSERIES为序列的名字;Minvalue之后的4744为上面的sql语句最大的objectid值+1即:
4743+1=4744;maxvalue填尽可能大的数字即可。
Startwith值同minvalue,incrementby1表示每次递增1。
如下图:
(4)建立触发器。
同样,在sql窗口,输入以下sql语句:
createorreplacetriggerobjectID_stationseries
beforeinsertonstationseries
foreachrow
declare
--localvariableshere
nextidnumber;
begin
IF:
new.objectidISNULLor:
new.objectid=0THEN
selectobjectid.nextval
intonextid
fromsys.dual;
:
new.objectid:
=nextid;
endif;
endobjectID;
用鼠标选中该条语句,并按F8,执行该语句,即创建了一个StationSeries表的对objectid自增的触发器。
说明:
该语句中,objectID_stationseries为触发器的名字。
beforeinserton之后的stationseries为建立触发器的表名。
Objectid即为字段。
经过上述四个步骤,我们就可实现类似sqlserver数据库中的自动增长字段,而无需更改代码。
在导入oracle数据库结束后,我们需要检查sqlserver数据库,对于其他表中的自增字段,也需要重复上述步骤实现在oracle数据库中自增字段。
至此,从sqlserver数据库至oracle数据库的移植工作就结束了。