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

Oracle資料庫常見問題速解七則:壞塊搶救、Report後台視窗、動態查詢、約束查詢、歸檔模式、表空間擴展、動態顯示域

     編輯:Oracle 資料庫基礎

資深 DBA 整理七大 Oracle 實務高頻問題與標準解法,涵蓋資料搶救、表單報表開發、DDL 操作、備份模式切換、空間管理,附標準 SQL 與配置步驟,可直接套用生產環境。

問題 1:表發現壞塊,如何搶救完好資料?

步驟

  1. 執行 `DBVERIFY` 定位壞塊 ID (假設為 1234)
  2. 查詢段資訊:
    SELECT segment_name, segment_type, block_id, blocks
    FROM dba_extents
    WHERE 1234 BETWEEN block_id AND (block_id + blocks - 1);
  3. 若為表:建立臨時表存放完好資料
    CREATE TABLE good_table AS
    SELECT * FROM bad_table
    WHERE rowid NOT IN (
      SELECT /*+ INDEX(bad_table, any_index) */ rowid
      FROM bad_table
      WHERE SUBSTR(rowid, 1, 8) = '1234'  -- 壞塊相對檔號
    );
  4. 若為索引:`DROP INDEX ...; CREATE INDEX ...;` 重建

問題 2:Forms 呼叫 Reports 時的背景視窗 (Report Background Engine) 如何自動關閉?

在參數清單**最前面**新增參數:

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

此參數必須為**第一個參數**,Forms 調用 Reports 時即不顯示背景視窗,退出後自動關閉。

問題 3:Reports 如何根據查詢條件動態顯示記錄?

  1. 資料模型 → 使用者參數 → 新增 `W_CLAUSE` (CHAR, 預設 NULL)
  2. 修改查詢 `Q_1`:`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` 查看約束包含欄位:

SELECT * FROM all_cons_columns WHERE table_name = 'TABLE_NAME' AND owner = 'OWNER_NAME';

問題 5:如何將資料庫從 NOARCHIVELOG 切換為 ARCHIVELOG?

-- 1. 確認 init.ora 中 LOG_ARCHIVE_DEST 指向有效目錄
-- 2. 關閉並掛載
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
-- 3. 切換模式
ALTER DATABASE ARCHIVELOG;
-- 4. 開啟資料庫
ALTER DATABASE OPEN;
-- 5. 驗證
ARCHIVE LOG LIST;
-- 6. 啟用自動歸檔 (8i 以前)
-- init.ora: LOG_ARCHIVE_START=TRUE
-- 8i+ 多歸檔目的地: LOG_ARCHIVE_DEST_n (n=1..5)

問題 6:如何增加表空間大小?兩種標準方法

方法一:新增資料檔

ALTER TABLESPACE users ADD DATAFILE '/u01/oradata/orcl/users02.dbf' SIZE 25M;

方法二:擴充現有資料檔

ALTER DATABASE DATAFILE '/u01/oradata/orcl/users01.dbf' RESIZE 50M;

問題 7:Reports 中如何設定動態顯示域 (如傳入日期參數顯示於報表)?

  1. 使用者參數 → 新增 `RQ` (CHAR, 來自 Forms 傳入日期)
  2. 版面模型 → 建立顯示域 `F_1`,來源設為 `RQ`,屬性設「不可見」
  3. 動態預覽 → 建立文字域 `D_1`,內容輸入 `&&F_1`,即可動態顯示參數值

延伸提醒

  • 壞塊搶救後務必執行完整備份並檢查硬體/儲存層根因
  • 歸檔模式切換需在維護窗口進行,確認備份策略同步調整 (RMAN/歸檔日誌備份)
  • 表空間擴展建議啟用 `AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED` 減少人工介入
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved