首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle DBA 常見問題精選 20 題:壞塊搶救、複寫配置、匯出過濾、密碼檔與謂詞求值順序

     編輯:Oracle 資料庫基礎

目錄導覽

  1. 壞塊資料搶救
  2. Forms 呼叫 Reports 背景視窗關閉
  3. Reports 動態查詢條件
  4. 查詢表約束資訊
  5. NOARCHIVELOG 轉 ARCHIVELOG
  6. 擴充表空間
  7. Reports 動態顯示欄位
  8. SYSDBA 密碼檔驗證失敗排查
  9. EXP QUERY 參數跨平台寫法
  10. DBMS_RANDOM 產生隨機數
  11. 連接順序與謂詞求值順序不確定性
  12. SGA Fixed/Variable Size 含義

1. 發現壞塊如何搶救未損壞資料?

步驟:

  1. DBVERIFY 確認壞塊 ID (假設 1234)
  2. 查詢段名:SELECT segment_name, segment_type FROM dba_extents WHERE 1234 BETWEEN block_id AND block_id+blocks-1;
  3. 若為表:建立乾淨表 CREATE TABLE good AS SELECT * FROM bad WHERE rowid NOT IN (SELECT /*+ INDEX(bad idx) */ rowid FROM bad WHERE SUBSTR(rowid,1,8)=1234);
  4. 若為索引:DROP INDEX ...; CREATE INDEX ...;

2. Forms 呼叫 Reports 時背景視窗不自動關閉

在參數清單最前面加入:


Add_Parameter(pl_id, 'ORACLE_SHUTDOWN', TEXT_PARAMETER, 'Yes');

必須為第一個參數才生效。

3. Reports 依傳入條件動態顯示資料

  1. User Parameter 建立 W_CLAUSE (CHAR, DEFAULT NULL)
  2. 修改 Query:SELECT * FROM dept &&W_CLAUSE
  3. 執行時傳入 WHERE dept=1 或 WHERE TO_CHAR(year,'YYYY.MM')='2000.03'

4. 查詢表的所有約束


SELECT constraint_name, table_name, r_owner, r_constraint_name
FROM all_constraints
WHERE table_name = 'TABLE_NAME' AND owner = 'OWNER_NAME';

欄位細節查 ALL_CONS_COLUMNS。

5. 切換至 ARCHIVELOG 模式


-- 確認 init.ora log_archive_dest 指向有效目錄
SVRMGR> SHUTDOWN IMMEDIATE
SVRMGR> STARTUP MOUNT
SVRMGR> ALTER DATABASE ARCHIVELOG;
SVRMGR> ALTER DATABASE OPEN;
SVRMGR> ARCHIVE LOG LIST;
-- 設定 log_archive_start=TRUE (8i) 或 log_archive_dest_n (8i+)

6. 擴充表空間兩大法

  1. 新增資料檔:ALTER TABLESPACE users ADD DATAFILE '/u01/oradata/users02.dbf' SIZE 25M;
  2. 調整現有檔案:ALTER DATABASE DATAFILE '/u01/oradata/users01.dbf' RESIZE 50M;

7. Reports 動態顯示欄位

  1. User Parameter 建立 RQ (CHAR)
  2. Layout 建立 Display Field F_1,Source 指向 RQ,Visible=No
  3. 建立 Text Field D_1,內容輸入 &&F_1

8. SYSDBA 連線密碼檔驗證失敗

現象:CONNECT sys/pwd AS SYSDBA 失敗 ORA-01017,但 CONNECT sys/pwd 成功。

原因:密碼檔建立時指定密碼 (orapwd password=foobar) 與資料庫 SYS 密碼 (change_on_install) 不同。AS SYSDBA 讀取密碼檔,需使用密碼檔密碼。

解決:

  1. 重建密碼檔或同步密碼
  2. ALTER USER SYS IDENTIFIED BY new_pwd; 會自動同步密碼檔
  3. 授權 GRANT SYSDBA TO scott; 後,scott 使用自身密碼即可 AS SYSDBA

9. EXP QUERY 參數跨平台正確寫法

問題:WHERE 子句含特殊字元 (=, <, >, 空格) 在命令列會被 Shell 解析錯誤。

最佳實踐:使用參數檔 (PARFILE)


-- exp.par 內容
USERID=/
TABLES=t
QUERY="WHERE object_id < 5000"
-- 執行
exp PARFILE=exp.par

Windows/Unix 完全相容,避免跳脫字元地獄。

10. DBMS_RANDOM 產生隨機數 (8.1.6+)


DBMS_RANDOM.VALUE              -- 0 <= r < 1
DBMS_RANDOM.VALUE(low, high)   -- low <= r < high
DBMS_RANDOM.NORMAL             -- 標準常態分佈 (μ=0, σ=1)
DBMS_RANDOM.STRING(opt, len)   -- 隨機字串: 'U'大寫, 'L'小寫, 'A'混合, 'X'大寫+數字, 'P'可列印

查詢原始碼:SELECT text FROM all_source WHERE name='DBMS_RANDOM' AND type='PACKAGE' ORDER BY line;

11. WHERE 條件求值順序不確定

查詢:WHERE emp.dept_num = dept.num AND emp.name LIKE 'S%' AND dept.name='IT'

執行順序取決於:索引、統計資訊、OPTIMIZER_MODE、初始化參數。不可假設固定順序。

反例:表 T(x,y) 含 ('a','1'), ('b','x')。WHERE x='a' AND y=1 若先算 y=1 會因 'x' 無法轉數字報 ORA-01722。統計資訊改變後優化器可能先算 x='a' 而成功。隱含轉換極度危險。

12. SHOW SGA 中 Fixed/Variable Size 含義

  • Fixed Size:編譯期固定的 SGA 核心結構指標區,大小不可變
  • Variable Size:動態分配區,包含 Shared Pool, Large Pool, Java Pool, Streams Pool 等
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved