Database 类别下的文章

Oracle 数据库软件的 License 一般是按照服务器的 CPU 个数计算的.这样就会有一个微妙的问题:对于双核心或者是多核的 CPU 该怎么计算呢 ?

在 05 年七月之前,Oracle 把每个核心(core)看做一个单独的处理器.七月的时候,Oracle 调整了一次 License 计算策略.每个核心算做 3/4 个 CPU (价格).这样对那些使用多核CPU的用户看起来似乎还不够公平 .根据这里看到的一个评测,使用多核处理器的中小企业们未必能获取最佳的性价比.

而在前几天,Oracle 重新调整了一下 License 策略.对每个多核(双核心)的 Intel/AMD 的 CPU, 每个 Core 算做 0.5 颗 CPU (价格),而对 Sun UltraSparc T1 , 每个 Core 只算作 1/4 CPU (价格).

联机重定义表示例

Oracle 9i 之后可以进行联机重定义表(Online Redefine Tables,或"在线重定义表").该特性从某种程度上提供了一定的高可用性.通过该功能可以做到:

  • 修改表的存储参数
  • 移动该表到相同 Schema 下的 不同表空间内
  • 添加并行查询支持
  • 添加或删除分区
  • 重建表以便减少碎片
  • 在普通表和索引组织(index-organized)表之间互相转换
  • 添加或删除列

做一个从普通表到分区表之间的转换操作.可以用 DBA 用户操作.如果是普通用户需要有DBMS_REDEFINITION 包的可执行权限以及如下权限:

* CREATE ANY TABLE 
* ALTER  ANY TABLE 
* DROP   ANY TABLE 
* LOCK   ANY TABLE 
* SELECT ANY TABLE 

下面通过一个例子来简单演练一把.假定目前产品库有一个非分区表 TEST. 准备对把该表联机修改为分区表.

这是一则旧闻. Oracle 公司宣布将使用 Sun 公司的 Open Solaris 10 操作系统作为 x64 架构的首选开发平台.此前的32位平台上的开发,Oracle 最近几年首选的操作系统平台是 Linux(硬件是Dell) .这从Oracle发布软件补丁的顺序可以看出来.最近一两年,Oracle 的 Linux平台的软件或者补丁总是会先发布.而之前,如果我记的不错的话,应该是基于 HP-UX 平台的产品先发布.Oracle 表示,将在基于 Open Solaris 平台上同时支持 AMD Opteron 与 Intel Xeon 以及 Sun 的 UltraSparc 三种芯片.

Sun 最近一两年在操作系统市场上一直是走颓势.高端有竞争对手 AIX ,低端有 Linux 的繁荣的冲击. Sun 干脆把 Solaris 开源,希望挽回一些失地,暂时看来还是有一定效果的.相信这次 Oracle 也是很看中不需要软件许可证费用同时还可以得到 Sun 技术支持这一点.

当然,如果说仅仅一个 开源就让 Oracle 投怀送抱,也未免太简单了一些. 之所以选择 Sun, Oracle 也有很大一部分原因是背 Dynamic Tracing (DTrace) 诱惑的 (参见). Sun 刚推出 Dtrace 的时候,我以为不过是一个性能调整的工具而已,最近参加了一次 Dtrace 的培训,发现 Sun 已经把 Dtrace 做成了一个性能 Tuning 的框架.甚至作了语言上的扩展.用户可以通过一些自定义的脚本对软件进行性能上的分析.而这样的产品应该是 Oracle 所梦寐以求的. Dtrace是内建到 Solaris 核心的,虽然 Sun 表示将把 Dtrace 开源,但是移植到 Linux 平台上不知道要等多久了.

Ora-03113 错误分析

每一个DBA在进行数据库管理的过程中不可避免的要遇到形形色色的错误(ORA-1547 ,ORA-904,ORA-1578 ......)。有些错误由于频繁出现、原因复杂而被 Oracle DBA 们戏称之为"经典的错误"。其中ORA-3113 "end of file on communication channel" 就是这样的一个。

我们可以简单的把这个错误理解为Oracle客户端进程和数据库后台进程连接中断。不过,导致这个错误的原因实际上有很多种:对数据库设置不当、任何能导致数据库后台进程崩溃的行为都可能产生这个错误。这个错误的出现还经常伴随着其它错误,比如说:
ORA-1034 ORACLE not available
此外,该错误出现的场景复杂,可能出现在:
  • 启动的Oracle的时侯
  • 试图创建数据库的时侯
  • 试图对数据库进行连接的时侯
  • 在客户端正在运行SQL/PL/SQL的时侯
  • 备份/恢复数据库的时侯
  • 其它一些情况下......

在论坛上也时常可以看到初级DBA对这个问题的求救。在这里简单的对该问题进行一下整理。

免费的Oracle Database 10g XE

看来真的是免费的午餐越来越多了. 打开 OpenRSS 居然看到一堆和 Oracle 的免费数据库有关的新闻.这是真的! Oracle 居然也推出了一个免费(Free,价格的Free)的 Database 版本: Oracle Database 10g Express Edition .

Oracle 10g Express Edition (XE) 集成了 Oracle HTML DB 2.1 ,便于开发基于 Web 的应用. 当然,这个免费是肯定有功能限制的:只能用于单处理器,最多处理 4G 用户数据.并且支持的内存也不能超过1G. 但是可以肯定Oracle将会逐步放宽这些限制. 联想到 10 月份 Oracle 收购芬兰的数据库技术开发商 Innobase , 看起来 Oracle 是对 MySQL 这一块中小数据库的市场有兴趣不小: 先挖掉 MySQL的半块墙角,然后抛出个半成品探探开源的路.

目前已经有Linux 平台与Windows平台的 Beta 版本可以下载.

不到一年的时间,Oracle 已经收购了大大小小十多家软件公司了.不知道是不是疯了.什么时候消化整合完都是个问题.不过推出 XE 的这个动作倒是不错.顺便搅搅局. 因为这段时间 MySQL 刚刚发布了 5.0 版本, 最为重要的是据说微软的 SQL Server 要正式推出 SQL Server 2005 了.也是阿,马上就2006 年了.新产品都要抓紧不是?

话说回来, Oracle 虽然野心大,但是也没有 Google 大,最近 Google 的 Google Base 相信会让任何一家潜在的竞争对手坐立不安

MyDUL 的版权问题

这两天看到的一个比较有意思的讨论是关于 MyDUL 的版权问题.MyDUL 这个工具前一段时间我介绍过.

MyDUL 的编写者 d.c.b.a 老兄在给几个 Oracle 用户成功的恢复了数据之后。似乎信心大增,觉得有必要进行一下宣传。于是乎跑到了 Google 的新闻组发了一个帖子,但他始料不及的是并没有看到好评如潮,反而招来几乎是压倒性的质疑声音,甚至包括 Jonathan Lewis 这样业界知名专家的恶评。

参与讨论的一个关键点是 d.c.b.a 的 MyDUL 是不是反向工程(Reverse Engineering).很明显,根据讨论者给出的参考,即使是 Unix 的 strings 命令严格来说都是反向工程.所以, MyDUL 是否侵犯版权似乎是明摆着的事情.

Tom 的 RUNSTATS 是一个很好用的 Benchmark 工具包.创建的时候有两点需要注意:

一. V$TIMER 这个视图的访问要和 SYS.V_$STATNAME, SYS.V_$MYSTAT, SYS.V_$LATCH 一样的进行一下处理,否则会报错

SQL>grant select on sys.v_$timer to MyUser;

二.为了避免 ORA-20000 的错误,可以考虑在创建脚本中加上 dbms_output.enable(480000); 这样以后在调用的时候只需要 set serveroutput on 即可.省事不少.当然也可以通过 set serveroutput on buffer ...来控制,我个人不喜欢用 :)

Install Oracle 10g on SuSE 10

在 SuSE 上安装 Oracle 始终是个很简单的事情(参考我以前写的安装指南).有朋友说反复安装不成功.我自己测试了 OpenSuse 上的安装.对OpenSuSE 此前我介绍了一点. 现在的OpenSuSE 还是很缺少文档,而且似乎开发社区的交流也不够活跃.

首先下载 OpenSuSE 10 RC1 .安装比较简单.但是记得要安装开发工具等内容. 安装完后建立 oinstall 组和 dba 组,建立 oracle 用户.并加入到这两个组中.首选组是 dba 组.如果对命令行不熟悉,直接用 YaST2 好了.然后修改 Oracle 的环境变量:

$ vi ~/.bashrc 
添加如下内容:
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/products/10.2.0/db_1
export ORACLE_SID=test
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib 

上面只是必须的环境变量.可以根据自己的实际目录还设定.接下来需要作的事情是修改核心参数. SuSE 上没有 /etc/sysctl.conf 文件。可以自己编辑一个。内容如下:

kernel.shmall = 2097152 
kernel.shmmax = 2147483648 
kernel.shmmni = 4096 
kernel.sem = 250 32000 100 128 
fs.file-max = 65536 
net.ipv4.ip_local_port_range = 1024 65000

然后 使用 # sysctl -p 确定一下。在这里要注意的一点是在系统重新启动之后不能自动读取刚才创建的文件。 需要调整一下:

#chkconfig boot.sysctl on

关于归档

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

上一类别为 Arch.

Geek 为下一类别.

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