-- 單用戶
exp scott/tiger file=scott.dmp
-- 多用戶
exp system/manager owner=(user1,user2) file=multi.dmp
-- 單表
exp user/pass tables=emp
-- 多表
exp user/pass tables=(emp,dept)
-- 跨用戶表(需 DBA)
exp system/manager tables=(scott.emp,hr.dept)
exp scott/tiger file=a.dmp
imp test/test fromuser=scott tables=emp file=a.dmp
imp test/test tables=dept file=a.dmp
關鍵規則:導出用戶若有 DBA 權限,導入用戶也必須有 DBA;否則可省略 FROMUSER/TOUSER。
-- 表註釋
COMMENT ON TABLE emp IS '員工基本信息表';
-- 列註釋
COMMENT ON COLUMN emp.ename IS '員工姓名';
-- 查詢註釋
SELECT * FROM USER_TAB_COMMENTS WHERE COMMENTS IS NOT NULL;
SELECT * FROM USER_COL_COMMENTS WHERE COMMENTS IS NOT NULL;
| 需求 | SQL |
|---|---|
| 當前用戶對象列表 | SELECT * FROM TAB; |
| 表結構描述 | DESC table_name |
| 表空間使用率 | 見下方詳細查詢 |
| 回滾段狀態 | SELECT SEGMENT_NAME,STATUS FROM DBA_ROLLBACK_SEGS; |
| 數據文件路徑 | SELECT TABLESPACE_NAME,FILE_NAME FROM DBA_DATA_FILES ORDER BY FILE_ID; |
| 當前連接用戶 | SHOW USER |
COL TABLESPACE FORMAT A20
SELECT B.FILE_ID 文件ID,
B.TABLESPACE_NAME 表空間,
B.FILE_NAME 物理文件,
B.BYTES 總字節,
(B.BYTES - SUM(NVL(A.BYTES,0))) 已使用,
SUM(NVL(A.BYTES,0)) 剩餘,
ROUND(SUM(NVL(A.BYTES,0))/B.BYTES*100,2) 剩餘百分比
FROM DBA_FREE_SPACE A, DBA_DATA_FILES B
WHERE A.FILE_ID = B.FILE_ID
GROUP BY B.TABLESPACE_NAME, B.FILE_NAME, B.FILE_ID, B.BYTES
ORDER BY B.TABLESPACE_NAME;
| 場景 | SQL/命令 |
|---|---|
| 建同結構空表 | CREATE TABLE b AS SELECT * FROM a WHERE 1=2; |
| 備份表數據 | CREATE TABLE emp_bak AS SELECT * FROM emp; |
| 查重複記錄 | SELECT sid,COUNT(*) FROM t GROUP BY sid HAVING COUNT(*)>1; |
| 字符串拼接 | col1||col2 或 CONCAT(col1,col2) |
| 格式化日期 | TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') |
| 跨用戶複製表 | COPY FROM u1/p1@db1 TO u2/p2@db2 CREATE t2 USING SELECT * FROM t1; |
| 視圖排序繞過 | CREATE VIEW v AS SELECT * FROM t GROUP BY col1,col2;(代替 ORDER BY) |
| 快速創建用戶 | GRANT CONNECT,RESOURCE TO u IDENTIFIED BY pwd; |
COUNT(*):行數SUM/AVG/MIN/MAX:數值聚合DISTINCT:去重GROUP BY:分組統計SPOOL d:\output.txt
SELECT col1||','||col2||','||col3 FROM table_name;
SPOOL OFF
配合 SET COLSEP ',' TRIMSPOOL ON LINESIZE 32767 PAGESIZE 0 HEADING OFF TERM OFF 可生成標準 CSV。