- 記一次Oracle數據庫遷移的整個過程
- 第一步:將原始數據庫導出
- 方式1(推薦):使用Data Pump
- 方式2(數據庫較大時速度慢):使用exp命令
- 第二步:創建一個數據庫實例(也可以使用原有的實例,只需要創建表空間)
- 1.1 創建實例
- 1.2 創建表空間(與原數據庫表空間名稱保持一致)\刪除表空間
- 1.3 創建用户並關聯表空間
- 1.4 設置用户權限\撤銷用户權限
- 第三步:導入
- 方式1(推薦):使用Data Pump
- 方式2(數據庫較大時速度慢):使用imp命令
- 總結:
- 第一步:將原始數據庫導出
記一次Oracle數據庫遷移的整個過程
簡單談談本人對Oracle數據庫的理解
| 數據庫實例 | 表空間 | 用户 |
|---|---|---|
| 一台服務器上可存在一個或多個實例,可以理解為一個個小區 | 只存在於數據庫實例當中,可以包含表、視圖、索引等。可以理解為小區中的每棟樓,其中包含房子、傢俱等 | 只存在與實例當中,操作表空間中的內容如表、視圖、索引等也可操作實例。可以理解為買樓的人。一個用户可以綁定多個實例同時也可以設置不同的權限,可以理解為是否可以對屬於你的某棟樓進行裝修、開門等動作 |
話不多説直接開始
第一步:將原始數據庫導出
方式1(推薦):使用Data Pump
--創建文件路徑
create or replace directory 路徑名 as 'C:\backup' --根據情況自定義
--執行導出命令
expdp 用户名/密碼@IP地址:端口/實例名 directory=路徑名 dumpfile=backupDemo.dmp
directory:等於創建的路徑名稱
執行成功後文件保存在 C:\backup 路徑下,文件名為 backupDemo.dmp
方式2(數據庫較大時速度慢):使用exp命令
--基本用法1:導出全部庫
exp 用户名/密碼@IP地址:端口/實例名 file=C:\backup\backupDemo.dmp full=y
--基本用法2:導出某個用户的某個庫
exp 用户名/密碼@IP地址:端口/實例名 file=C:\backup\backupDemo.dmp owner=users
--基本用法3:導出某個用户的某個表
exp 用户名/密碼@IP地址:端口/實例名 file=C:\backup\backupDemo.dmp tables=(table1,table2)
file=C:\backup\backupDemo.dmp 表示文件存放位置
full=y 表示導出整個庫
owner=users 表示要導出的用户
tables=(table1,table2) 表示導出的表名
第二步:創建一個數據庫實例(也可以使用原有的實例,只需要創建表空間)
1.1 創建實例
在服務器上找到 Database Configuration Assistant 工具,打開後如沒有特殊需求一直點擊下一步即可
輸入數據庫名稱(數據庫鏈接時的實例名稱),這個要記好
注意在設置密碼時為方便可用統一管理
創建完成可能會有警告信息,退出即可
使用 sqlplus 進行連接
//管理員賬號進行登錄
sqlplus system/密碼@IP地址:端口/實例名
能打通表示創建成功!
1.2 創建表空間(與原數據庫表空間名稱保持一致)\刪除表空間
--創建臨時表空間(用於存儲數據庫操作過程中的臨時數據)
CREATE TEMPORARY TABLESPACE temp --臨時表空間名稱
TEMPFILE 'C:\app\Administrator\oradata\temp.DBF' -- 找到自己的存放位置
SIZE 50M -- 初始大小為50M
AUTOEXTEND ON -- 自動擴展
NEXT 50M MAXSIZE 20480M -- 每次增量為50M ,最大2048M
EXTENT MANAGEMENT LOCAL;
--創建表空間
CREATE TABLESPACE demo --臨時表空間名稱
LOGGING
DATAFILE 'C:\app\Administrator\oradata\demo.DBF' -- 找到自己的存放位置
SIZE 50M -- 初始大小為50M
AUTOEXTEND ON -- 自動擴展
NEXT 50M MAXSIZE 20480M -- 每次增量為50M ,最大2048M
EXTENT MANAGEMENT LOCAL;
--刪除表空間
DROP TABLESPACE 表空間名 INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS
1.3 創建用户並關聯表空間
CREATE USER 用户名 IDENTIFIED BY 密碼
DEFAULT TABLESPACE demo -- 表空間
TEMPORARY TABLESPACE temp; -- 臨時表空間
--修改用户表空間(分配錯誤或調整用户權限時使用)
ALTER USER 用户名 DEFAULT TABLESPACE demo01;
1.4 設置用户權限\撤銷用户權限
Oracle提供多種系統預定義角色
--給用户授權
--CONNECT角色:連接權限
--RESOURCE角色:創建一些特定的數據庫對象等
--DBA角色:所有系統權限
GRANT CONNECT,RESOURCE,DBA TO userName;
--撤銷用户權限(分配錯誤或調整用户權限時使用)
REVOKE CONNECT,RESOURCE FROM userName;
第三步:導入
這裏要注意的是由於exp和expdp導出的原文件格式有區別,使用exp導出的文件只能用imp導入,expdb同理
方式1(推薦):使用Data Pump
--創建文件路徑
create or replace directory 路徑名 as 'C:\backup' --根據情況自定義
--執行導入命令
impdp 用户名/密碼@IP地址:端口/實例名
remap_schema=原模式名:目標模式名
directory=路徑名
dumpfile=backupDemo.dmp
logfile=export.log
TABLE_EXISTS_ACTION=REPLACE
remap_schema=原模式名:目標模式名:表示將數據還原到同名的模式中,如果目標庫沒有這個用户,需要先創建
logfile=export.log:導入過程日誌文件的名稱。該日誌文件也會被寫入到 directory參數指定的目錄中
TABLE_EXISTS_ACTION=REPLACE:當要導入的表在目標模式中已經存在時,指定如何處理
常用參數
REPLACE:刪除目標數據庫中已存在的表,然後重新創建並導入數據
APPEND:向現有表追加數據
SKIP:跳過已存在的表
TRUNCATE:截斷現有表的數據再導入
方式2(數據庫較大時速度慢):使用imp命令
imp 用户名/密碼@IP地址:端口/實例名
FILE=c:\backup\backupDemo.dmp
FULL=Y
ignore=y
FULL=Y:導入轉儲文件中的全部內容
ignore=y:遇到“對象已經存在”的創建錯誤(ORA-00955)時,忽略這個錯誤並繼續處理
總結:
按照步驟即可實現基本的數據庫複製以及還原,再導入過程中可能會遇到內存不足、主鍵衝突等問題。查看日誌定位到有問題的地方解決即可。