Oracle DBA 日常運維高頻指令彙總:實例啟動關閉模式、資料字典查詢技巧、邏輯備份排程腳本、會話管理、SQL*Plus 編輯技巧、DDL/DML/DCL 常用語法、Schema 物件操作。
su - oracle svrmgrl SVRMGR> CONNECT INTERNAL SVRMGR> STARTUP SVRMGR> QUIT # 關閉 SVRMGR> SHUTDOWN
sqlplus /nolog SQL> CONNECT / AS SYSDBA SQL> STARTUP
| 模式 | 指令 | 用途 |
|---|---|---|
| NOMOUNT | STARTUP NOMOUNT | 重建控制檔、建立資料庫 |
| MOUNT | STARTUP MOUNT | 歸檔設定、媒體恢復、離線資料檔 |
| OPEN | STARTUP OPEN | 正常業務存取 |
| RESTRICT | STARTUP RESTRICT | 僅限 RESTRICTED SESSION 權限用戶 |
| FORCE | STARTUP FORCE | 強制關閉後重啟 |
| PFILE 指定 | STARTUP PFILE='path' | 參數檔異動後啟動 |
| EXCLUSIVE | STARTUP EXCLUSIVE | 叢集環境單節點獨佔 |
-- 查找含 index 的字典表 SELECT * FROM dictionary WHERE INSTR(comments, 'index') > 0; -- 查 USER_INDEXES 欄位含義 SELECT column_name, comments FROM dict_columns WHERE table_name = 'USER_INDEXES';
| 類別 | 核心視圖 | 典型查詢 |
|---|---|---|
| 用戶 | USER_USERS, USER_ROLE_PRIVS, USER_SYS_PRIVS | 預設表空間、角色、系統權限 |
| 表 | USER_TABLES, USER_OBJECTS, USER_SEGMENTS | 表清單、建立時間、大小 |
| 索引 | USER_INDEXES, USER_IND_COLUMNS | 索引類型、欄位、大小 |
| 序列 | USER_SEQUENCES | LAST_NUMBER 當前值 |
| 視圖 | USER_VIEWS | TEXT 欄位查看定義 SQL |
| 同義詞 | USER_SYNONYMS | |
| 約束 | USER_CONSTRAINTS, USER_CONS_COLUMNS | 主鍵、外鍵、檢查約束 |
| PL/SQL | USER_OBJECTS (TYPE), ALL_SOURCE | 狀態、原始碼 |
-- 表空間大小
SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024,0) size_mb
FROM dba_data_files GROUP BY tablespace_name;
-- 表空間使用率
SELECT a.tablespace_name, a.bytes total, b.bytes used, c.bytes free,
ROUND(b.bytes*100/a.bytes,1) pct_used
FROM sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c
WHERE a.tablespace_name=b.tablespace_name AND a.tablespace_name=c.tablespace_name;
-- 控制檔/日誌檔
SELECT name FROM v$controlfile;
SELECT member FROM v$logfile;
-- 版本/建立時間/歸檔模式
SELECT version FROM product_component_version WHERE SUBSTR(product,1,6)='Oracle';
SELECT created, log_mode FROM v$database;
-- 查看連線 SELECT username, sid, serial# FROM v$session; -- 殺掉會話 ALTER SYSTEM KILL SESSION 'sid,serial#'; -- 找不到則查 OS 進程 SELECT p.spid FROM v$session s, v$process p WHERE s.sid=21 AND s.paddr=p.addr; -- OS: kill -9 spid
L 列出緩衝區n 設定第 n 行为當前行C/舊/新 替換當前行文字I 插入新行EDIT file.sql 呼叫外部編輯器(DEFINE _EDITOR=vi)@file.sql / START file.sql 執行腳本# 完全備份 exp_comp.sh rq=`date +"%m%d"` su - oracle -c "exp system/manager full=y inctype=complete file=/oracle/export/db_comp$rq.dmp" # 累積備份 exp_cumu.sh su - oracle -c "exp system/manager full=y inctype=cumulative file=/oracle/export/db_cumu$rq.dmp" # 增量備份 exp_incr.sh su - oracle -c "exp system/manager full=y inctype=incremental file=/oracle/export/db_incr$rq.dmp" # crontab -e 0 2 1 * * /oracle/exp_comp.sh 30 2 * * 0-5 /oracle/exp_incr.sh 45 2 * * 6 /oracle/exp_cumu.sh
-- 建表 CREATE TABLE t (id NUMBER PRIMARY KEY, name VARCHAR2(50), dt DATE DEFAULT SYSDATE); -- 增刪改欄位 ALTER TABLE t ADD (age NUMBER(3)); ALTER TABLE t MODIFY (name VARCHAR2(100)); ALTER TABLE t DROP COLUMN age; -- 索引 CREATE INDEX idx_t_name ON t(name); ALTER INDEX idx_t_name REBUILD; -- 視圖/同義詞/DB Link CREATE VIEW v AS SELECT * FROM t WHERE id > 100; CREATE SYNONYM syn_t FOR t; CREATE DATABASE LINK dbl CONNECT TO u IDENTIFIED BY p USING 'tns_str'; -- 權限 GRANT SELECT, INSERT ON t TO user1; REVOKE INSERT ON t FROM user1;
-- 錯誤代碼統計 SELECT error_code, COUNT(*) FROM sm_histable0513 GROUP BY error_code ORDER BY error_code; -- 話單統計 SELECT SUM(successcount) FROM tbl_middlemt0411 WHERE servicetype2=111; SELECT servicetype, SUM(successcount) FROM tbl_middlemt0411 GROUP BY servicetype;
收藏此頁,DBA 日常操作秒查手冊。