怎么将sql2005中的数据导入到oracle中,求具体步骤补助方法

如题所述

SqlServer2005导出数据到oracle

--在sqlserver下处理需要导出的数据库
1、 执行以下sql,查出所有‘float‘类型的表名和字段名,将float类型改为decimal(18,4).

select 表名=d.name,字段名=a.name,类型=b.name FROM syscolumns a
left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
where b.name in ('float')
order by d.name;

2、 使用下面sql语句查出MS-SQL中数据库的所有用户表中字段在ORACLE属于内部关键词的表名及字段名并修改,此修改需通知开发看是否需要修改相关程序

select 表名=d.name,字段名=a.name FROM syscolumns a
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
where a.name in ('NUMBER','LEVEL','ROW','rowNum','rows','mode') order by a.id,a.colorder

3、 查询类型为text字段并且值为空的设置为'-'否则导出时会报错误(该语句查询出一组sql语句);将查询出来的一组sql语句全部拷贝出来并全部执行。

select 'update '+ d.name +' set '+ a.name +'=''-'' where '+ a.name +' like '''''
FROM syscolumns a left join systypes b on a.xtype=b.xusertype
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
where b.name in ('TEXT') order by d.name

4、 执行下列sql将所有数据表的列名更新为大写。

-- 修改列名大写
drop procedure change_to_decimal184
go
-- 创建存储过程
create procedure change_to_decimal184
as
-- 声明变量
declare @tableName varchar(128),
@columnName varchar(128)
-- 声明游标
declare @cursorVar Cursor
-- 给游标赋值
set @cursorVar=Cursor For
select obj.name,upper(col.name) from syscolumns col,sysobjects obj where obj.xtype='U' and obj.id=col.id;
-- 打开游标
Open @cursorVar
-- 取一条数据赋给变量
Fetch Next From @cursorVar
Into @tableName,@columnName
-- 声明执行语句变量
Declare @executeSql nvarchar(2000)

While(@@FETCH_STATUS=0)
Begin
-- 获得要执行的SQL语句
set @executeSql=N'exec sp_rename '''+@tableName+'.'+@columnName+''','''+@columnName+'''';
execute sp_executesql @stmt=@executeSql
-- 取下一条数据
Fetch Next From @cursorVar
Into @tableName,@columnName
End
-- 关闭游标
Close @cursorVar
-- 释放资源
Deallocate @cursorVar
-- 返回
Return
go
-- 执行存储过程
execute change_to_decimal184

5、 执行下列sql将所有表名大写

-- 修改表名大写
drop procedure change_to_decimal184
go
-- 创建存储过程
create procedure change_to_decimal184
as
-- 声明变量
declare @tableName varchar(128),
@uptableName varchar(128)
-- 声明游标
declare @cursorVar Cursor
-- 给游标赋值
set @cursorVar=Cursor For
select obj.name,upper(obj.name) from sysobjects obj where obj.xtype='U' and name!='dtproperties';
-- 打开游标
Open @cursorVar
-- 取一条数据赋给变量
Fetch Next From @cursorVar
Into @tableName,@uptableName
-- 声明执行语句变量
Declare @executeSql nvarchar(2000)

While(@@FETCH_STATUS=0)
Begin
-- 获得要执行的SQL语句
set @executeSql=N'exec sp_rename '''+@tableName+''','''+@uptableName+'''';
execute sp_executesql @stmt=@executeSql
-- 取下一条数据
Fetch Next From @cursorVar
Into @tableName,@uptableName
End
-- 关闭游标
Close @cursorVar
-- 释放资源
Deallocate @cursorVar
-- 返回
Return 0
go
-- 执行存储过程
execute change_to_decimal184

--在oracle下处理
1. 以system用户登录,建立表空间和用户并赋予权限
如--创建表空间

create tablespace ST10005(表空间名)
datafile 'D:\oracle\db\ST10005.ora' (数据文件存放地点 D:\oracle\db\文件夹要先存在)
size 500M
default storage
(initial 200m
next 50m
minextents 20
maxextents 500)
online;

--创建用户 (指定默认表空间 和 临时表空间 指定连接状态)

CREATE USER ST10005(用户名) PROFILE DEFAULT IDENTIFIED BY ep(密码) DEFAULT
TABLESPACE ST10005(表空间名) TEMPORARY TABLESPACE TEMP ACCOUNT UNLOCK;

--为用户授权

grant connect,resource,dba to ST10005(用户名);

--用sqlserver2005自带的导入工具将数据导入到oracle
1) 在要导出的数据库上点击鼠标右键,选择“任务”》“导出数据”,
2) 依次点击下一步,在“选择数据源”页面填写相应选项,如下图
3) 在“选择目标”页,目标栏选择“oracle Provider for OLE DB”,点击属性会弹出个数据链接属性的对话框;如下图
数据源一栏填写的是用PLSQL连接时的database;用户名一栏都要用大写的;同时要选中“允许保存密码”选项。
4) 接着下一步直到选择源表和源视图,选择要导入的表,注意:一次不能选太多的表,否则会弹出一个警告,如弹出了警告(如下图),就要少选几个表,如果不弹出警告,就下一步直到完成。
5) 重复1-4步操作几次,将所有的表都导入进去。

--导入完成后,还需执行以下几步操作
1. 检查表的数目是否正确
sqlserver下执行 :
select count(*) from sysobjects obj where obj.xtype='U' and name!='dtproperties';
oracle下执行 :select count(*) from user_tables;
2. 执行sql
update CFG_MODEL_PARAM SET ORDERSQL=' ' WHERE ordersql is null;
3. 执行文件中的sql建视图
4. 执行sql建主键以及外键。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-29
用navicat 的导入导出功能
第2个回答  2012-05-29
可以在oracle建一个dblink访问sql2005数据库
第3个回答  2012-05-29
1.先把mdf导到sqlserver中
2.再从sqlserver中,导出script,生成sql文件
这个方法:右键数据库,有一个Tasks,再选Tasks里的Generate Scripts。
3.将生成的sql文件,语法稍作修改,需要修改成ORACLE识别的语法
4.把修改后的sql文件导入到oracle中。

新奇哥,我先给你一个回答啊!
相似回答