首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Oracle 學習筆記精華:用戶管理、權限、表空間、PL/SQL、備份還原速查

     編輯:Java 相關知識

整理 Oracle 核心管理與開發知識點,涵蓋:用戶/角色/權限體系、表空間操作、常用函數、PL/SQL 結構、EXP/IMP 備份還原、數據字典查詢,適合 DBA 與開發快速查閱。

1. 內建用戶與角色

用戶角色/權限用途
SYSDBA最高權限,擁有數據字典基表
SYSTEMDBA, OPER系統管理員,日常維護
SCOTTCONNECT, RESOURCE教學測試用戶

2. 常用 SQL*Plus 命令

SHOW USER                  -- 顯示當前用戶
CONN user/pass             -- 切換用戶
EDIT file.sql              -- 編輯腳本
SPOOL file.log ... SPOOL OFF  -- 記錄輸出

3. 用戶與權限管理

-- 建立用戶
CREATE USER app_user IDENTIFIED BY pwd;
-- 授權角色
GRANT CONNECT, RESOURCE TO app_user;
-- 授權系統權限
GRANT CREATE TABLE, CREATE VIEW TO app_user;
-- 授權對象權限
GRANT SELECT, INSERT ON scott.emp TO app_user;
-- 授權可傳遞
GRANT SELECT ON scott.emp TO app_user WITH GRANT OPTION;
-- 系統權限可傳遞
GRANT DBA TO app_user WITH ADMIN OPTION;
-- 解鎖
ALTER USER app_user ACCOUNT UNLOCK;
-- 刪除用戶(含物件)
DROP USER app_user CASCADE;

4. 表空間管理

-- 建立本地管理表空間
CREATE TABLESPACE app_data
DATAFILE '/u01/app/oracle/oradata/app_data01.dbf' SIZE 500M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

-- 狀態控制
ALTER TABLESPACE app_data OFFLINE;  -- 脫機
ALTER TABLESPACE app_data ONLINE;   -- 聯機
ALTER TABLESPACE app_data READ ONLY;
ALTER TABLESPACE app_data READ WRITE;

-- 擴容
ALTER TABLESPACE app_data ADD DATAFILE '/u01/.../app_data02.dbf' SIZE 500M;

-- 刪除(含資料檔)
DROP TABLESPACE app_data INCLUDING CONTENTS AND DATAFILES;

-- 指定表建立於表空間
CREATE TABLE t (...) TABLESPACE app_data;

5. 常用函數速查

類別函數範例
字串UPPER, LOWER, SUBSTR, LENGTH, REPLACESUBSTR('abcde',2,3) → 'bcd'
數字ROUND, TRUNC, MOD, POWERROUND(45.926,2) → 45.93
日期SYSDATE, ADD_MONTHS, LAST_DAY, MONTHS_BETWEENADD_MONTHS(SYSDATE,3)
轉換TO_CHAR, TO_DATE, TO_NUMBERTO_CHAR(SYSDATE,'YYYY-MM-DD')
空值NVL, NVL2, COALESCENVL(comm,0)
系統SYS_CONTEXT('USERENV','DB_NAME')取得資料庫名稱

6. PL/SQL 結構範例

DECLARE
    v_sal    emp.sal%TYPE;
    v_ename  emp.ename%TYPE;
BEGIN
    FOR rec IN (SELECT sal, ename FROM emp) LOOP
        IF rec.sal < 2500 THEN
            DBMS_OUTPUT.PUT_LINE(rec.ename || ' 普通員工');
        ELSE
            DBMS_OUTPUT.PUT_LINE(rec.ename || ' 高級員工');
        END IF;
    END LOOP;
EXCEPTION
    WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('無資料');
    WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('多筆資料');
END;
/
-- 遊標 FOR 迴圈隱式開啟/關閉,最簡潔

7. EXP/IMP 備份還原(傳統模式)

-- 匯出表
EXP userid=scott/tiger@orcl TABLES=(emp,dept) FILE=exp_emp.dmp
-- 僅匯出結構
EXP userid=scott/tiger@orcl TABLES=emp FILE=exp_emp.dmp ROWS=N
-- 直接模式(快)
EXP userid=scott/tiger@orcl TABLES=emp FILE=exp_emp.dmp DIRECT=Y
-- 匯出用戶所有物件
EXP userid=scott/tiger@orcl OWNER=scott FILE=exp_scott.dmp
-- 全庫匯出
EXP userid=system/admin@orcl FULL=Y FILE=full.dmp

-- 匯入
IMP userid=scott/tiger@orcl FILE=exp_emp.dmp TABLES=emp
IMP userid=system/admin@orcl FILE=full.dmp FULL=Y

現代替代:Data Pump (EXPDP/IMPDP) 效能更強、支援並行、可壓縮/加密。

8. 數據字典常用視圖

前綴範圍範例
USER_當前用戶USER_TABLES, USER_TAB_COLS
ALL_可存取物件ALL_TABLES, ALL_VIEWS
DBA_全庫(需 DBA 權限)DBA_USERS, DBA_SEGMENTS
V$動態效能視圖V$SESSION, V$SQL

9. 關鍵 SQL 技巧

  • ROWNUM:結果集產生後分配,從 1 開始,不可直接 WHERE ROWNUM > 5。
  • 分頁標準寫法(12c 前):SELECT * FROM (SELECT a.*, ROWNUM rn FROM (...) a WHERE ROWNUM <= 20) WHERE rn > 10。
  • TRUNCATE:DDL、不產生 Redo、不可回滾、釋放空間、觸發隱式提交。
  • DELETE:DML、產生 Redo、可回滾、不釋放高水位。
  • START WITH ... CONNECT BY PRIOR:遞迴查詢(組織架構、BOM 展開)。

10. 同義詞

-- 私有
CREATE SYNONYM emp FOR scott.emp;
-- 公有
CREATE PUBLIC SYNONYM emp FOR scott.emp;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved