阅读:4225回复:6
ORACLE问答精选
<STRONG><FONT color=#ff0000 size=4>Q: </FONT></STRONG>如 何 使 用 Cost Based 优 化 器 优 化 查 询 操 作?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> Oracle Server 提 供 了 基 于 成 本(Cost Based) 和 基 于 规 则(Rule Based) 两 种 优 化 器, 简 称 为 CBO 和 RBO, 用 于 确 定 查 询 操 作 的 执 行 计 划。 Cost Based 优 化 器 将 计 算 各 种 执 行 计 划 的 开 销, 然 后 选 出 最 低 成 本 的 执 行 计 划。 可 使 用 下 列 方 法 选 择 使 用 CB 方 法 1: 在 INIT<sid>.ORA 文 件 中 设 置 参 数 OPTIMIZER_MODE=choose<BR> 方 法 2: 在 Session 级 设 置 OPTIMIZER_GOAL=FIRST_ROWS 或 ALL_ROWS 例 如: alter session set optimizer_goal=first_rows; 方 法 3: 在 查 询 语 句 中 使 用 Hint, 包 括 CHOOSE,ALL_ROWS,FIRST_ROWS 等。
<P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>如 何 确 定 某 个 查 询 使 用 了 哪 一 种 优 化 器?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 使 用 EXPLAIN PLAN 命 令 生 成 该 查 询 语 句 的 执 行 计 划, 然 后 检 查 PLAN_TABLE 表 中 POSITION 字 段, 如 果 值 为 Null, 说 明 使 用 了 Rule Based 优 化 器; 否 则 表 明 使 用 了 Cost B ased 优 化 器。 例 如:<BR> SELECT decode(nvl(position,-1),-1, 'RBO','CBO')<BR> FROM plan_table<BR> WHERE id=0;</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>我 的 查 询 上 周 的 性 能 很 好, 为 什 么 现 在 查 询 速 度 很 慢?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 这 是 由 于 执 行 计 划 被 改 变 而 造 成 的, 下 列 因 素 将 会 改 变 一 个 执 行 计 划:<BR> 1) INIT<sid>.ORA 文 件 中 的 参 数 OPTIMIZER_MODE 被 改 变 2) 表 上 定 义 或 改 变 了 并 行 查 询 度 3) 使 用 ANALYZE 命 令 重 新 分 析 了 表, 而 且 使 用 了 ESTIMATE 方 式, 因 这 种 方 式 选 择 不 同 的 百 分 比 可 产 生 不 同 的 分 析 结 果。<BR> 4) DB_FILE_MULTIBLOCK_READ_COUNT 参 数 被 修 改。<BR> 5) SORT_AREA_SIZE 参 数 被 修 改</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>为 什 么 我 的 执 行 计 划 不 是 最 好 的?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> CBO 是 依 赖 表 的 一 些 统 计 信 息 来 选 择 出 最 低 成 本 的 执 行 计 划, 当 这 些 统 计 信 息 不 准 确 时, 产 生 的 计 划 便 可 能 不 是 最 佳 的。 因 而 应 使 用 ANALYZE 命 令 及 时 对 表 进 行 分 析 统 计。</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>当 使 用 ESTIMATE 方 式 对 表 进 行 分 析 时, 选 用 什 么 百 分 比 最 好?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 经 测 试 证 明, 使 用 5% 的 的 比 例 较 好。 即 提 高 了 分 析 效 率, 又 保 证 分 析 结 果 的 准 确 性。</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>如 何 在 Oracle8 数 据 库 中 创 建 Partition Table?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 使 用 CREATE TABLE 命 令, 并 指 定 Partition Key 和 每 个 Partition 的 分 区 范 围, Partition 名 为 可 选 项, 如 未 指 定, 系 统 将 自 动 产 生 Partition 名。 例 如: CREATE TABLE emp<BR> (EMPNO NUMBER(5),<BR> ...)<BR> PARTITION BY RANGE(EMPNO),<BR> emp_p1 VALUES LESS THAN (2000),<BR> emp_p2 VALUES LESS THAN (4000)<BR> emp_p3 VALUES LESS THAN (MAXVALUE);</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>Partition Table 有 何 限 制?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 1) 数 据 类 型 限 制:<BR> Partition Table 不 能 包 含 LONG、 LONG RAW、 LOB 及 OBJECT 类 型 的 字 段 2) Cluster 不 能 被 分 区 3) Bitmap 索 引: Bitmap 索 引 必 须 是 LOCAL 索 引, 不 能 是 GLOBAL 索 引 4) 优 化 器:<BR> Oracle8 中 Cost Based 优 化 器 支 持 Partitions, 而 Rule Based 优 化 器 对 Partitions 不 敏 感, 无 法 通 过 Partitions 获 得 性 能 的 提 高。<BR> 5) Partition Tables 不 能 跨 多 个 数 据 库, 所 有 的 Partition 必 须 存 在 于 一 个 数 据 库 中</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>如 何 建 立 一 个 与 现 存 数 据 库 相 同, 但 不 包 含 数 据 的 空 库?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 对 全 库 作 Export 或 Import 时, 使 用 参 数 ROWS=Y<BR> 例 如: exp system/manager full=Y rows=N file=full.dmp<BR> imp system/manager full=Y rows=N file=full.dmp</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>当 Exporting Procedures 和 Packages 时, 是 否 会 改 变 其 时 间 标 签 (Timestamp) ?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 不 改 变, 这 是 为 避 免 不 必 要 的 重 编 译。</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>Exp 的 参 数 VOLSIZE 能 否 用 于 所 有 的 平 台?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> VOLSIZE 只 能 用 于 UNIX 系 统, 将 数 据 exporting 至 外 部 介 质 上(如 磁 带)</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>如 何 通 过 SQL*PLUS 往 表 中 插 入 " ' ", 如 往 表 中 插 入 i'm.<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 在 SQL*PLUS 中 , 我 们 可 以 用 chr(39) 来 表 示 " ' ", 例 如 :<BR> sql>create table test (col1 varchar2(10));<BR> sql>insert into test values('i'||chr(39)||'m');<BR> sql>select * from test;<BR> col1<BR> -----<BR> i'm</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>在 win95 或 windows NT 上 运 行 oracle Net8 Assistant 或 Net8 Easy Configuration 时 报 错 "unhandled exception error in Java.exe"<BR> A:oracle Net8 Assistant 或 Net8 Easy Configuration 调 用 了 Java, 而 Java 在 win95 或 windows NT 上 运 行 对 系 统 的 分 辨 率 和 颜 色 都 有 要 求 . 应 把 系 统 的 分 辨 率 调 到 大 于 640x480, 把 系 统 的 颜 色 调 到 大 于 256 色 但 不 能 设 置 成 true color.</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>安 装 oracle 8 for windows NT 4.0 需 要 NT 的 那 种 service pack?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 安 装 oracle 8 for windows NT 4.0 需 要 NT 的 service pack 3.</P> <P>Q:Delphi3.0 是 否 支 持 oracle8?<BR> A:Delphi3.0 只 有 oracle 7 的 driver, 所 以 不 支 持 oracle 8.<BR> Delphi4.0.x 有 oracle 8 的 driver, 所 以 支 持 oracle 8.</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>怎 样 在 oracle 7 和 oracle 8 之 间 export/import 数 据 ?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 必 须 先 在 oracle 8 数 据 库 上 以 internal 或 sys 用 户 运 行 catexp7.sql<BR> svrmgr>connect internal<BR> svrmgr>@?/rdbms/admin/catexp7.sql</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>怎 样 为 远 程 用 户 设 置 "internal" 的 口 令 ?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 先 在 数 据 库 端 的 init<sid>.ora 文 件 中 设 置<BR> remote_login_passwordfile=exclusive<BR> 并 且 为 oracle owner 设 置 环 境 变 量<BR> ORA_<SID>_PWFILE=orapw<sid>.pwd<BR> 然 后 以 oracle owner 运 行 以 下 命 令<BR> $cd $ORACLE_HOME/dbs<BR> $orapwd file=orapw<sid>.pwd password=<passwd> entries=5</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>如 何 手 工 安 装 sqlplus 的 help facility?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 以 oracle 用 户 运 行 以 下 命 令<BR> $cd $ORACLE_HOME/bin<BR> $SYSTEM_PASS=system/manager;export SYSTEM_PASS<BR> $helpins</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>如 何 查 出 前 台 正 在 发 出 的 sql 语 句?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 先 查 出 正 在 运 行 的 前 台 程 序 的 sid:<BR> sql>select sid,serial#,username,program<BR> from v$session<BR> where status='ACTIVE';<BR> 然 后 根 据 上 面 得 到 的 sid, 可 查 出 正 在 运 行 的 前 台 程 序 发 出 的 sql 语 句 :<BR> sql>select user_name,sql_text<BR> from v$open_cursor<BR> where sid=xx;</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>在 oracle 8 中 如 何 使 用 shared library 来 编 译 pro*c 程 序 ?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 首 先 以 oracle owner 创 建 shared library<BR> $cd $ORACLE_HOME/rdbms/lib<BR> $make -f ins_rdbms.mk client_sharedlib<BR> 然 后 设 置 LIBPATH 环 境 变 量 ( 有 的 平 台 用 LD_LIBRARY_PATH, 请 参 见 手 册 ):<BR> $LIBPATH=$ORACLE_HOME/lib;export LIBPATH<BR> 最 后 编 译 你 的 pro*c 程 序 :<BR> $make -f demo_proc.mk build OBJS=yourprog.o EXE=yourprog</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>在 数 据 库 一 级 设 置 SQL Trace<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 在 init.ora 中 加 入 参 数 sql_trace=true. 然 后 重 新 启 动 数 据 库。</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>在 SQL*PLUS 中 对 某 一 session 设 置 SQL trace.<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> sql*plus>alter session set sql_trace true;<BR> 在 产 生 Trace 之 后, 使 用 如 下 命 令 关 闭 Trace.<BR> sql*plus>alter session set sql_trace false;3:</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>在 PL/SQL 中 设 置 和 关 闭 SQL Trace.<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> dbms_session.set_sql_trace(true);<BR> dbms_session.set_sql_trace(false);<BR> 如 果 你 不 能 发 现 这 个 package, 首 先 用 SYS 用 户 执 行<BR> dbmsutil.sql 这 个 脚 本。</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>怎 样 设 置 redo log 文 件 的 大 小。<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 设 置 redo log 文 件 的 原 则 就 是 要 保 证 30 分 钟 之 内 进 行 log switch.<BR> log switch 的 信 息 被 记 录 在 alertSID.log 中。<BR> -------------------------------------------------------<BR> Mon May 5 13:53:31 1997<BR> Thread 1 advanced to log sequence 68<BR> Current log#2 seq# 68 mem# 0: /u05/dbs/log2ween.dbf<BR> -------------------------------------------------------<BR> <BR> 如 果 两 次 switch 的 时 间 是 10 分 钟, 你 需 要 增 加 redo log 文 件<BR> 到 三 倍 的 尺 寸。<BR> 如 果 两 次 switch 的 时 间 是 15 分 钟, 你 需 要 增 加 redo log 文 件<BR> 到 两 倍 的 尺 寸。<BR> 如 果 两 次 switch 的 时 间 超 过 30 分 钟, 你 不 需 要 需 要 增 加 redo<BR> log 文 件 的 尺 寸。<BR> <BR> 同 时 设 置 CHECK_POINT_INTERVAL 大 于 redo log 文 件 的 大 小。</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>怎 样 检 查 是 否 一 个 数 据 库 用 户 被 授 予 sysdba ,sysoper 的 权 限。<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 注 册 到 sys 用 户 下, 查 询 数 据 字 典 v$pwfilw_users.</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>你 是 否 可 以 将 with grant option 的 object 权 限 授 给 一 个 role.<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 不 能, 这 个 被 授 权 者 必 须 是 一 个 user 或 者 public.</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>with admin option 的 系 统 授 权 是 否 是 hierarchical<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 不 是, 所 以 revoke grant with admin option 并 不 cascade.<BR> 如: user A grant select any table to user B with admin option.<BR> user B grant select sny table to user C with admin option.<BR> user A revoke select any table from user B .<BR> 此 时 user C 仍 然 具 有 select any table with admin option.</P> <P>Q:被 授 予 的 with grant option 的 object 的 权 限 是 否 被 收 回, 如 果 授 权 者 的 权 限 已 经 被 收 回。<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 是 的, object 的 with grant option 的 权 限 是 hierarchical.</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>在 用 create user 命 令 创 建 了 一 个 用 户 之 后, 那 些 表 可 以 用 来 查 看 这 个 新 用 户 的 基 本 信 息。<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 可 以 查 看 表 dba_users,dba_ts_quotas.</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>是 否 可 以 用 alter database datafaile 'file_name' offline drop<BR> 的 命 令 来 删 除 一 个 表 空 间 中 的 某 个 数 据 文 件。<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 这 个 命 令 并 非 是 一 个 常 规 的 对 数 据 库 的 管 理 命 令, 仅 仅 当 数 据 库 出 现 异 常, 或 某 个 文 件 丢 失 时, 可 以 用 他 来 强 制 将 这 一 文 件 的 记 录 从 数 据 字 典 中 删 除, 以 达 到 open 数 据 库 的 目 的, 但 是 此 后, 你 必 须 备 份 此 表 空 间 的 数 据, 然 后 重 新 创 建 该 表 空 间。<BR> </P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>如 何 移 动 数 据 文 件 的 位 置?<BR> A:1. 正 常 关 闭 数 据 库;<BR> 2. 拷 贝 数 据 文 件 到 新 位 置;<BR> $cp $ORACLE_HOME/dbs/dbsNEW.dbf /usr3/oracle/dbsNEW.dbf<BR> 3.svrmgrl<BR> connect internal;<BR> startup mount;<BR> alter database rename file '<$ORACLE_HOME>/dbs/dbsNEW.dbf'<BR> to '/usr3/oracle/dbsNEW.dbf';<BR> alter database open.<BR> <BR><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>如 何 移 动 LOG 文 件 的 位 置?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 可 以 先 添 加 新 的 LOG 文 件, 再 删 除 原 来 的 LOG 文 件。<BR> svrmgrl>connect internal;<BR> alter database add logfile '<$ORACLE_HOME>/usr3/oracle/logNEW.dba';<BR> alter database drop logfile '<$ORACLE_HOME>/dbs/logNEW.dbf';<BR> <BR><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>能 否 把 数 据 文 件 一 部 分 放 在 RAW DEVICE 上, 另 一 部 分 放 在 普 通 文 件 系 统 上?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 可 以, ORACLE 把 它 们 同 等 对 待, 把 数 据 文 件 放 在 RAW DEVICE 上 有 时 可 以 提 高 系 统 的 性 能。<BR> <BR><FONT color=#ff0000 size=+1><STRONG>Q:</STRONG></FONT>能 否 把 多 个 数 据 文 件 放 在 同 一 个 RAW DEVICE 上? 在 CREATE TABLESPACE 时, 如 何 指 定 RAW DEVICE 的 大 小?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 一 个 RAW DEVICE 只 能 作 为 一 个 数 据 文 件 使 用, 如 果 你 有 一 个 较 大 的 RAW DEVICE, 需 要 把 它 用 于 不 同 的 表 空 间, 你 可 以 把 它 再 分 区。 在 使 用 RAW DEVICE 创 建 表 空 间 时, 你 只 能 使 用 RAW DEVICE 的 95% 左 右 的 空 间, 其 余 空 间 用 于 记 录 文 件 头 的 信 息。<BR> <BR><FONT color=#ff0000 size=+1><STRONG>Q:</STRONG></FONT> 如 何 知 道 我 已 经 安 装 了 哪 种 NETWORK DRIVER?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 可 以 用 'nm' 命 令 检 查, 例 如, TCP/IP DRIVER 的 符 号 名 为 'nttini', 要 检 查 Oracle 是 否 链 接 了 该 符 号, 可 以 利 用 下 列 命 令:<BR> nm oracle | grep nttini 如 果 nttini 存 在, 表 示 rdbms 已 经 链 接 了 TCP/IP DRIVER.</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>如 何 检 查 已 安 装 的 SQL*NET 的 版 本?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 可 以 在 ?/orainst 目 录 下 使 用 'inspdver' 命 令 检 查。<BR> $ inspdver | grep SQL*Net<BR> 2.3.4.0.0 SQL*Net (V2)</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>如 何 打 开 Intelligent Agent Tracing?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 在 7.3.2.x, 编 辑 SNMP.ORA 文 件, 在 7.3.3.x 及 以 上 版 本 编 辑 SNMP_RW.ORA 文 件, 分 别 加 入 以 下 内 容:<BR> NMI.TRACE_LEVEL=16<BR> NMI.TRACE_MASK=(106)<BR> NMI.TRACE_DIRECTORY=<actual path to oracle_home/network/trace></P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>SNAPSHOT 不 自 动 refresh 怎 么 办?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 我 们 可 以 从 以 下 几 个 方 面 查 找 原 因:<BR> 1. 检 查 JOB_QUEUE_PROCESSES 参 数;<BR> 2. 检 查 DBA_JOBS, 确 认 JOB 的 状 态 不 是 broken;<BR> 3. 检 查 DBA_JOBS_RUNNING, 看 refresh job 是 否 正 在 运 行;<BR> 4. 检 查 db link 和 NET 是 否 正 常。</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>如 何 清 除 replicated 环 境 ?<BR>A:1. 在 Master Definition site, 执 行 dbms_repcat.remove_master_databases();<BR> 2. 在 Master site 执 行 dbms_repcat.drop_master_repgroup。</P> <P><FONT color=#ff0000 size=+1><STRONG>Q: </STRONG></FONT>如 何 确 定 snapshot 是 Read Only 或 Updatable?<BR><FONT color=#0000ff size=+1><STRONG>A:</STRONG></FONT> 可 以 运 行 下 列 语 句, 确 定 snapshot 是 Read Only 或 Updatable:<BR> SQL> select name, updatable from user_snapshots;<BR> Example: --------<BR> SQL> select name, updatable from user_snapshots;</P> <P align=center>NAME UPD <BR>JSNAP NO <BR>JSNAP2 NO <BR>SNAPTEST NO <BR></P> |
|
|
1楼#
发布于:2005-07-23 20:00
说的还行,可以,知道了不少
|
|
2楼#
发布于:2005-07-23 20:06
<img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" />
|
|
3楼#
发布于:2005-07-23 20:41
<img src="images/post/smile/dvbbs/em01.gif" />
|
|
4楼#
发布于:2007-03-23 19:06
支持,楼主辛苦了<img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em01.gif" />
|
|
5楼#
发布于:2007-03-27 13:08
感激
|
|
6楼#
发布于:2009-01-06 14:44
<img src="images/post/smile/dvbbs/em05.gif" /><img src="images/post/smile/dvbbs/em06.gif" /><img src="images/post/smile/dvbbs/em07.gif" /><img src="images/post/smile/dvbbs/em08.gif" />
|
|