Oracle数据库迁移-基础
Oracle數(shù)據(jù)庫遷移-基礎(chǔ)
作為一個開發(fā)人員,數(shù)據(jù)庫知識肯定是需要我們掌握的。但是目前公司的數(shù)據(jù)庫都是有專門的DBA維護(hù)的,一般都是給我們一個環(huán)境地址,然后我們書寫CRUD SQL。而且公司產(chǎn)品要求是可以跨數(shù)據(jù)源的,這樣平時基本上都不太關(guān)心特定數(shù)據(jù)庫平臺的操作。結(jié)果導(dǎo)致自己的DB知識嚴(yán)重不足。今天因?yàn)橐恍┰?#xff0c;需要在外網(wǎng)服務(wù)器上搭建演示環(huán)境,結(jié)果需要“悲劇”的自己操作數(shù)據(jù)庫。
任務(wù):在外網(wǎng)服務(wù)器上搭建演示環(huán)境,包括服務(wù)器、代碼、數(shù)據(jù)庫。
解決方案:
(1)找一個新的產(chǎn)品安裝程序,然后去服務(wù)器安裝。
(2)把自己本地用的開發(fā)環(huán)境copy到服務(wù)器。
分析:
方案1,肯定可以安裝上產(chǎn)品,看起來是最簡單的方案。但是由于內(nèi)部開發(fā)版本還不問題,沒有統(tǒng)一的完整的安裝程序,需要東拼西湊把各個部門的產(chǎn)品都找齊,然后安裝、然后打補(bǔ)丁。因?yàn)檠菔镜氖情_發(fā)產(chǎn)品,所以最終代碼還不一定能運(yùn)行,時間也會比較長。
方案2,看起來比較簡單,但是因?yàn)橥饩W(wǎng)服務(wù)器無法訪問數(shù)據(jù)庫服務(wù)器,所以需要自己單獨(dú)做一下數(shù)據(jù)庫的遷移(從來沒做過)。糾結(jié)了一下,最后為了避免麻煩選中了方案2(-_-! 把自己坑了),然后跟測試要了一些資料:
Oracle數(shù)據(jù)庫導(dǎo)出:
?
| 1 2 | --1:進(jìn)sqlplus創(chuàng)建database directory ???SQL> create directory j(隨意取,建一次即可) as 'E:\reportback\20150429';? |
| 1 2 | --2:給相關(guān)用戶授權(quán) SQL> grant read,write on directory j to nc60_fbs1(需要導(dǎo)出的數(shù)據(jù)庫用戶); |
| 1 2 | --3:退出sqlplus,執(zhí)行導(dǎo)出語句 expdp nc60_fbs1/1 dumpfile=nc60fbs1.dmp(導(dǎo)出時自己取的名) logfile=nc60exp.log directory=pff parallel=2 |
| 1 2 3 4 5 6 7 | 說明: dumpfile為備份文件; logfile為日志文件; directory為上面創(chuàng)建的directory名(創(chuàng)建目錄); parallel為并行數(shù); 注意:dumpfile和logfile后只需跟文件名,是相對于directory的相對路徑; 注意:上文中的'/data2/expdir'為linux下的路徑,若為windows則改為相應(yīng)地址,切記。 |
看到上面的操作資料,有點(diǎn)頭大,以前很少操作Oracle數(shù)據(jù)庫,對于Oracle數(shù)據(jù)庫的結(jié)構(gòu)不是很了解。上面的語句有似曾相識的感覺(絕對不是初戀的感覺),本著DB不要亂操作的原則。首先還是先補(bǔ)充點(diǎn)Oracle數(shù)據(jù)庫的基礎(chǔ)知識吧。
資料:(網(wǎng)上很多)
Oracle用戶/表空間/表的關(guān)系http://www.cnblogs.com/adforce/p/3312252.html
EXPDP工具:http://jingyan.baidu.com/article/9113f81b2040862b3314c757.html
Sqlplus使用:http://blog.chinaunix.net/uid-74941-id-85228.html
Directory命了:http://blog.csdn.net/bisal/article/details/24667609
整理:
1.Directory命令
Directory命了用于定義一個目錄對象,Oracle用我們定義的目錄對象將數(shù)據(jù)導(dǎo)出到指定的位置,就好像我們編程的時候經(jīng)常定義一個目錄變量,然后編程的時候直接用這個變量,這樣就不用每次都寫這個變量導(dǎo)致目錄位置不一致了。Directory的信息存儲在系統(tǒng)的dba_directories表中。
?
| 1 2 3 4 5 6 7 8 | --創(chuàng)建目錄 Create directory 目錄名稱 as 目錄(注意windows和linux系統(tǒng)是不一樣的寫法); --查看已經(jīng)創(chuàng)建的目錄 Select * from dba_directories; --刪除建立的目錄,用drop不是delete Drop directory 目錄名稱 |
2.User、tablespace、table之間的關(guān)系
Oracle數(shù)據(jù)庫的結(jié)構(gòu)和MySql這類有很大區(qū)別,一邊數(shù)據(jù)庫的結(jié)構(gòu)我們都從兩個方面列舉,物理層面和邏輯層面,也就是我們常說的數(shù)據(jù)庫的三層模式,兩種映射。Oracle的物理存儲結(jié)構(gòu)很復(fù)雜,這里不討論,而且跟這次的數(shù)據(jù)遷移無關(guān),如果硬要說,那導(dǎo)出的DMP文件就可以認(rèn)為是Oracle的物理存儲的一種。
在MySql數(shù)據(jù)庫中,我們可以新建一個數(shù)據(jù)庫(create database)然后為用戶授權(quán)這個庫的權(quán)限。在Oracel中,同樣有用戶的概念,但是所謂的tablespace就可以認(rèn)為是database,只不過是邏輯組織,table就是實(shí)際我們操作的表。
引用一個形象的比喻:
整個Oracle數(shù)據(jù)庫就是一個大的柜子,這個柜子會被分為多個層,每個層就是一個tablespace,每個層中的文件就是我們的table,文件中紙及上面的數(shù)據(jù)就是我們的data。
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | --創(chuàng)建用戶,并指定表空間,一般都需要指定,放到默認(rèn)表空間的很少 Create user 用戶名identified by 密碼? default tablespace? 表空間名稱 temporary tablespace temp; --還可以加上用戶權(quán)限 --去掉分好,加上: --quota Storage(unlimited , 8k, 10M etc.) on tablespace 表空間名稱 --修改用戶對表空間的權(quán)限 alter user IUFO6360330 quota unlimited on users; --查看實(shí)例 select instance_name from v$instance; --查詢用戶 select? * from dba_users; --關(guān)閉用戶會話 |
3.Expdp/exp/impdp/imp工具
Expdp/impdp:Oracle開發(fā)的供DBA進(jìn)行數(shù)據(jù)導(dǎo)入導(dǎo)出的工具,并不是命令(最開始當(dāng)做類似create的命了去執(zhí)行了)。如果安裝Oracle或者客戶端工具的時候沒有問題,直接在cmd命了下輸入執(zhí)行語句就可以了。
Exp/imp是客戶端的工具,expdp和impdp是服務(wù)器端工具,也就是如果我們用遠(yuǎn)程的方式就用exp和imp工具如果是在DB服務(wù)器上就用expdp和impdp。
?
| 1 2 3 4 5 6 | --expdp導(dǎo)出 --impdp導(dǎo)入,注意remap_schema還可以配置remap_table參數(shù) --remap_schema基于用戶的,remap_table基于參數(shù)的 impdp 用戶名/密碼 dumpfile=文件.dmp logfile=log文件名.log directory=引用的目錄 parallel=2 remap_schema=源用戶名:目標(biāo)用戶名 |
4.Sqlplus的作用
命令行環(huán)境下的oracle操作工具。
實(shí)際遷移:
對遷移步驟和遷移配置了解的差不多了,具體實(shí)施的時候,因?yàn)楸救颂珣?#xff08;對程序員來說不是個好的習(xí)慣,不過好東西都是懶人發(fā)明的。)沒有在自己的機(jī)器上裝sqlplus,所以用DbVisualizer連接到了服務(wù)器數(shù)據(jù)庫,執(zhí)行了directory的創(chuàng)建語句,然后給用戶授權(quán)(要換個用戶連接再授權(quán),最好是用system admin身份登錄),之后要去服務(wù)器執(zhí)行expdp命了,懶得去了弄了,就向QA要了一個之前備份過的庫。
獲得了備份文件,遠(yuǎn)程到外網(wǎng)服務(wù)器,然后執(zhí)行導(dǎo)入語句,執(zhí)行導(dǎo)入前要新建一個用戶,并為用戶分配表空間和權(quán)限。分別tablespace和grant的步驟非常重要。第一次導(dǎo)入數(shù)據(jù)的時候,因?yàn)闆]有給create后的user分配dba和connect的權(quán)限,所以導(dǎo)致了很多遷移失敗。
創(chuàng)建用戶的時候要注意指定tablespace,這個tablespace可以找DBA問,或者自己創(chuàng)建一個,但是自己創(chuàng)建的時候要指定tablespace的一些參數(shù),如果不是DBA這些參數(shù)還是別亂設(shè)置了。
總結(jié)
以上是生活随笔為你收集整理的Oracle数据库迁移-基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ORACLE 迁移
- 下一篇: 访问SAP时提示报错SAP GUI fo