真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

一、概述

現(xiàn)在有個(gè)需求,想把MySQL數(shù)據(jù)庫(kù)中的數(shù)據(jù)轉(zhuǎn)移到oracle數(shù)據(jù)庫(kù)中,網(wǎng)上找了好幾種方法,最后決定使用oracel sql developer這種工具來(lái)實(shí)現(xiàn)。

鄒平網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

Mysql和oracle屬于兩種不同的數(shù)據(jù)庫(kù),具體使用差異也有很多,不能簡(jiǎn)單使用sql文件進(jìn)行導(dǎo)出導(dǎo)入。以下幾個(gè)示例比較一下Mysql與oracle數(shù)據(jù)庫(kù)的差異

l SQL基本語(yǔ)法差異

MySQL的SQL語(yǔ)句中,要求表名、表的別名必須區(qū)分大小寫(可通過(guò)修改mysql配置文件my.cnf,增加lower_case_table_names=1來(lái)忽略大小寫,從而與Oracle盡量保持一致),尤其是表的別名。建議通過(guò)組內(nèi)開發(fā)規(guī)范統(tǒng)一起來(lái),以消除差異性。

MySQL的Insert語(yǔ)句,支持ignore語(yǔ)法忽略主鍵沖突報(bào)錯(cuò),如:insert ignore into table_name...;支持insert into ... on duplicate key update...的用法,此時(shí)要求表必須有主鍵或唯一性約束字段。

與insert語(yǔ)句類似,MySQL還支持replace into語(yǔ)句,若插入表中已存在數(shù)據(jù)時(shí),則用新數(shù)據(jù)記錄替換舊的記錄。

l 建表語(yǔ)句差異

創(chuàng)建表時(shí),MySQL不支持 create or replace,但可以通過(guò)drop table if exists tbl_name來(lái)重新創(chuàng)建表。

另外,在建表語(yǔ)句、建索引語(yǔ)句中,MySQL不支持tablespace后綴。此時(shí),可以將Oracle導(dǎo)出的DDL語(yǔ)句中,tablespace部分注釋掉;同時(shí),在導(dǎo)入MySQL數(shù)據(jù)庫(kù)時(shí),先執(zhí)行set @@sql_mode='oracle'以盡量保持與Oracle語(yǔ)法一致。具體sql_mode,可參考MySQL官方手冊(cè)等文檔。

l 內(nèi)置函數(shù)差異

具體參考https://www.cnblogs.com/HondaHsu/p/3641190.html

l 表主鍵取值差異

MySQL不支持Sequence,在表中可設(shè)置自增主鍵。如與Oracle兼容,可考慮統(tǒng)一采用function來(lái)封裝主鍵取值差異。

l 存儲(chǔ)過(guò)程差異

對(duì)于存儲(chǔ)過(guò)程而言,Oracle 的PLSQL與MySQL也是有較大不同的,比如,MySQL不支持包、不支持常量定義、不支持dbms_output調(diào)試……具體細(xì)節(jié)以后另外整理。

l 視圖差異

MySQL的視圖from語(yǔ)句中不允許存在子查詢,可以通過(guò)將子查詢創(chuàng)建為新的視圖的方式解決。Oracle的物化視圖相關(guān)概念,在MySQL中也不存在。

二、環(huán)境準(zhǔn)備

1、mysql準(zhǔn)備工作

mysql創(chuàng)建測(cè)試數(shù)據(jù),建立一個(gè)庫(kù),再建立一個(gè)表,隨便插入兩條數(shù)據(jù)

[root@DB mysqldb]# mysql -uroot -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 23
Server version: 5.1.73 Source distribution
 
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |      |
| mysql              |
| test               |
+--------------------+
3rows in set (0.12 sec)
 
mysql> create database test1;
Query OK, 1 row affected (0.03 sec)
 
mysql> use test1
Database changed
mysql> create table tb1(name varchar(20),age int);
Query OK, 0 rows affected (0.06 sec)
 
mysql> insert into tb1 values("tom",18);
Query OK, 1 row affected (0.00 sec)
 
mysql> insert into tb1 values("jerry",20);
Query OK, 1 row affected (0.00 sec)
 
mysql> select * from tb1;
+-------+------+
| name  | age  |
+-------+------+
| tom |   18 |
| jerry |   20 |
+-------+------+
2 rows in set (0.03 sec)
 
mysql> exit
Bye

2、Oracle準(zhǔn)備工作

 

在Mysql中,數(shù)據(jù)庫(kù)和用戶之間的關(guān)系不是特別明顯,只要我們鏈接到Mysql服務(wù)器,可以看到所有的數(shù)據(jù)庫(kù)和表,而Oracle新建一個(gè)用戶是沒(méi)有任何資源和權(quán)限的,需要我們?yōu)槠浞峙滟Y源權(quán)限,也可以在這個(gè)用戶下面建立表,但不能向Oracle那樣建數(shù)據(jù)庫(kù),因?yàn)閷?duì)oracle來(lái)說(shuō),一個(gè)用戶就對(duì)應(yīng)Mysql的一個(gè)數(shù)據(jù)庫(kù)。所以遷移數(shù)據(jù)庫(kù),需要在Oracle中創(chuàng)建一個(gè)與相應(yīng)mysql數(shù)據(jù)庫(kù)同名的用戶(我這里要遷移的mysql數(shù)據(jù)庫(kù)是test1,創(chuàng)建的oracle用戶名是test1).

這種情況要注意oracle數(shù)據(jù)庫(kù)的用戶名。因?yàn)閟ql developer把mysql轉(zhuǎn)換到oracle數(shù)據(jù)庫(kù)中時(shí),會(huì)把mysql的數(shù)據(jù)存放到一個(gè)用戶下,這個(gè)用戶名一定會(huì)和mysql的數(shù)據(jù)庫(kù)名相同。如果oracle中已有這個(gè)用戶,則數(shù)據(jù)直接導(dǎo)入到該用戶下;如果沒(méi)有這個(gè)用戶,則sql developer會(huì)直接創(chuàng)建這樣的用戶,并把數(shù)據(jù)導(dǎo)入到該用戶下。需要注意的是,sql developer默認(rèn)創(chuàng)建的oracle數(shù)據(jù)庫(kù)用戶的默認(rèn)表空間是user,如果不注意,很有可能會(huì)導(dǎo)致user表空間爆滿!所以這種情況最好先建一個(gè)和mysql數(shù)據(jù)庫(kù)名一樣的oracle用戶,以防止user表空間爆滿影響數(shù)據(jù)導(dǎo)入。

 

--創(chuàng)建表空間

CREATE TABLESPACE MY_TEST DATAFILE '/opt/oracle/oradata/test/MY_TEST.dbf' SIZE 100M 
    AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
    EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;

--創(chuàng)建用戶

CREATE USER test1 IDENTIFIED BY  test1 DEFAULT TABLESPACE MY_TEST TEMPORARY TABLESPACE TEMP;
GRANT CONNECT TO test1;
GRANT RESOURCE TO test1;
GRANT DBA TO test1;
GRANT UNLIMITED TABLESPACE TO test1;

3、所需要工具的安裝配置

oracel sql developer 獲取地址:

http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html

mysql-connector-java-5.1.44-bin.jar獲取地址

http://download.softagency.net/mysql/Downloads/Connector-J/

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

 

1是集成jdk的安裝程序,支持windows64位的操作系統(tǒng),不用自己額外安裝jdk環(huán)境;

2是不包含jdk的安裝程序,可以支持windows64位和windows32位的操作;

3可以選擇之前的幾個(gè)版本。

我這里下載的是sqldeveloper-4.1.3.20.78-x64.zip

注:

1如果安裝過(guò)程中出現(xiàn)一下錯(cuò)誤,需要用360掃一下注冊(cè)表,重新安裝一些補(bǔ)丁包就行了:

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

2移植過(guò)程最后可能出現(xiàn)下面提示:捕獲期間出錯(cuò),調(diào)用中的無(wú)效參數(shù)

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

移植報(bào)告內(nèi)容如下:

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

我這里查了網(wǎng)上資料也沒(méi)找到具體原因,只是換了一個(gè)低版本的oracle sql developer再次移植操作就OK了。所以勸大家最好不要使用最新版的oracle sql developer。不知道是不是涉及了兼容性的問(wèn)題

 

4、配置oracle sql developer連接mysql:

依次選擇“工具”-->“首選項(xiàng)”,在彈出的界面選擇“數(shù)據(jù)庫(kù)”-->“第三方JDBC驅(qū)動(dòng)程序”

MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

創(chuàng)建oracle的連接

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

創(chuàng)建mysql的連接

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

可以看到已經(jīng)連接上兩個(gè)數(shù)據(jù)庫(kù)了

MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù) 

三、開始移植

1. 刪除之前的移植資料庫(kù)

為充分能完成移植,不知數(shù)據(jù)庫(kù)之前有沒(méi)有移植過(guò),所以先把原來(lái)的移植資料庫(kù)

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

 

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

2. 開始移植操作

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)


 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)


 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)


 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

選擇要轉(zhuǎn)換的mysql數(shù)據(jù)庫(kù),添加到列表中:

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

指定轉(zhuǎn)換規(guī)則,可以根據(jù)自己的情況設(shè)定字段屬性的轉(zhuǎn)換,也可以新添加規(guī)則。不過(guò)一般選擇默認(rèn)的就能滿足需求

 

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

如果只導(dǎo)表結(jié)構(gòu)不導(dǎo)數(shù)據(jù),要勾選截?cái)鄶?shù)據(jù)

 

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

 

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

 

MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

可以看到在輸出目錄下面生成了幾個(gè)文件,打開前兩個(gè)看一下:

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

 

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

 

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

四、數(shù)據(jù)驗(yàn)證

Oracle sql developer中HSDB下可以看到在數(shù)據(jù)庫(kù)中能多了一個(gè)test1用戶,執(zhí)行查詢語(yǔ)句也能查到數(shù)據(jù),和上面在mysql中查到的結(jié)果一致

 MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)

我嘗試移植過(guò)另一個(gè)數(shù)據(jù)量比較大的庫(kù)。如果是導(dǎo)入的mysql庫(kù)中的數(shù)據(jù)量比較大,并不會(huì)立即就能查到數(shù)據(jù),這是由于oracle有個(gè)統(tǒng)計(jì)分析的機(jī)制。

統(tǒng)計(jì)信息主要是描述數(shù)據(jù)庫(kù)中表,索引的大小,規(guī)模,數(shù)據(jù)分布狀況等的一類信息。例如,表的行數(shù),塊數(shù),平均每行的大小,索引的leaf blocks,索引字段的行數(shù),不同值的大小等,都屬于統(tǒng)計(jì)信息。CBO正是根據(jù)這些統(tǒng)計(jì)信息數(shù)據(jù),計(jì)算出不同訪問(wèn)路徑下,不同join 方式下,各種計(jì)劃的成本,最后選擇出成本最小的計(jì)劃。

可以使用oracle自帶的dbms_stats 程序包進(jìn)行手動(dòng)收集系統(tǒng)統(tǒng)計(jì)信息。DBMS_STATS包,主要提供了搜集(gather),刪除(delete),導(dǎo)出(export),導(dǎo)入(import),修改(set)統(tǒng)計(jì)信息的方法。我在這里使用的語(yǔ)句如下:

exec dbms_stats.delete_schema_stats('TEST1');
exec dbms_stats.gather_schema_stats(ownname =>'TEST1',degree => 4,cascade => true);


當(dāng)前題目:MYSQL數(shù)據(jù)庫(kù)遷移到ORACLE數(shù)據(jù)庫(kù)
轉(zhuǎn)載來(lái)源:http://weahome.cn/article/iiippg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部