準備工作:
登入sys管理者賬号或帶dba權限的普通賬号進行建立新的表空間及使用者,并把使用者與表空間做關聯關系
---建立臨時表空間
create temporary tablespace yd_temp
tempfile 'D:\oracledata\file_temp.dbf' --windons對應磁盤路徑或Linux路徑
size 50m
autoextend on
next 50m maxsize 2048m
extent management local;
---建立表空間,并且擴容
create tablespace wsbsdt datafile '/home/oracle/abcdef.dbf'
size 1024M AUTOEXTEND on NEXT 8M MAXSIZE 32240M
---追加表空間大小
ALTER TABLESPACE wsbsdt ADD DATAFILE '/home/oracle/abcdef1.dbf'
SIZE 1024M AUTOEXTEND ON NEXT 8M MAXSIZE 32240M;
---建立使用者并指定表空間
create user loginname identified by 123456 --設定賬戶密碼loginname/123456
default tablespace file_data
temporary tablespace file_temp;
---給使用者授予dba權限
grant connect,resource,dba to loginname;
---檢視所有directory目錄
select * from dba_directories;
---使用dba使用者建立directory目錄,并手動在伺服器建立相應的目錄
create directory super_data as 'F:\bigData';
---删除directory目錄
drop directory super_data
---給使用者授予directory目錄的讀寫權限(目标使用者有dba權限則不用)
grant read,write on directory super_data to loginname
---查詢編碼集
SELECT * FROM NLS_DATABASE_PARAMETERS
---查詢目前使用者所有表資料
select sum(num_rows)
from (select t.table_name, t.num_rows, t.blocks, t.empty_blocks
from user_tables t)
---查詢表空間情況
SELECT tablespace_name,
file_id,
file_name,
round(bytes / (1024 * 1024), 0) total_space
FROM dba_data_files
ORDER BY tablespace_name;
---表空間使用情況
SELECT F.TABLESPACE_NAME,
(T.TOTAL_SPACE - F.FREE_SPACE) / 1024 "USED (GB)",
F.FREE_SPACE / 1024 "FREE (GB)",
T.TOTAL_SPACE / 1024 "TOTAL(GB)",
(ROUND((F.FREE_SPACE / T.TOTAL_SPACE) * 100)) || '% ' PER_FREE
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BLOCKS *
(SELECT VALUE / 1024
FROM V$PARAMETER
WHERE NAME = 'db_block_size') / 1024)) FREE_SPACE
FROM CDB_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT TABLESPACE_NAME, ROUND(SUM(BYTES / 1048576)) TOTAL_SPACE
FROM CDB_DATA_FILES
GROUP BY TABLESPACE_NAME) T
WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME;
---檢視表空間是否開啟了自動擴充的功能
SELECT T.TABLESPACE_NAME,D.FILE_NAME,D.AUTOEXTENSIBLE,D.BYTES,D.MAXBYTES,D.STATUS
FROM DBA_TABLESPACES T,DBA_DATA_FILES D
WHERE T.TABLESPACE_NAME =D.TABLESPACE_NAME
ORDER BY TABLESPACE_NAME,FILE_NAME;
Linux環境給使用者賦權 chown -R oracle:oinstall /home/oracle/data
Oracle資料泵方式的導出導入
oracle資料泵導出expdp
expdp zhangsan/[email protected]:1521/orcl
tables=SQWERTY106899
dumpfile=testdata.dmp directory=super_data
logfile=export.log version=11.2.0.1.0
說明
tables 資料庫表名,導出到多個表以逗号拼接即可,如果需要導出所有表則不需要此參數
dumpfile 是導出的名字任意填寫
directory 是導出的存放路徑
logfile 導出日志檔案,目前目錄下第一次導出不需要此參數
version 版本号參數,隻有高版本往低版本導入資料,在高版本導出時需要加上參數并對應低版本的版本号
oracle資料泵導入impdp
impdp wangwu/[email protected]:1521/orcl directory=super_data
dumpfile=QWERTY6899.dmp remap_tablespace=tb_namespace:tb_dataspace
remap_schema=zhangsan:wangwu table_exists_action=replace
說明
directory 導入檔案存放的路徑
dumpfile 導入檔案的名字
remap_tablespace 導出資料庫的表空間名與目标導入的資料庫表空間名
remap_schema 導出使用者名與導入使用者名(必要)
table_exists_action 表示對存在的表結構的處理,有以下四種方式
1) skip:預設操作
2) replace:先drop表,然後建立表,最後插入資料(首選)
3) append:在原來資料的基礎上增加資料
4) truncate:先truncate,然後再插入資料
Oracle普通方式的導出導入
oracle普通導出exp
exp zhangsan/[email protected]:1521/orcl
file=E:\work\QWERTY6689.dmp tables=(ASDFGHJ9988)
說明
file 導出檔案存放路徑及名字
tables 需要導出的資料庫表,多個表以逗号拼接,如需導出所有表則去掉此參數
oracle普通導入imp
(導入目标庫前如存在相同表、視圖和函數需先手動清掉,否則是直接追加資料)
imp wangwu/[email protected]:1521/orcl file=E:/work/ASDFGHJ8899.dmp
ignore=y full=y tablespaces=tb_space
說明
file 導入檔案存放路徑
ignore 是否忽略建立錯誤y/n,一般是y
full 是否導出整個檔案y/n,一般是y
tablespaces 導出資料庫的表空間名
總結
什麼時候用資料泵什麼時候普通方式導入導出資料根據實際情況決定,一般資料量特别大的資料十萬及百萬級以上推薦使用資料泵,導出導入速度非常快,但需要dba權限才能操控檔案目錄建立或授權給使用者。資料量十萬以下的用普通方式導出即可,普通方式操作簡單快捷
常見問題解決
問題1:當使用資料泵要導入資料時候,隻有一個dmp檔案,其他資訊都不知道情況下,怎麼能快速擷取到源資料的使用者名和表空間名順利導入資料呢?
解決思路:
按照正常資料泵導入寫好導入的指令,不知道使用者名和表空間則不寫參數 remap_tablespace 和 remap_schema
如,
E:\work\develop\oracle11g_11_2_0\product\11.2.0\dbhome_1\BIN>impdp zhangsan/[email protected]:1521/orcl
directory=SUPER_DATA dumpfile=ASDFGHJ9988.dmp
直接回車,然後會報一堆錯誤,找到這個錯誤
ORA-01918: user 'wangwu' does not exist
從中就可以擷取到源資料的導出使用者名為“ wangwu ”,然後在導入指令中加上 remap_schema 參數再次執行,
依然報錯,找到此錯誤
ORA-00959: tablespace 'TESTSPACE' does not exist
可以看出這個“TESTSPACE”就是源資料的表空間名
至此,就取得了源資料的使用者名和表空間名,再次加上 remap_tablespace 參數就能順利導入資料了
問題2:當做資料遷移,由于導出導入端資料有權限或其他限制,隻能用exp,imp導出導入,如果表結構包含clob資料類型字段,則在導入時無法建立表結構,連帶着資料無法導入,會報表空間不一緻的錯誤,無法導入該表
解決思路:
1、單獨導出包含clob字段的表,手動建立表結構,然後在使用imp導入時候去掉參數 ignore=y ,加上data_only=y,然後資料就可以順利導入。
2、重新建立一個報錯時候的表空間名,imp語句不改變也可以順利導入
未完待續... ...