準備工作:
登錄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語句不改變也可以順利導入
未完待續... ...