熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle新手入門: Oracle問答精選

2022-06-13   來源: Oracle 

  Q: 如 何 使 用 Cost Based 優 化 器 優 化 查 詢 操 作?
  A: Oracle Server 提 供 了 基 於 成 本(Cost Based) 和 基 於 規 則(Rule Based) 兩 種 優 化 器 簡 稱 為 CBO 和 RBO 用 於 確 定 查 詢 操 作 的 執 行 計 劃 Cost Based 優 化 器 將 計 算 各 種 執 行 計 劃 的 開 銷 然 後 選 出 最 低 成 本 的 執 行 計 劃 可 使 用 下 列 方 法 選 擇 使 用 CBO: 方 法 1 在 INIT<sid>ORA 文 件 中 設 置 參 數 OPTIMIZER_MODE=choose
  方 法 在 Session 級 設 置  OPTIMIZER_GOAL=FIRST_ROWS 或 ALL_ROWS 例 如 alter session set optimizer_goal=first_rows; 方 法 在 查 詢 語 句 中 使 用 Hint 包 括 CHOOSEALL_ROWSFIRST_ROWS 等
  
  Q: 如 何 確 定 某 個 查 詢 使 用 了 哪 一 種 優 化 器?
  A: 使 用 EXPLAIN PLAN 命 令 生 成 該 查 詢 語 句 的 執 行 計 劃 然 後 檢 查 PLAN_TABLE 表 中 POSITION 字 段 如 果 值 為 Null 說 明 使 用 了 Rule Based 優 化 器 否 則 表 明 使 用 了 Cost B ased 優 化 器 例 如
  SELECT decode(nvl(position) RBOCBO)
  FROM plan_table
  WHERE id=;
  
  Q: 我 的 查 詢 上 周 的 性 能 很 好 為 什 麼 現 在 查 詢 速 度 很 慢?
  A: 這 是 由 於 執 行 計 劃 被 改 變 而 造 成 的 下 列 因 素 將 會 改 變 一 個 執 行 計 劃
  ) INIT<sid>ORA 文 件 中 的 參 數 OPTIMIZER_MODE 被 改 變 ) 表 上 定 義 或 改 變 了 並 行 查 詢 度 ) 使 用 ANALYZE 命 令 重 新 分 析 了 表 而 且 使 用 了 ESTIMATE 方 式 因 這 種 方 式 選 擇 不 同 的 百 分 比 可 產 生 不 同 的 分 析 結 果
  ) DB_FILE_MULTIBLOCK_READ_COUNT 參 數 被 修 改
  ) SORT_AREA_SIZE 參 數 被 修 改
  
  Q: 為 什 麼 我 的 執 行 計 劃 不 是 最 好 的?
  A: CBO 是 依 賴 表 的 一 些 統 計 信 息 來 選 擇 出 最 低 成 本 的 執 行 計 劃 當 這 些 統 計 信 息 不 准 確 時 產 生 的 計 劃 便 可 能 不 是 最 佳 的 因 而 應 使 用 ANALYZE 命 令 及 時 對 表 進 行 分 析 統 計
  
  Q: 當 使 用 ESTIMATE 方 式 對 表 進 行 分 析 時 選 用 什 麼 百 分 比 最 好?
  A: 經 測 試 證 明 使 用 % 的 的 比 例 較 好 即 提 高 了 分 析 效 率 又 保 證 分 析 結 果 的 准 確 性
  
  Q: 如 何 在 Oracle 數 據 庫 中 創 建 Partition Table?
  A: 使 用 CREATE TABLE 命 令 並 指 定 Partition Key 和 每 個 Partition 的 分 區 范 圍 Partition 名 為 可 選 項 如 未 指 定 系 統 將 自 動 產 生 Partition 名 例 如 CREATE TABLE emp
  (EMPNO NUMBER()
  )
  PARTITION BY RANGE(EMPNO)
  emp_p VALUES LESS THAN ()
  emp_p VALUES LESS THAN ()
  emp_p VALUES LESS THAN (MAXVALUE);
  
  Q: Partition Table 有 何 限 制?
  A: ) 數 據 類 型 限 制
  Partition Table 不 能 包 含 LONG LONG RAW LOB 及 OBJECT 類 型 的 字 段 ) Cluster 不 能 被 分 區 ) Bitmap 索 引 Bitmap 索 引 必 須 是 LOCAL 索 引 不 能 是 GLOBAL 索 引 ) 優 化 器
  Oracle 中 Cost Based 優 化 器 支 持 Partitions 而 Rule Based 優 化 器 對 Partitions 不 敏 感 無 法 通 過 Partitions 獲 得 性 能 的 提 高
  ) Partition Tables 不 能 跨 多 個 數 據 庫 所 有 的 Partition 必 須 存 在 於 一 個 數 據 庫 中
  
  Q: 如 何 建 立 一 個 與 現 存 數 據 庫 相 同 但 不 包 含 數 據 的 空 庫?
  A: 對 全 庫 作 Export 或 Import 時 使 用 參 數 ROWS=Y
  例 如 exp system/manager full=Y rows=N file=fulldmp
  imp system/manager full=Y rows=N file=fulldmp
  
  Q: 當 Exporting Procedures 和 Packages 時 是 否 會 改 變 其 時 間 標 簽 (Timestamp) ?
  A: 不 改 變 這 是 為 避 免 不 必 要 的 重 編 譯
  
  Q: Exp 的 參 數 VOLSIZE 能 否 用 於 所 有 的 平 台?
  A: VOLSIZE 只 能 用 於 UNIX 系 統 將 數 據 exporting 至 外 部 介 質 上(如 磁 帶)
  
  Q: 如 何 通 過 SQL*PLUS 往 表 中 插 入 如 往 表 中 插 入 im
  A: 在 SQL*PLUS 中 我 們 可 以 用 chr() 來 表 示 例 如 :
  sql>create table test (col varchar());
  sql>insert into test values(i||chr()||m);
  sql>select * from test;
  col
  
  im
  
  Q: 在 win 或 windows NT 上 運 行 oracle Net Assistant 或 Net Easy Configuration 時 報 錯 unhandled exception error in Javaexe
  Aoracle Net Assistant 或 Net Easy Configuration 調 用 了 Java 而 Java 在 win 或 windows NT 上 運 行 對 系 統 的 分 辨 率 和 顏 色 都 有 要 求 應 把 系 統 的 分 辨 率 調 到 大 於 x 把 系 統 的 顏 色 調 到 大 於 色 但 不 能 設 置 成 true color
  
  Q: 安 裝 oracle for windows NT 需 要 NT 的 那 種 service pack?
  A: 安 裝 oracle for windows NT 需 要 NT 的 service pack
  
  Q:Delphi 是 否 支 持 oracle?
  ADelphi 只 有 oracle 的 driver 所 以 不 支 持 oracle
  Delphix 有 oracle 的 driver 所 以 支 持 oracle
  
  Q: 怎 樣 在 oracle 和 oracle 之 間 export/import 數 據 ?
  A: 必 須 先 在 oracle 數 據 庫 上 以 internal 或 sys 用 戶 運 行 catexpsql
  svrmgr>connect internal
  svrmgr>@?/rdbms/admin/catexpsql
  
  Q: 怎 樣 為 遠 程 用 戶 設 置 internal 的 口 令 ?
  A: 先 在 數 據 庫 端 的 init<sid>ora 文 件 中 設 置
  remote_login_passwordfile=exclusive
  並 且 為 oracle owner 設 置 環 境 變 量
  ORA_<SID>_PWFILE=orapw<sid>pwd
  然 後 以 oracle owner 運 行 以 下 命 令
  $cd $ORACLE_HOME/dbs
  $orapwd file=orapw<sid>pwd password=<passwd> entries=
  
  Q: 如 何 手 工 安 裝 sqlplus 的 help facility?
  A: 以 oracle 用 戶 運 行 以 下 命 令
  $cd $ORACLE_HOME/bin
  $SYSTEM_PASS=system/manager;export SYSTEM_PASS
  $helpins
  
  Q: 如 何 查 出 前 台 正 在 發 出 的 sql 語 句?
  A: 先 查 出 正 在 運 行 的 前 台 程 序 的 sid:
  sql>select sidserial#usernameprogram
  from v$session
  where status=ACTIVE;
  然 後 根 據 上 面 得 到 的 sid 可 查 出 正 在 運 行 的 前 台 程 序 發 出 的 sql 語 句 :
  sql>select user_namesql_text
  from v$open_cursor
  where sid=xx;
  
  Q: 在 oracle 中 如 何 使 用 shared library 來 編 譯 pro*c 程 序 ?
  A: 首 先 以 oracle owner 創 建 shared library
  $cd $ORACLE_HOME/rdbms/lib
  $make f ins_rdbmsmk client_sharedlib
  然 後 設 置 LIBPATH 環 境 變 量 ( 有 的 平 台 用 LD_LIBRARY_PATH 請 參 見 手 冊 ):
  $LIBPATH=$ORACLE_HOME/lib;export LIBPATH
  最 後 編 譯 你 的 pro*c 程 序 :
  $make f demo_procmk build OBJS=yourprogo EXE=yourprog
  
  Q: 在 數 據 庫 一 級 設 置 SQL Trace
  A: 在 initora 中 加 入 參 數 sql_trace=true 然 後 重 新 啟 動 數 據 庫
  
  Q: 在 SQL*PLUS 中 對 某 一 session 設 置 SQL trace
  A: sql*plus>alter session set sql_trace true;
  在 產 生 Trace 之 後 使 用 如 下 命 令 關 閉 Trace
  sql*plus>alter session set sql_trace false;:
  
  Q: 在 PL/SQL 中 設 置 和 關 閉 SQL Trace
  A: dbms_sessionset_sql_trace(true);
  dbms_sessionset_sql_trace(false);
  如 果 你 不 能 發 現 這 個 package 首 先 用 SYS 用 戶 執 行
  dbmsutilsql 這 個 腳 本
  
  Q: 怎 樣 設 置 redo log 文 件 的 大 小
  A: 設 置 redo log 文 件 的 原 則 就 是 要 保 證 分 鐘 之 內 進 行 log switch
  log switch 的 信 息 被 記 錄 在 alertSIDlog 中
  
  Mon May ::
  Thread advanced to log sequence
  Current log# seq# mem# : /u/dbs/logweendbf
  
  
  如 果 兩 次 switch 的 時 間 是 分 鐘 你 需 要 增 加 redo log 文 件
  到 三 倍 的 尺 寸
  如 果 兩 次 switch 的 時 間 是 分 鐘 你 需 要 增 加 redo log 文 件
  到 兩 倍 的 尺 寸
  如 果 兩 次 switch 的 時 間 超 過 分 鐘 你 不 需 要 需 要 增 加 redo
  log 文 件 的 尺 寸
  
  同 時 設 置 CHECK_POINT_INTERVAL 大 於 redo log 文 件 的 大 小
  
  Q: 怎 樣 檢 查 是 否 一 個 數
From:http://tw.wingwit.com/Article/program/Oracle/201311/18116.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.