將mysql數據庫的數據和表結構導入到oracle數據庫中

一、環境和需求
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、修改系統檢查點
SQL> ALTER SYSTEM CHECKPOINT;
5、修改新用戶密碼
SQL> ALTER USER 新用戶名 IDENTIFIED BY 新密碼;
6、如果提示新用戶不存在,則刷新shared_pool
SQL> ALTER USER 新用戶名 IDENTIFIED BY 新密碼         
  *ERROR 位於第 1 行:ORA-01918: 用戶'新用戶'不存在
SQL> ALTER SYSTEM FLUSH SHARED_POOL;
7、刷新shared_pool後重新修改用戶密碼
SQL> ALTER USER 新用戶 IDENTIFIED BY 新密碼;
8、測試連接
SQL> CONN 新用戶/新密碼@orcl;
9、查看新用戶是否擁有原用戶的對象
SQL> SELECT * FROM TAB;
五、mysql遠程連接1、改表法
       可能是你的帳號不允許從遠程登陸,只能在localhost。這個時候只要在localhost的那臺電腦,登入mysql後,更改 "mysql" 數據庫裏的 "user" 表裏的 "host" 項,從"localhost"改稱"%"。代碼如下:
mysql -u root –p vmware
mysql> use mysql;
  mysql> update user set host = '%' where user = 'root';
  mysql> select host, user from user;
2、授權法
例如,你想myuser使用mypassword從任何主機連接到mysql服務器的話。
       GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
  如果你想允許用戶myuser從ip爲192.168.1.6的主機連接到mysql服務器,並使用mypassword作爲密碼。
  GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3'IDENTIFIED BY
  'mypassword' WITH GRANT OPTION;
  我用的第一個方法,剛開始發現不行,在網上查了一下,少執行一個語句 mysql>FLUSH RIVILEGES使修改生效,就可以了。
3、另外一種方法
  在安裝mysql的機器上運行:
1)進入MySQL服務器
d:\mysql\bin\>mysql -h localhost -u root
2)賦予任何主機訪問數據的權限
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION
3)修改生效
mysql>FLUSH PRIVILEGES
4)退出MySQL服務器
mysql>EXIT
  這樣就可以在其它任何的主機上以root身份登錄啦。
如果經過上面的操作,還不能解決問題,那可能就是服務器的安全設置問題,是不是ip安全策略或防火牆沒有開啓3306的例外。
4、安全模式修改用戶密碼
在用root登錄mysql數據庫的時候報錯:
[root@mail mysql]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
       這個錯誤一般都是root登錄mysql的密碼錯誤造成的(root登錄mysql的密碼和登錄系統時的密碼不是同一個密碼,有時候可以不一樣),使用下面的方法可以重新設定root登錄mysql數據庫的密碼,該方法非常使用,有時候爲了系統安全,一定要把root登錄mysql和登錄系統時的密碼改成不一致:
[root@localhost mysql]# service mysqld stop
[root@localhost mysql]# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
       然後可以不用密碼直接進入系統:
[root@localhost mysql]# mysql -u root mysql
       進入系統後可以直接修改root用戶的密碼:
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
mysql> FLUSH PRIVILEGES;
mysql> quit
[root@localhost mysql]# service mysqld start
[root@localhost mysql]# mysql -uroot -p
Enter password: <輸入新設的密碼newpassword>
mysql>
       啓動mysql安全模式的命令參數:
       skip-grant-tables:grant-tables,授權表。在啓動mysql時不啓動這個表,像忘了密碼啥的,用這個模式啓動很方便的。
       skip-networking:不監聽3306,說白了就是不啓動mysql的網絡服務。
       user=mysql:這俺就不形容了。
六、linux下mysql卸載和安裝1、MySQL RPM版本的安裝及卸載
1、前期準備
       由於redhat Enterprise 5 中自帶一個mysql的版本,如果在安裝linux前未選擇mysql的安裝此步就可跳過,因爲我當時安裝了現在將其卸載,步驟如下:
a. 查找已安裝的myslq 版本
# rpm -qa|grep mysql
       注意大小寫,如果mysql 不行就換MySQL。在屏幕上將顯示已安裝的mysql包名如:mysql-5.0.22-2.1.0.1 ;
b. 將搜索出的包名卸載
# rpm –e --nodeps mysql-5.0.22-2.1.0.1
       nodeps表示強制刪除
c. 再次查找該包名
       如果沒有結果輸出則表明已將該版本的mysql卸載了 。
2. 準備安裝資源
a. perl-DBI-1.5.2-1.fc6.i386.rpm
       該包爲是安裝mysql的依賴,沒它mysql安裝不起,查看是否安裝,如果安裝了就不需要了,可以通過 # rpm -qa | grep perl* 查看是否已經安裝,該包在linux系統盤上可以找到,以下提供該包下載。
b. MySQL-server-community-5.0.67-0.rhel5.rpm
  MySQL-client-community-5.0.67-0.rhel5.rpm
       可從http://dev.mysql.com/downloads/mysql/5.0.html 下載相應linux相應的版本。
c. 安裝文件上傳到服務器
       準備好相應的安裝包後將其利用FTP上傳到 linux系統路徑下。
3. 開始安裝
a. 先安裝 perl-DBI-1.5.2-1.fc6.i386.rpm
#rpm -ivh perl-DBI-1.5.2-1.fc6.i386.rpm
       查看是否安裝成功rpm -qa|grep perl-DBI*
b. 安裝好perl,接着先安裝 mysql server版
#rpm -ivh MySQL-server-community-5.0.67-0.rhel5.rpm
       查看是否安裝成功rpm -qa|grep MySQL ,查看該進程是否啓動ps -ef|grep MySQL ,由於安裝好server版後就已經啓動了。
c. 安裝好server版,開始接着安裝 client版:
# rpm -ivh MySQL-client-community-5.0.67-0.rhel5.rpm
       查看是否安裝成功 #rpm -qa | MySQL。
d. 好了到此就已經安裝完畢,測試是否可以運行:
# mysql
       出現 mysql> 命令符說明安裝成功,默認用戶爲root沒有密碼所以可以直接進入。
2、           MySQL二進制版本的安裝及卸載
       二進制版本的mysql是已經編譯好的,無需configure,make make install 等步驟,只需配置一下即可使用,卸載也方便,直接刪除即可;現在以mysql-standard-4.1.13-pc-linux-gnu-i686.tar.gz 版本做介紹 :
1.    改變該文件爲可執行權限
# chmod 755  mysql-standard-4.1.13-pc-linux-gnu-i686.tar.gz
2. 將解壓後生成的目錄,複製到/usr/local/下並改名爲mysql
# tar -xvzf  mysql-standard-4.1.13-pc-linux-gnu-i686.tar.gz
2.    建立mysql組
# groupadd mysql
3.    建立mysql用戶並且加入到mysql組中
# useradd mysql -g mysql
4.    創建mysql配置文件
# cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
    在 support-files目錄下有4個模版文件,我們選擇其中一個座位Mysql的配置文件,覆蓋/etc/my.cnf(系統默認的配置,其中設置了性能參數和Mysql的一些路徑參數)。
5. 進入mysql目錄
# cd /usr/local/mysql
初試化表並且規定用mysql用戶來訪問
# ./scripts/mysql_install_db --user=mysql
       初始化表以後就開始給mysql和root用戶設定訪問權限。
6. 設定mysql用戶訪問權限
# chown -R mysql data
       設定mysql用戶能訪問/usr/local/mysql/data ,裏面存的是mysql的數據庫文件.這個目錄是在/etc/my.cnf中有配置,mysql_install_db時產生。
# chown -R mysql data/.
設定mysql用戶能訪問/usr/local/mysql/data/mysql下的所有文件。
# chgrp -R mysql .
設定mysql組能夠訪問/usr/local/mysql。
# /usr/local/mysql/bin/mysqld_safe --user=mysql &
7. 進入 bin目錄
cd /usr/local/mysql/bin
8. 運行mysq命令
#mysql
       如果沒有沒有啓動 或出現 Can't connect to local MySQL server through socket '/tmp/mysql.sock'。
解決方法:
#cd /usr/local/mysql/support-files
啓動即可既可在生成/tmp/mysql.sock
#./mysql.server start
       如果 /tmp/mysql.sock 無該文件存在,且mysql是處於開啓的狀態。
解決方法:
#netstat -an | grep 3306   //查看 3306端口
#ps -ef | grep mysql  // 查找 mysql 進程
# kill -9  進程號    //強制刪除mysql的進程號
#./mysql.server start   //啓動即可 既可在生成 /tmp/mysql.sock
       如果在任意路徑下如數mysql命令得到的無該命令咋辦呢?
解決方法:
修改 /etc/profile 文件,在文件中加入
PATH=$PATH:/usr/local/mysql/bin/
export PATH
       保存即可退出執行 source /etc/profile。以上操作完既可以在任意目錄執行# mysql 命令。
如果想執行 service mysql start or restart stop 命令咋辦的? 在不能老#./mysql.server start
解決方法:
將 mysql.server複製一份到/etc/rc.d/init.d下並改名 mysql 或 建個連接文件,假設當前目錄爲/etc/rc.d/init.d
如:#cp /usr/local/mysql/support-files/mysql.server mysql(複製)
或:#ln -s /usr/local/mysql/support-files/mysql.server mysql (建立連接文件)
完成以上操作即可  執行 service mysql start (or restart stop)
用如下命令修改MYSQL密碼
# /usr/local/mysql/bin/mysqladmin -u root password yourpassword
默認安裝密碼爲空,爲了安全你必須馬上修改。
# chmod 700 /etc/init.d/mysql
# chkconfig --add mysqld
# chkconfig --level 345 mysql on
copy編譯目錄的一個腳本設置使mysql每次啓動都能自動運行。
# service mysql start
# netstat -atln
//啓動mysql服務
//查看3306端口是否打開。要注意在防火牆中開放該端口。
可以用telnet  localhost  3306來測試一下,如果有反映,那就表明安裝成功了。
 
<帖子太長,接二樓。>

看來需要換個的人不多啊,呵呵。
PDF已經整理好了,需要的童鞋們回個帖開始下載吧:
 mysql遷移oracle.pdf (1.68 MB, 下載次數: 1965)

 
 
 
 
   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章