日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Oracle数据库迁移-基础

發布時間:2025/3/20 数据库 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle数据库迁移-基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Oracle數據庫遷移-基礎

作為一個開發人員,數據庫知識肯定是需要我們掌握的。但是目前公司的數據庫都是有專門的DBA維護的,一般都是給我們一個環境地址,然后我們書寫CRUD SQL。而且公司產品要求是可以跨數據源的,這樣平時基本上都不太關心特定數據庫平臺的操作。結果導致自己的DB知識嚴重不足。今天因為一些原因,需要在外網服務器上搭建演示環境,結果需要“悲劇”的自己操作數據庫。

任務:在外網服務器上搭建演示環境,包括服務器、代碼、數據庫。

解決方案:

(1)找一個新的產品安裝程序,然后去服務器安裝。

(2)把自己本地用的開發環境copy到服務器。

分析:

方案1,肯定可以安裝上產品,看起來是最簡單的方案。但是由于內部開發版本還不問題,沒有統一的完整的安裝程序,需要東拼西湊把各個部門的產品都找齊,然后安裝、然后打補丁。因為演示的是開發產品,所以最終代碼還不一定能運行,時間也會比較長。

方案2,看起來比較簡單,但是因為外網服務器無法訪問數據庫服務器,所以需要自己單獨做一下數據庫的遷移(從來沒做過)。糾結了一下,最后為了避免麻煩選中了方案2(-_-! 把自己坑了),然后跟測試要了一些資料:

Oracle數據庫導出:

?
1 2 --1:進sqlplus創建database directory ???SQL> create directory j(隨意取,建一次即可) as 'E:\reportback\20150429';?
?
1 2 --2:給相關用戶授權 SQL> grant read,write on directory j to nc60_fbs1(需要導出的數據庫用戶);
?
1 2 --3:退出sqlplus,執行導出語句 expdp nc60_fbs1/1 dumpfile=nc60fbs1.dmp(導出時自己取的名) logfile=nc60exp.log directory=pff parallel=2
?
1 2 3 4 5 6 7 說明: dumpfile為備份文件; logfile為日志文件; directory為上面創建的directory名(創建目錄); parallel為并行數; 注意:dumpfile和logfile后只需跟文件名,是相對于directory的相對路徑; 注意:上文中的'/data2/expdir'為linux下的路徑,若為windows則改為相應地址,切記。

看到上面的操作資料,有點頭大,以前很少操作Oracle數據庫,對于Oracle數據庫的結構不是很了解。上面的語句有似曾相識的感覺(絕對不是初戀的感覺),本著DB不要亂操作的原則。首先還是先補充點Oracle數據庫的基礎知識吧。


資料:(網上很多)

Oracle用戶/表空間/表的關系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用我們定義的目錄對象將數據導出到指定的位置,就好像我們編程的時候經常定義一個目錄變量,然后編程的時候直接用這個變量,這樣就不用每次都寫這個變量導致目錄位置不一致了。Directory的信息存儲在系統的dba_directories表中。

?
1 2 3 4 5 6 7 8 --創建目錄 Create directory 目錄名稱 as 目錄(注意windows和linux系統是不一樣的寫法); --查看已經創建的目錄 Select * from dba_directories; --刪除建立的目錄,用drop不是delete Drop directory 目錄名稱

2.User、tablespace、table之間的關系

Oracle數據庫的結構和MySql這類有很大區別,一邊數據庫的結構我們都從兩個方面列舉,物理層面和邏輯層面,也就是我們常說的數據庫的三層模式,兩種映射。Oracle的物理存儲結構很復雜,這里不討論,而且跟這次的數據遷移無關,如果硬要說,那導出的DMP文件就可以認為是Oracle的物理存儲的一種。

在MySql數據庫中,我們可以新建一個數據庫(create database)然后為用戶授權這個庫的權限。在Oracel中,同樣有用戶的概念,但是所謂的tablespace就可以認為是database,只不過是邏輯組織,table就是實際我們操作的表。

引用一個形象的比喻:

整個Oracle數據庫就是一個大的柜子,這個柜子會被分為多個層,每個層就是一個tablespace,每個層中的文件就是我們的table,文件中紙及上面的數據就是我們的data。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 --創建用戶,并指定表空間,一般都需要指定,放到默認表空間的很少 Create user 用戶名identified by 密碼? default tablespace? 表空間名稱 temporary tablespace temp; --還可以加上用戶權限 --去掉分好,加上: --quota Storage(unlimited , 8k, 10M etc.) on tablespace 表空間名稱 --修改用戶對表空間的權限 alter user IUFO6360330 quota unlimited on users; --查看實例 select instance_name from v$instance; --查詢用戶 select? * from dba_users; --關閉用戶會話

3.Expdp/exp/impdp/imp工具

Expdp/impdp:Oracle開發的供DBA進行數據導入導出的工具,并不是命令(最開始當做類似create的命了去執行了)。如果安裝Oracle或者客戶端工具的時候沒有問題,直接在cmd命了下輸入執行語句就可以了。

Exp/imp是客戶端的工具,expdp和impdp是服務器端工具,也就是如果我們用遠程的方式就用exp和imp工具如果是在DB服務器上就用expdp和impdp。

?
1 2 3 4 5 6 --expdp導出 --impdp導入,注意remap_schema還可以配置remap_table參數 --remap_schema基于用戶的,remap_table基于參數的 impdp 用戶名/密碼 dumpfile=文件.dmp logfile=log文件名.log directory=引用的目錄 parallel=2 remap_schema=源用戶名:目標用戶名


4.Sqlplus的作用

命令行環境下的oracle操作工具。

實際遷移:

對遷移步驟和遷移配置了解的差不多了,具體實施的時候,因為本人太懶(對程序員來說不是個好的習慣,不過好東西都是懶人發明的。)沒有在自己的機器上裝sqlplus,所以用DbVisualizer連接到了服務器數據庫,執行了directory的創建語句,然后給用戶授權(要換個用戶連接再授權,最好是用system admin身份登錄),之后要去服務器執行expdp命了,懶得去了弄了,就向QA要了一個之前備份過的庫。

獲得了備份文件,遠程到外網服務器,然后執行導入語句,執行導入前要新建一個用戶,并為用戶分配表空間和權限。分別tablespace和grant的步驟非常重要。第一次導入數據的時候,因為沒有給create后的user分配dba和connect的權限,所以導致了很多遷移失敗。

創建用戶的時候要注意指定tablespace,這個tablespace可以找DBA問,或者自己創建一個,但是自己創建的時候要指定tablespace的一些參數,如果不是DBA這些參數還是別亂設置了。

總結

以上是生活随笔為你收集整理的Oracle数据库迁移-基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。