一、环境和需求1、环境
Mysql数据库服务器:
OS version:linux 5.3 for 64 bit
Mysql Server version: 5.0.45
Oracle数据库服务器:
OS version:linux 5.3 for 64 bit
Oracle version:oracle 11g
r2
2、需求
把mysql数据库的数据转移到oracle数据库。目前mysql数据库的备份文件为.sql文件,每个表一个.sql文件,把这些文件的数据导入到oracle数据库。
二、mysql数据恢复
采用先把mysql数据库备份文件恢复到一个mysql测试库中,然后使用oracle sql developer把mysql测试库中的数据转移到oracle数据库。
mysql备份恢复到myql测试库:
因为本次试验采用的mysql备份为.sql文件,所以采用批量source处理。批量执行.sql文件,实现在mysql测试库重新建立表并恢复数据。
如果备份文件采用的是其他方式,则需要用对应的恢复办法进行恢复。
恢复操作:
[root@localhost ~]# mysql -u root -p
Enter password:---输入root用户的密码。
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 90
Server version: 5.0.45 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use test;
Database changed
mysql> source actors.sql;
mysql> source act_tactics.sql;
mysql> ………………
一次把所有的.sql文件贴在mysql的命令窗口,批量执行即可。
注:因为mysql库是生产库,不能直接做实验,所以才把备份恢复到一个测试库中,进行测试,实际中如果可以直接连mysql数据库,则这一步可以省略。
三、通过oracel
sql developer转换数据库
Mysql转到oracle数据库,要根据不同情况选择不同的方法:
1、从现有的mysql库直接转到oracle数据库
这是不用恢复mysql数据库,直接可以用sql developer转到oracle里,这时要现在oracle数据库中建好用户(用户名为mysql数据库名),选好默认表空间,mysql数据就会导入到该用户下。
2、从mysql数据库导出的sql文件导入到oracle数据库
如果是只有mysql的导出文件,则需要先把该文件恢复到一个mysql数据库中,然后再把恢复后的mysql数据库转换到oracle数据库中。
这种情况要注意oracle数据库的用户名。因为sql developer把mysql转换到oracle数据库中时,会把mysql的数据存放到一个用户下,这个用户名一定会和mysql的数据库名相同。如果oracle中已有这个用户,则数据直接导入到该用户下;如果没有这个用户,则sql
developer会直接创建这样的用户,并把数据导入到该用户下。需要注意的是,sql developer默认创建的oracle数据库用户的默认表空间是user,如果不注意,很有可能会导致user表空间爆满!!!所以这种情况最好先建一个和mysql数据库名一样的oracle用户,以防止user表空间爆满影响数据导入。
1、安装oracel
sql developer
首先从oracle官方网站下载oracle sql developer,下载的sql developer是没有集成jdk的,如果本机也没有安装过jdk,则需要先安装对应版本的jdk,这个可以查找sql developer的readme.html文件,里面会说明需要的jdk。
安装的第一步会让你选择JDK,否则无法安装。安装非常简单,这里就不做说明。
Windowd 64位sqldeveloper下载:
Windowd 32位sqldeveloper下载:
安装JDK和mysql-connector-java:
jdk-6u27-windows-x64.exe下载地址(最第要用jdk-6u11以后的版本):
mysql-connector-java各版本下载:
mysql-connector-java配置:
以上的mysql-connector-java-5.0.8-bin.jar就是mysql-connector-java-5.0.8.zip解压出来的文件。配置好jdbc后,即可开始数据库连接。
如果要连接sql server,则下载jtds-1.2.5-dist.zip配置即可。
2、连接数据库
连接oracle的用户要有create table权限,一般用system用户就可以。连mysql数据库因为是读取数据,用什么用户都可以(一般默认是root用户)。
转换后oracle数据库会多一个新的用户名,就是mysql的数据库名。除了这个用户,系统还会自动建一个名为EMULATION的用户,该用户可以锁定或删除都可以。
打开sqldeveloper.exe:
新建oracle数据库连接:
Sql developer转换数据时会产生一些字典表,这些字典表会保存到sql developer链接oracle数据库的用户中,如果这个用户的名字和Mysql数据库名字不同,则mysql数据不会保存在该用户下。
点击测试,测试连接:
点击保存:
点击连接,即可连接到oracle数据库:
新建mysql数据库连接:
1.)选择mysql选项卡
2.)填写mysql数据库信息
填写完进行测试,成功后点击保存,并连接到mysql数据库。
3、复制表
如果不用迁移整个数据,只是迁移表的数据,则可以直接在mysql数据库库中选中要转移的表,点“右键”选“复制到oracle”即可。此时会把表转移到sql
developer链接oracle数据库的用户下,并且该用户下不能有同名的表。
不过从以往的经验看,复制表要比迁移数据库效率低,所以如果是复制所有的表,最好用移植数据库功能。
4、移植数据库
点击“工具”,选择“移植”
移植简介
选择要转换的mysql数据库,添加到列表中:
指定转换规则,可以根据自己的情况设定字段属性的转换,也可以新添加规则。不过一般选择默认的就能满足需求。
选择目标数据库
查看转换概要,点击“完成”开始转换
转换完成后需要检查数据库的各种对象是否完成,状态是否正确,尤其是表的数量一定要核对,因为有时候有些表会不能成功转换,需要手工操作。
四、修改oracle用户名
因为转换过来的数据默认存放在USERS表空间里,而且会创建一个和mysql数据库名一模一样的oracle用户,并把mysql数据库导入到该用户下。可以exp出来新用户的数据后,然后再导入到正确的用户下,这样数据也会存在正确的表空间下面。但是如果数据量很大的时候,exp/imp会很浪费时间,建议数据量大的时候不要采用这种方式。
如果要是先建好用户(用户名用mysql数据库的数据库名),定义好用户的默认表空间,然后再做mysql到oracle转换,这样就可以即把表存放到正确的位置,又可以用正确的用户名。也可以改变数据库的默认表空间防止自动创建用户的默认表空间使用user表空间:
SQL> ALTER DATABASE DEFAULT TABLESPACE mis_data;
注意:改过名字的用户,权限会继承,但是默认表空间不会继承,需要手工再设定默认表空间:
SQL> ALTER USER OA identified by oa default tablespace MIS_DATA temporary tablespace TEMP;
修改底层表USER$更换用户名
注:修改oracle用户名需要sys用户,或者给操作用户操作user$表的权限。
SQL> grant select on user$ TO system;
SQL> grant update on user$ to system;
1、 查看用户的user#
SQL> show user
USER is "SYSTEM"
SQL> select user#,NAME from SYS.user$ WHERE NAME='TEST';
USER# NAME
---------- ------------------------------
93 TEST
2、修改用户名
SQL> UPDATE USER$ SET NAME='新用户名' WHERE USER#=93;
已更新 1 行。
注:单引号中的新用户名一定要用大写,如果是小写,下面会提示找不到该用户。
3、提交完成
SQL> COMMIT;
4、修改系统检查点