Database 类别下的文章

看图学 Oracle SES

刚才在线学习了一下 Oracle Secure Enterprise Search Administration Tutorial. 目前 Oracle 还不提供 Secure Enterprise Search 10g 的下载, 所以只能看看联机教程过点干瘾.

安装相对比较简单, 和普通的数据库安装很相似.类 Unix 服务器上需要修改核心参数, 最后系统会直接安装一个 DB 到服务器上.

Oracle Secure Enterprise Search 在 Linux 上安装时核心参数的设定

从教程中可以得知搜索引擎的基本由三部分构成:

Oracle数据库服务器 --管理存储与源数据以及搜索索引.

数据库 Listener --监听 Oracle Net 连接.

搜索中间层 -- 监听来自 HTTP 的请求. 我从 URL 中判断其实是一个 HTMLDB . Secure Enterprise Search 的管理工具也通过这个中间层来进行.

Oracle 杀入了搜索领域。虽然 Google 在互联网搜索领域独领风骚, 但 Oracle 显然要在企业搜索领域力拔头筹。日前,Oracle 推出了号称划时代的产品:Oracle Secure Enterprise Search(SES) 10g。赶紧找来白皮书研究研究。

这个产品的名字值得捉摸:Security + Enterprise + Search + 10g.

Security Oracle 首先强调了这款产品的安全特性。可以安全的与 Oracle Internet Directory 同步;与微软的活动目录同步;查询结果与爬虫的选项以及索引数据都各自有一些安全特性。比如,关于查询,Oracle 引入了查询时验证的特性,未经授权的用户搜索特定信息的时候,他不应该看到的信息会被搜索引擎过滤掉。这个验证是动态的,用户友好程度应该不错,但是因为是动态验证,性能上会有影响。该特性可以和 ACL 验证方式结合使用,或者单独使用。

Enterprise 软件目标是企业客户。SES 可以处理企业内容几乎所有的数据源(Web Page/ Email /DB table/ API 定制的数据源)。这其中激动人心的是直接搜索数据库表。这应该是 Oracle 的强项,以前还没听说哪个企业产品是直接搜索 DB 内容的。SES 这个特定对很多潜在的企业用户来说是一个卖点。至于运行效率则不得而知。

以前写过一则 Blog , 如何重编译无效的数据库对象. 可是有的时候,因为一些原因,在对一些数据库的 Package 对象的权限做修改之后, 会出现大量的无效对象, 即使反复编译,也是无济于事的.

今天就遇到过一起.

ops$oracle@demo>select object_name,owner,object_type 
from dba_objects where status='INVALID';

OBJECT_NAME OWNER OBJECT_TYPE
---------------------------- -------------------------- ------------------
DRIDDLR CTXSYS PACKAGE BODY

ops$oracle@demo>alter package ctxsys.DRIDDLR compile body;

Warning: Package Body altered with compilation errors.
ops$oracle@demo>execute utl_recomp.recomp_serial('CTXSYS');
PL/SQL procedure successfully completed.

ops$oracle@APAYCA>select object_name,owner,object_type

from dba_objects where status='INVALID';

OBJECT_NAME OWNER OBJECT_TYPE
---------------------------- -------------------------- ------------------
DRIDDLR CTXSYS PACKAGE BODY

因为刚刚撤销了 Public 对 DBMS_METADATA 和 DBMS_JOB 的执行权限. 本着最小权限授予原则,所以决定尝试恢复 CTXSYS 对两个包的执行权限.经过测试,

SQL> grant execute on  DBMS_JOB to ctxsys; 

然后重新编译,成功.

墨菲定律与 DBA

今天参加培训的时候胡思乱想,忽然间想起来墨菲定律(Murphy's Law)这个有趣的话题. 西方文化中,有很多所谓的"定律", 墨菲定律应该算是一则比较著名的"定律"了.什么是墨菲定律? 最简单的表达形式是"有可能出错的事情,就会出错(Anything that can go wrong will go wrong)"。

爱德华·墨菲、约翰·保罗·斯特拉普和乔治·尼克斯凭这条定律居然还得到了搞笑诺贝尔奖(IgNobel)奖。而墨菲定律的一些衍生版本也的确有趣.比如"东西久久都派不上用场,就可以丢掉;东西一丢掉,往往就必须要用它",再比如"你出去买爆米花的时候,银幕上偏偏就出现了精采镜头".

抛开 Murphy's Law 衍生出来如此多的版本不谈,说一下墨菲定律和 DBA 之间的关系。Anything that can go wrong will go wrong, 这句话对 DBA 来说,应该是引起注意的, 甚至作为金科玉律也不为过,一般来说,没有哪一个人管理的数据库是完美无缺的,但是如果你发现了数据库的缺限置之不理,存在侥幸心理,那么最后往往会发生你最担心的问题。我就曾经亲生经历过几起类似的事件,事后总结的时候想 "如果我...如何做" 就好了. 但是已经发生的事情就不允许假设了.

Oracle Database XE 推出正式版

最近的 Oracle 产品消息:Oracle Database XE 推出正式版。正式版本在 32-bit 的 Linux 和 Windows 上可用.

  • Installs using native installers
  • English (single byte character set) and International (Unicode) versions available with support for 10 major languages
  • Supports up to 4GB of user data
  • May be installed on a multiple CPU server, but only executes on one processor in any server
  • May be installed on a server with any amount of memory, but will only use up to 1GB RAM of available memory
  • Fully upgradeable to other Oracle Database 10g editions
  • Oracle Text for efficient text-based searches

这个免费版本可以直接平滑升级到 Oracle 的其他版本,而且部署简单,能让开发人员迅速入手。不得不让人深深感到 Oracle 为了争夺客户煞费苦心.

好长时间没怎么看 Oracle 技术文档了,今天阅读了一篇 Oracle Response Time Optimization with Method R. 这是 Optimizing Oracle Performance 经典图书这本经典图书的主旨方法。R 代表响应时间(response time).具体的定义如下:

  • 1. Target the tasks that are critical to the business.
  • 2. Collect properly scoped, un-aggregated profile data for each task while the task is exhibiting the behavior you want to record.
  • 3. React with the candidate repair that will have the greatest net payoff to the business.
    a. Stop if the cost of the repair exceeds the cost of the problem.
  • 4. Go to step 1.

这里面的核心元素是 Profile .Profile 要提供应用程序到最终用户的响应时间的详细描述.体现到 Oracle 数据库这一层,就是要得到扩展的 SQL Trace 数据。

是不是感觉有些"虚", R 方法和一些我们已知的数据库优化方法颇一些相似之处,但是 Cary Millsap 宣称 R 方法是目前已知 Oracle 优化方法中的最优秀的、最全面的。我们来看看一些简单比较:

如何比较两个 Schema 的异同

有的时候, DBA 需要迅速找出来同一个 Oracle 数据库上或者不同数据库的两个 Schema 的差异.这种情况应该比较常见,比如测试数据库发布到产品数据库的时候,需要 DBA 做频繁的检查。

应对的办法之一是通过 Toad 这样的 GUI 工具来查找.具体操作应该是很简单的。Oracle 自带的 OEM 工具也有这样的功能( Oracle 变化管理工具包,不过不是免费的)。对于不喜欢图形工具的 DBA 来说, 用手工的方式更容易接受一些。如果已经建立了 Database Link ,可以通过类似如下的 SQL 简单的发现一些差异:

select * from user_tables@a
minus
select * from user_tables@b;

可以考虑先从 用户的 objects 入手,然后表->字段->索引 等等.

在 AskTom 上有一个关于 Schema 比较的讨论,以及一些参予讨论的人提交的 SQL 脚本。

今天测试了一个 Perl 脚本 Schemadiff, 这个工具分两个部分组成,一个执行 Perl 脚本加上一个配置文件。配置文件比较简单。看看就可以清楚。比较结果能够输出为 ASCII 文本与 HTML 两种格式。文本的结果比较类似 Unix 命令 diff 的输出.相对来说,比较直观的了.需要说明的是,使用这个脚本需要安装 DDL::Oracle 包。间接拒绝了对 Perl 不熟悉的朋友.

小技巧一个:在一个开发环境中,可以考虑把用户的SQL执行计划历史也收集进来.很简单,但是对开发 DBA 会很有帮助, 根据 HASH_VALUE 查询相关过去某个时间段内的 SQL 执行计划.一共两步:

1 Statspack 的 level 6 收集所有的统计和执行计划. 用 level 6 收集快照(Snap)信息:

SQL> execute statspack.snap (i_snap_level=>6);

2 运行 $ORACLE_HOME/rdbms/admin/sprepsql.sql 脚本抽取特定 HASH_VALUE 的 SQL 信息:

关于归档

本页包含 Database 类别下的所有文章.

上一类别为 Arch.

Geek 为下一类别.

回到 首页 查看最近发表的文章或者查看所有 归档文章.