前阵做了下数据库迁移,从Sql Server2005迁移到Oracle
10g,这里说一下迁移的方法。
Sql
Server和Oracle区别比较大,包括语法,字段类型,数据库机制,配置管理方法等等,区别是全方位的,做迁移需要注意很多问题,在迁移过程中也会遇到问题,需要细细处理之。这里说一下数据库结构的迁移,和迁移过程中注意的一些问题。(当然具体的数据库迁移过程中可能问题是不一样的,具体问题具体分析了)
迁移的方法是从Sql Server已有数据库中生成出Oracle的建库脚本,然后在Oracle数据库上执行。用到的生成工具是Power
Designer。
1、打开PD(Power
Designer简称,以下均使用PD),新建一个PDM(物理数据模型),DBMS选择Microsoft SQL
Server2005,Model name起名叫做mssdb。
2、通过逆向工程将现有Sql
Server数据库生成PDM
(1)选择Database->Reverse
Engineer Database,配置数据源,选择要迁移的数据库,输入用户名、密码。
(2)选择数据库,选择用户dbo下的所有表、视图、存储过程、方法、触发器、序列等(由于Sql Server与oracle,数据库概念上的区别,这里不需选择用户、角色)。
点击OK,生成PDM。已经建立过PDM的情况,这一步可以省略。
3、生成Oracle物理数据模型
选择Tools->Generate Physical Data Model
(1)DBMS选择Oracle
10g,输入名称:oradb。
(2)在Configure Model
Options配置中, Model Settings的Table&View界面中,勾选Ignore
identifying owner。Oracle中用户的概念与Sql Server不同,这里忽略owner。
(3)Selection标签,选择需要生成的所有表、视图、外键、存储过程、方法、触发器、序列等。
点击确定,即生成了oracle 的PDM。
注意,在生成PDM的过程中可能不会一帆风顺,有可能会报错(比如提示对象长度超限),这会导致生成失败。这时需要根据具体错误提示做相应修改(可能需要多次调整,没有办法,谁让两者差别这么大的呢)。
4、生成Oracle脚本
与Sql
Server不同的是,在Oracle里表名、字段名全部为大写,若要单独处理为小写,需加上双引号。而PD生成的脚本默认是有双引号的,这里需要修改默认配置,去掉双引号。
然后选择oradb,然后选择Database->Generate
Database,进入数据库生成界面
在Format标签下,去掉勾选Owner prefix,它将省掉建表语句前“dbo.”所带来的麻烦;
在Selection标签下,选择要生成脚本的各对象;
在Preview标签下,可以预览预生成的脚本(表较多时,切换会比较慢)。
点击确定,即得到生成的脚本。
5、检查与调整
脚本是PD自动生成的,因为表比较多,在oracle上直接去执行难免会有错误。所以在执行之前需要检查下脚本的正确性。这里提几点需要注意的地方。
(1)Oracle要求表名、字段名等长度最多是30位,而Sql Server没有这个限制,所以可能会有在Sql
Server创建正常的表而在Oracle下会创建失败。
(2)检查一下主键、外键的名称,它们有可能是随机生成的名称。可根据相应规范进行修改。
(3)检查字段名是否用到了Oracle的关键字。比如Sql
Server命名“备注”字段可能会用“comment”、标题用“title”,但comment、title在Oracle中是关键字,不可以做为字段名称。
(4)存储过程、方法是否符合Oracle语法。
(5)Sql
Server有自增字段,而Oracle没有。要实现此功能,需要相应创建序列、触发器。
(6)Sql
Server中字段类型为text的情况,如果是存二进制数据需要在Oracle中选用Blob字段类型。
(7)Sql
Server有外键的情况,主表记录删除,从表记录也会跟着删除;而Oracle默认情况是当从表有记录时,所对应的主表记录不允许删除。所以这种情况下外键需要添加外键级联删除。
(8)生成的表、视图等个数是否正确,缺失的情况可单独生成脚本。
系统不一样,出现问题的点可能也不一样,具体问题具体分析。
6、建库
在Oracle数据库服务(当然要先安装好Oracle服务端、并建立数据库)orcl实例下,使用用户sys登陆并创建用户orauser,并将resource、connect角色赋给orauser(这里,orauser使用默认表空间、默认临时表空间)。
用刚创建的用户orauser登陆orcl数据库服务,执行前面已经生成的脚本,若干分钟后脚本执行完毕,观察一下执行过程中有无错误产生,也可以记录执行的日志以便日后查看;检查看表、视图等个数与Sql
Server数据库中是否一致。如果都正确,那么,数据库结构从Sql
Server到Oracle的迁移到此结束。当然,迁移的是否正确还需要在之后的使用中检查,发现错误及时修改即可。
② sqlsever2005 中如何把一个数据库的表复制到另一个数据库中去
方法1:直接拷贝你的mdf,ldf文件到另一个数据库,附加上。
方法2:备份数据库,到新数据库上恢复。
方法3:数据库间导入。
个人建议用方法2。
③ 怎样把sql 2005的数据库转移到sql 2008
Step 1: 单击某个需要转换的数据库,然后选择任务(Tasks)——生成脚本(Generate Scripts)
Step 2: 弹出生成脚本指导界面
Step 3:选择需要导出的数据库对象,有导出整个数据库对象和选择指定数据库对象两个选项
Step 4: 设置生成脚本选项,例如指定脚本位置,脚本文件的编码等等选择,最重要的是高级选项”Advanced“
如下所示,最好在”Script for Server Version“ 里面选择”SQL Server 2005“等选项
测试服务器这个版本里面没有'Script Data”(生成数据的脚本)选项,如下所示,如果你要通过脚本插入数据,那么就必须选择这个选项。
Step 5: Summray your selections, 点击Next继续
Step 6: 执行过程。完成后即生成了相应脚本文件。
将生成的脚本在另外一台测试服务器执行,创建相应的数据库以及数据库对象。然后点击”SQL Server Import and Export“工具进行数据导入,操作步骤如下所示:
SQL Server Import and Export
Step 1: 欢迎界面,点击Next跳过。
Step 2: 选择数据源(Data Source),我们需要选择“SQL Server Native Client 10”, 输入身份认证信息,我选择Windows 身份认证。选择
需要导出数据的数据库,例如,我选择一个测试数据库TSL
Step 3:配置需要导入的Destination,选择对应的服务器和数据库
Step 4:两个选择,选项1是用于整个表或视图导入导出,选项2用于书写查询SQL或导入导出
Step 5: 勾选你需要导数的脚本,单击Source旁边的选项,即可选择全部对象。有时候需要编辑“Edit Mappings"选项,勾选”Enable identity Insert“,否则会导致后面导入导出报错
Step 6: 勾选立即执行,点击Next执行下一步
Step 7 : 执行过程,需要检查是否执行成功,查看相关出错信息。
执行完成后,然后在测试服务器将该数据库备份压缩后,通过FTP上传到各个工厂,进行还原。关于 Red Gate SQL Compare的操作,也非常方便简单,由于测试过程中没有截图,就此略过。
由于测试用的数据库比较小,不知道比较大的数据库,例如几百G的数据,操作起来是否会遇到性能等杂七杂八的问题。不过相信很多人是不会遇到这么奇葩的案例的。例如使用导入导出工具,其实就会遇到一些小问题(以前遇到的):
1:在验证时出现错误,错误信息如下所示:
- Validating (Error)
Messages
* Error 0xc02020f4: Data Flow Task 1: The column "xxxx" cannot be processed because more than one code page (936 and 1252) are specified for it.
(SQL Server Import and Export Wizard)
* Error 0xc02020f4: Data Flow Task 1: The column "xxxx" cannot be processed because more than one code page (936 and 1252) are specified for it.
(SQL Server Import and Export Wizard)
解决:检查你源数据库和目标数据库的排序规则是否不一致,如果不一致,就会出现大量上面错误。
2:在验证时出现下面错误信息
- Validating (Error)
Messages
* Error 0xc0202049: Data Flow Task 1: Failure inserting into the read-only column "xxxxx".
(SQL Server Import and Export Wizard)
* Error 0xc0202045: Data Flow Task 1: Column metadata validation failed.
(SQL Server Import and Export Wizard)
解决:出现这个错误,是因为这一列是自动增长,需要在”Edite Mappings" 选项里面勾选“Enable Identity Insert”选项,如果数据库里面有大量这类列,是个头疼的问题。
④ sql server 2005 如何迁移其他盘
如果你想只备份数据,不挪动数据库(即卸载-重装SQL-Server)
试试这个,
首先备份数据库:
BACKUPDATABASEBaiTest
TODISK='C:your_database.Bak'
WITHFORMAT,
MEDIANAME='C_your_database_Backups',
NAME='FullBackupofyour_database';
GO
然后,恢复数据到别的盘:
RESTOREDATABASEyour_databaseFROMDISK='C:your_database.Bak'
WITHreplace,
MOVE'your_database'TO'D:your_database_1.mdf',
MOVE'your_database_Log'TO'D:your_database_Log_1.ldf'
GO
⑤ sql 2005中怎么把一个数据库里的表及表里的数据导入到另一个数据库
复制表结构
1
首先,打开并连接Sql Server,在源数据库Source_db(源数据库名称)上右键,然后依次点击“编写表脚本为”→“CREATE到”→“新查询编辑器窗口”。
2
在第1步产生的编辑器中按”crtl+a“组合键全选内容,然后右键“复制“(或按"crtl+c"键)。
3
新建查询,然后右键”粘贴“(或ctrl+v);如图所示,将代码中Source_db(源数据库名)改为target_db(目标数据库名)。接着右键单击”执行“执行代码。
4
然后,在目标数据库的表结构中就可以看到被复制过来的表了。
END
表的数据内容复制
选中目标数据库target_db,然后点击”任务“→”导入数据“。
进入”SQL Server导入导出向导“,根据提示步骤操作。
选择数据源(源数据库)。
选择目标(目标数据库)、指定表复制或查询。
选择源表和源视图:设置源表和目标表后,单击“编辑映射”按钮,在弹出窗口中选中“启用标识插入”。(否则后面会出错)
一直点击“下一步”至最后完成操作。
⑥ 请教如何在sql server2005中导出数据库,然后导到另一台机器上
SQL
Server
Management
Studio里面操作步骤
在'数据库'选中你需要的数据库,右键-〉任务-〉分离
然后复制数据和日志两个文件到第二台机器上
在'数据库'右键-〉任务-〉附加
或者
在'数据库'选中你需要的数据库,右键-〉任务-〉备份-〉完整备份
将备份的文件复制到第二台机器上
新建一个空库,叫原来的名字
在这个库上右键-〉还原
⑦ 如何将sqlserver2005数据库中的数据全部转移到一台新电脑上的sqlserver2005数据库中
可以采用备份的方式
,
在数据库上右键
任务-》备份
,
选择好你要保持的路径
,
别忘记是.BAK格式
然后把备份发到新电脑上
你可以用U盘也可用网络共享(同一网段,或者局域网都通),或者用QQ都可以
接下来就是
对新电脑上的数据库进行还原
,
建个数据库和原来的名字一样,
主要
LOG文件的路径
一般我都放在D盘的DATA里面
(这个可以随意只要自己知道并且统一就行)
,
然后
在新建的数据库上右键
-》任务
-》
还原
-》
数据库
,
在目标数据库中选择你的还原的数据库
,
然后选择源设备
,
把刚才我们做好的备份选择进来
并且在前面打上钩
,
然后再‘选项’中把覆盖现有数据库勾上
,
把‘还原为’
(就是.mdf和.ldf的文件)的路径选择我们备份时候的路径
,
到这里一切都做好
只要按下确定就好了
。
如果对备份和还原还有什么不懂的可以继续追问
⑧ 如何将SQL Server数据库迁移到新服务器中
如何将SQL Server数据库迁移到新服务器中
首先,打开服务器上已经安装好的SQL Server 2005 服务器,并且用本地Windows身份登录。
2
打开SQL Server服务器以后,点击数据库--选择附加
3
打开附加数据库界面后,点击右小角的添加
4
打开电脑上,之前备份好的完成数据库文件,然后点击确认。
5
数据库文件和其数据库日志文件,就一并加载过来了,点击确认就可以了。
6
展开数据库,就可以了看到我
们刚刚附加过来的完整数据库了,现在就可以
使用
这个数据库。
⑨ 如何让 SQL server 2005数据库中的数据备份到另一台电脑上
【转发】
--SQL如何备份到异机
写成存储过程,建立作业定时备份~~~
--在sql中映射一下就可以了
exec
master..xp_cmdshell
'net
use
z:
\\yi\D$
"密码"
/user:yi\administrator'
/*--说明:
exec
master..xp_cmdshell
'net
use
z:
\\xz\c$
"密码"
/user:xz\administrator'
z:是映射网络路径对应本机的盘符,与下面的备份对应
\\xz\c$是要映射的网络路径
xz\administrator
xz是远程的计算机名,
administrator是登陆的用户名
密码
面指定的administrator用户的密码
--*/
--备份;with
init覆盖
|noinit添加
backup
database
库名
to
disk='E:\H_BACKUP.bak'
with
init
--COPY
exec
master..xp_cmdshell
'
E:\H_BACKUP.bak
z:'
--删除(这句可以去掉)
--exec
master..xp_cmdshell
'del
E:\H_BACKUP.bak'
--完成后删除映射
exec
master..xp_cmdshell
'net
use
z:
/delete'