分类归档: Database

关于 Oracle 10g EXPDP 的 EXCLUDE 参数

Oracle 10g 的 Data Pump 是个不错的新特性,因为新(其实 10g 也发布好几年了),所以也存在不少问题。
比如 EXPDP 的 EXCLUDE 参数,expdp help=y 输出的内容是这样说明的:

EXCLUDE Exclude specific object types, e.g. EXCLUDE=TABLE:EMP.

可是实际上用这样的格式却是不正确的,会得到一个错误提示信息:

ORA-39071: Value for EXCLUDE is badly formed.

正确的格式是啥? 如果第一次遇到或许还有些不知就里,莫明其妙。在 ITpub 上有个讨论,有朋友贴的文档给出了正确的语法:

EXCLUDE=TABLE:"IN ('TABLENAME1', 'TABLENAME2')"

对于 EXCLUDE/INCLUDE 参数还要注意的是二者不能共用。此外,Linux 和 Windows 下的命令行可能要对转义符号注意一点。
这个语法问题存在好久了,应该算是文档的 Bug ? Oracle 还没有进行修正。
EXPDP 我还遇到另外一个问题,生成的文件超过 99 个就会报错。有谁遇到过没?
EOF
BTW: 最近看到有朋友批评我写的东西没意思,其实首先要明确一点,我写的东西基本上是比较简单的所谓”技术”, 另外我也不知道写什么有意思,众口难调,而且,写多了我也腻。

Oracle 10gR2 的可靠性

最近手气特好,手边的这一套 Oracle 10gR2 几乎一天遇到一个 Bug。
昨天遇到的问题是查询结果不正确(这可是最为严重的问题了)。大致情况和 Bug 4604970 – Wrong results with ‘hash group by’ aggregation enabled 相符。通过修改初始化参数 optimizer_features_enable 可以避免这个问题。
今天遇到的问题是:

ORA-27054: NFS file system where the file is created
or resides is not mounted with correct options

这个 Bug 到现在还没有彻底的解决办法,只能通过 hard 方式 mount nfs 目录来避免。
还好这个库的要求也不太高,否则可真的要吃不了兜着走。
Oracle 10g 从发布到现在可不短了。但是从产品的可靠性来看与 9iR2 可差远了。除了 Data Pump 这样的 DW 杀手特性之外,真的很难找到使用 10g 的合适理由。虽然 Oracle 一再暗示已经有绝大多数用户迁移到了 10g 版本,很难让人相信这是真的。
EOF

RHEL 上安装 Oracle 的注意事项

在 Red Hat Enterprise Linux Server 上安装 Oracle 的时候,如果误打误撞顺利的话可能一个错误都碰不到,如果不顺利可能每一步都有槛。以下是几个小建议,可能会让一些朋友少一点麻烦。

1. 安装 OS 时候请选择 “Install Default Software Servers”

很多朋友在安装操作系统的时候会选择 Custom 模式安装软件包, 这样看上去似乎会灵活一些,但是也带来潜在的极多麻烦。数据库软件依赖的包如果缺少的话,再次安装就麻烦了–软件之间的依赖性非常让人闹心的。RHEL 又没有对 YUM/APT 等自动解决依赖性工具的正式支持。

2. 参考 Oracle Validated Configuration

Oracle 这个服务很好。每个配置清单都是经厂商验证过可行的,参考性比较大。尤其是关于当前版本的临时 Patch 参考,更是必需要着重处理。

3. OS 安装文件 .iso 在服务器上放置一份

对数据库来说,一般都是远程操作服务器,如果临时需要安装文件,总不能跑到机房再把光盘扔里面吧? 这时这个 iso image就有用场了。如果上面说的第一条是定制安装 OS 的话,那么几乎就会用到安装光盘. 很多人要找安装包就从网上 rpmfind.net 之类的地方随便找个 RPM 包安装,强烈反对这样做。
另外:Werner Puschitz 的安装参考要超过 Oracle 的官方指导。必读。
几个小小建议,行家眼里不值一哂。
EOF

Oracle 10g 的 ORA_NLS10 环境变量

Oracle 10g 关于 NLS 的环境变量发生了一点变化:

For RDBMS 7.2.x version the variable is called ORA_NLS.
For version 7.3.x the variable is called ORA_NLS32.
For Oracle 8, 8i and 9 variable is called ORA_NLS33.
For Oracle 10g the variable is called ORA_NLS10.

ORA_NLS33 的设置值:
ORA_NLS33 = $ORACLE_HOME/ocommon/nls/admin/data
而 ORA_NLS10 只需要设置:
ORA_NLS10 = $ORACLE_HOME/nls/data
定义了 ORA_NLS10 则不需要单独定义 ORA_NLS33 等参数了。
目前应该仍然是向后兼容 ORA_NLS33 的。
更多信息参考 Metalink: Note:77442.1
EOF