首页 | 分页显示

DBA Archives

March 15, 2008

OR引起的Join性能问题

    在SQL语句中用了OR之后, 其实很不容易控制, 第一次是想让一个带两个OR的用UNION去执行, 结果用了USE_CONCAT后变成了4个UNION了, 居然没有办法让他按我想象的第一个OR进行UNION. 第二次是在索引上, OR条件导致了不能在索引上进行条件过滤. 现在遇到了第三次, 是同事发现的, 怕自已记不住, 就没有征得他的同意, 在这儿共享出来了.     有下面两个表, TYPE_ID列上值的重复性很高. CREATE TABLE...

March 14, 2008

致命的人为错误

    在所有的错误中, 人为错误是最难恢复的, 尤期是要到达99.9%的恢复, 最近就有三个这样的例子.     一个国外的200G的数据库, 使用的是Oracle ASM, 有一天突然起不来的, 上去看了后, 居然是将一块ASM中的盘加到了操作系统的卷管理系统中了, 因此硬盘上部分数据被覆盖, 导致了Oracle ASM起不来. 后来找来找去, 说是有一个dmp格式的备份, 接近200GB,...

March 13, 2008

如何防止大的DML语句?

    开发人员在开发库上更新某个表的记录时总忘了添加限制(Where)条件, 而错误地更新了数据, 几个小时或几天后来求助DBA, 给DBA制造了不少麻烦, 有没有办法限制他们一句话能更新的记录的条数呢? 下面的方法可以用来限制一条语句能更新的记录数, 首先来创建一个包. create or replace package temppkg as     rowcount number := 0; end;...

March 6, 2008

HVR, 欧州的Shareplex?

    除了Shareplex和GoldenGate外, 及中途夭折的MyLOG(开玩笑)外, 还有一个基于日志文件分析作Oracle逻辑备份的产品, 来自欧州的HVR(High Volume Replicator). 前几天发的一篇关于Zizzy开源项目的文章, 引起了他们的注意, 从而找到我, 原来Zizzy就是这家公司贡献出代码来的, HVR的核心就是Zizzy这个项目的代码了, 它相当于是Unix的Kernel了, 而HVR则相当于很漂亮的一个Unix Shell. 现在主要维护它的居然是一个中国籍人, 实在是意料之外了.    ...

March 3, 2008

先报身高? 还是体重?

    "我身高1.76, 体重85kg"与"我体重85kg, 身高1.76"有什么不同? 在关系数据库理论中, 确明地写着实体属性的顺序并不重要, 因此在我的DBDiff程序(表结构比较)中是不比较列的顺序的. 如果说硬要说列的顺序有关系, 那只能是说明应用程序代码习惯不够好. INSERT INTO tablename VALUES (...)     只有Insert语句不带字段列表的情况下, 才与列的顺序有关系, 但这不是一个好的习惯....

Vista不能安装Oracle 11g

    今天有人打电话问Windows Vista上不能安装Oracle 11g的问题, 和几年以前在Intel P4的机器上不能安装Oracle 8.1.7一样, 都是Java运行环境引(简称JRE)起的问题. Oracle安装程序会调用安装盘中自带的JRE, 自带的JRE存放在如下路径. stage\Components\oracle.swd.jre     当时我将一个smcjitc.ddl的文件删除, 或拷贝Oracle 9i下的JRE 1.1.8来让安装程序工作. 换成Oracle 11g后也可以用同样的原理来处理,...

February 27, 2008

容易遗忘的手工并行

    去查询一个大表时, 大家都不会忘记Oracle的并行(Parallel)操作, 比如: CREATE TABLE xxx PARALLEL 4 AS SELECT /*+ PARALLEL(...) */ SELECT /*+ PARALLEL(...) */ FROM...

February 20, 2008

导出时的字符集转换

    Oracle数据库支持多种字符集, 目标是为了方便支持全球的各种不同语言, 但在实际生活中则常给我们带来麻烦, 98年刚出道时在老板兼师傅的指导下犯过一次错, 将所有的中文都导出成了问号, 最后客户请了一个学五笔输入法的班来重新纠正那些问号, 因此需要特别加注意, 一般情况下不允许在导出时进行字符集转换.     准确的方法是, 导出工具所用的NLS_LANG设置和数据库的字符集一致就对了, 在exp的日志输出中可以看到以下信息: Connected to: Oracle Database 10g...

February 18, 2008

保持好习惯不容易

    前几天体会到保持好的习惯不容易, 在一个几十个GB的分区表上建一个索引, 为了加快速度, 就用了并行. 命令如下所示: CREATE INDEX ... ON ... (...) PARALLEL 2 LOCAL ONLINE; ALTER INDEX ......

February 14, 2008

Rename Table的语法

    谁都知道在SQL*Plus中重命名(Rename)一个表的命令, 如下所示: RENAME old_name TO new_name     但需要注意的是这个命令是SQL*Plus的命令, 如果将它放在你自已的程序(如:Java, Perl等)中, 则是会报错的. 这时应当用标准的重命名语法: ALTER TABLE old_name RENAME TO...

January 24, 2008

有恢复业务, 你想去做?

    在某一台机器上有两个数据库, 简称A库和B库. 有一天向A库加数据文件时, 用了B库中的某一个文件, 因此B库坏了, 某个表空间坏了, 有些表不能访问了. 其他情况如下: 没有任何数据文件备份. 有最近一年的归档日志. 那个文件是在最近一年之内(2007年9月份之前)新建的. 2007年10月26号的某一个日志坏了, Oracle恢复不运去了. 在这个坏的文件上有Extent的表有25个. 2007年10月26后到现在的归档日志大约有几百个.     依我个人意见,...

January 16, 2008

SQL Server Express 2005

    为了抵抗开源数据库(MySQL, PostgreSQL等)的进攻, 为了拉拢开发人员, 各家数据库都出了Express版本, 今天突发兴趣地装了一个Microsoft SQL Server Express Edition 2005, 发现很小巧, 安装软件才36MB, 比Oracle 10g Express小巧多了. 想当年我还做过MCDBA中的SQL Server管理和开发课程老师呢, 去年还帮一家房产网站(用的也是SQL...

January 15, 2008

分析用户所有表之后

    随着Oracle对CBO的进一步增强和改进, 对表进行分析已经成为一种常用的调优的手段, 当发现某个表的相关SQL语句的执行计划有问题时, 首先会想是不是统计信息过旧的问题, 如果的确是过旧, 则对这个表进行分析, 以让Oracle重新选择准确的最优执行计划, 以达到调优的目标. 用不合适的方式对表进分析, 则会造成十分严重的后果, 如对一个用户下的所有表进行分析, 或一下子分析多个表. 看到网友的一篇贴子, 让我想起二年多前帮别人处理过的一个案例, 有位DBA对某用户下的所有表进行了分析.     基本情况是,...

推荐Piner的新书

    周末去参加了IT168 / ITPub / IXPub在北京九华山庄举行的2008中国IT技术精英年会, 第二个(第一个是eygle, 前后脚关系, 应当说是不分先后的)拿到了piner花了一整年时间仔细编写的图书 -- Oracle高可用环境.     在侯车室里, 在回程的路上, 我已经看了四分之一的篇幅, 可以告诉大家谁应当看这本书.  ...

January 11, 2008

为什么多了一个空格?

    昨天要用SQL来获得一个分区的名称, 却发现生成的分区名中总是多了一个空格, 不知道原因何在, 只是数据库的字符集是UTF8. 如下所示: 18:50:50 SQL> SELECT TO_CHAR(9,'09') FROM DUAL; TO_ ---  09     用于获得分区名的语句, 其中9是根据一个公式算出来的值....

January 4, 2008

Oracle DBA By ......

    昨天关注了一下公司股票, 顺便去Forbes(福布斯)看了一下外界对公司的有关评测, 没什么看到好消息. 到是Forbes(福布斯)网页的最下面, 有个地方引起了我的注意. Powered By ...... Oracle DBA by ......     "Powered By"到是常常在网站上见到, 而"Oracle DBA...

December 29, 2007

最小X-Window,运行xterm

    俺是在VMWare上玩Oracle RAC的, 仅为了安装软件或运行Java图形而安装巨大的KDE或GNOME桌面, 那就不划算了, 无论是从磁盘空间的角度, 还是从内存的角度. 其实仅需要安装最最基本的X-Window系统, 能运行xterm程序(通过X-Manager的xstart可以连接)就可以了.     在安装之前, 还是得安装一下开发工具包. rpm -i gcc-3.4.6-8.i386.rpm \        cpp-3.4.6-8.i386.rpm...

December 28, 2007

也学Oracle RAC安装

    想想自已不懂的东西太多了, 如RAC, 高级复制(Advanced Replication), 流(Stream)等, 实在觉得很落后了, 现在这个公司不用这些东西还好, 可外面的人用啊, 尤其以RAC系统为多, 最近eygle就在机房里呆了整整一天, 装了两套RAC系统. 有必要学学, 除了两年多前同样在VMWare(Dell D600/1GB内存, 相当痛苦)上装过一次10g R1的RAC, 就一直没有装过.  ...

December 27, 2007

Oracle AQ的问题

    Oracle AQ问题, 江湖救急, 在那么多的回答中, 有幸我的答案最后解决了问题, 解决的方法是如此之简单. 将aq表的索引rebuild一下?     其实在调优化的过程中, 主要还是缺少数据, 从而无法找出问题的根本原因所在, 所以我的回答也加了一个问号, 因为这只是猜的. 对于这种持续较长一段时间的, 比较容易获得相应数据, 如Statspack或现场去捕捉一些. 但对于偶然发生的突发性数据库负荷很高,...

December 20, 2007

难以忘怀DBA误操作

    最近流行自我恢过, 有人在ITPub上有人问DBA生涯中最难人忘怀的误操作. 最常见的有如下几类:     rm误删除文件, 解决办法可以参考Fenng的贴子, 这其中良好的习惯和权限管理显得很重要, 必要时写些角本来进行删除操作, 不容易范错.     连错数据库, 这种事发生的事也比较多. 如要连Standby的连到Primary了, 结果将生产库关闭了(这事这儿也发生过). 要连本机的连到生产库了, 要连测试库的连到生产库了,...

December 19, 2007

怎么升级Oracle的?

    有人在Itpub上问Oracle 817建分区表怎么出错了? 错误如下: ORA-00604: error occurred at recursive SQL level 1 ORA-00904: invalid column name     通过设置SQL跟踪,...

December 13, 2007

国外Oracle专家服务报价

    服务越来越重要, 来看一个国外Oracle专家提供技术服务的报价, 都是以美元为单位的. 服务提供者为高级的具有OCP证书的DBA专业人员, 按服务地点可分为远程和现场, 按服务时间可分为临时服务和不小于多少小时的包时服务.     1, 远程服务价格, 临时: 每小时175 USD. 保证80小时: 每小时165USD, 至少13200美刀.     2,...

December 12, 2007

SQL DBA兼管Oracle库

    前段时间, 一个澳大利亚的网友说他的Oracle库中某个表空间只留下了几个数据文件, 还能不能恢复. 在这儿不讨论如何恢复数据的问题, 要关注引起这个问题的根源.     根本原因是他们请了一个SQL Server DBA, 兼职(顺便)管管Oracle数据库, 当某些数据过时了, 要归档起来, 这个SQL DBA就将表空间从Oracle中删除了. 原因是SQL Server中是可以这样做的, 只要数据文件存在,...

December 11, 2007

删除4TB的表

    由于历史的原因, 居然有机会清理4TeraBytes大小的表, 而且这个表是在字典管理表空间(DMT)上的, 新建的都不会再用字典管理表空间了, 估计在其他地方是不可能遇到的了. 用最吐的CTAS方法将数据归档了一部份, 并重新设计分区的逻辑, 完成后就得将这个表删除以释放空间.     心中很是担心害怕, 不过也没有办法, 只能继续. 大致经过了如下步骤: drop index ...; truncate...

November 28, 2007

Hack了一把Oracle的exp工具

    想让Oracle的exp查询要导出的表时用并行去执行, 不想建一个Logon的触发器来做, 就Hack它一把了. 下面是用正常的exp跟踪(TRACE=YES)出来的SQL语句. SELECT /*+NESTED_TABLE_GET_REFS+*/ "SH"."T_COMPRESS".* FROM "SH"."T_COMPRESS" Rows     Row Source Operation -------  ------------------------------   10089  TABLE ACCESS FULL T_COMPRESS...

November 16, 2007

Oracle 11G OLTP Compress支持的含义

    在Oracle 11g之前, 普通的Insert不能使数据以Compress方式存贮, 你可以做实验对它进行验证, 只能通过将表移动一下, 或用CTAS或Bulk Insert的方式来进行表压缩. 最近也开始用Compress表存放一些几年前的数据了.     虽然有触目惊心的Bug, 但空间的节约却是可观的, 有时也得挺而走险(没有这么严重)一下.     在Oracle 11g中, 号称支持OLTP的Compress表,...

November 14, 2007

使用图形工具, 极需要加强权限管理

    又见图形工具引起的灾难, 在PL/SQL中用SYS用户登录, 不小心把所有的视图都删除了.     我已经见过好多次OEM上误删表/用户/表空间的问题, 都是因为在图形工具上按错了键或点错了鼠标, 这些工具在有权限时, 要删除什么东西总是默认以CASCADE方式进行的, 因此才造成的问题. 在这个例子中, 后来发现不单单是一些视图没有了, 还有一些SYS用户下的系统表被删除了. 在运行catalog重建系统视图时, 遇到了以下错误. CREATE OR REPLACE...

November 13, 2007

AUL遇到特别的Oracle数据库, 恢复失败!

    今天AUL遇到了一个特别的数据, 虽然System表空间都是好的, 但却无法UNLOAD字典信息, 从而无法很好地恢复数据. 第一个特别的现象是, 数据库的第一个数据文件, SYSTEM表空间的第一个数据文件的RFILE#列不为1, 这是我第一次见到. *  ts#  fno  rfn ver bsize     blocks filename - ---- ---- ---- ---...

November 6, 2007

[转贴] DBA-我激情不再

    先给出原文出处, 是从ITPub上看到的, 我也是一名DBA, DBA只是工作不是兴趣了. 对于一大群想进入DBA行业的人来说, 可能是一种打击. 想纯粹地做点技术, 谋求个安定的生活, 真是不容易!     99年刚毕业进公司,看着公司那些老大们熟练的操作ORACLE数据库:安装,备份,导数据.羡慕不已.心想:要是我也有那么熟练就好了.于是,凭借刚进公司的热情和新鲜感,凭借年轻人的血气方刚和充沛的精力,很快的迈进的ORACLE的大门.当时使用的ORACLE7 ,还是ORACLE的SQL FORM 来做开发.想想当初,为能够在当时DIGITAL主机上安装ORACLE734的OPS而激动不已.(估计现在没有几个人会) , 后来掌握了ORACLE8 (...

October 19, 2007

什么情况算是很麻烦的没有System的恢复?

    最近国内的数据库不太平安, 首先是磁盘损坏, 刚好坏到了System表空间所在的盘, 当然这是没有System的恢复. 另外还有好多次误删操作引起的问题, 误删单个或几个表, 误删除一个用户, 误删除一整个表空间(数据文件还在), 这些也算是没有System的恢复. 为什么算?     在System表空间中, 我们可以找出以下信息: 表编号, 数据编号, 表名, 列名,...

September 14, 2007

不同数据库的Temp Table的情况

    在Oracle中, Temp Table的结构建好后, 每个会话都可以看到这个表空构, 但看不到数据. 按数据还可以分为是事务范围(On Commit Delete Rows)的还是会话范围(On Commit Preserve Rows)的. 表结构一致有好处有坏处, 好处是每个会话不需要运行建表语句(其他数据库则不然), 坏处是当这个Temp Table被其他会话使用时, 对它做些DDL时会报错.  ...

August 22, 2007

Oracle需要手工启动, 无法自动启动

    02年做在一公司作Oracle DBA支持时, 我也经常在客户那儿写开机后自动启动数据库, 关机前自动停止数据库的角本, 那时也特强调要实现自动化, 但经过最近三年半的大公司的DBA经验, 经过三年管理OLTP型的数据库的生涯, 如今我不会再去写这样的角本了, 不是写不出来, 而是不愿写.     最近的三年中, 唯一自动启动和关闭的数据库是我笔记本上的库, 用来自已玩和做些研究的, 最近还是改成了手工启动. 对于DBA来讲, 数据库的重启是一件很重要的事,...

August 21, 2007

丢失Redo, 如何不用resetlogs打开数据库?

    今收到一个控制文件和一堆数据文件, 要在我的笔记本上打开这个库, 我是很不愿意用open resetlogs选项的, 因为控制文件和数据文件是一致的, 是在关闭数据库的情况下备份出来的. 结果发现日志文件原来是在E盘, 而我的笔记本上只有C盘, 直接Clear是不行的, 直接重命名也是不行的, 通过添加新日志组和删除旧日志组也不行, 因为其中有一组是当前Active的, 因此根本就不让删除. SQL> SELECT MEMBER FROM V$LOGFILE;...

August 15, 2007

到低数据是谁的? 是DBA的吗?

    今天在MSN有一个人说他将数据库搞坏了, 我问他如何搞坏的, 没有细说, 有可能是在练习dd或bbed这样的软件时搞坏的吧, 总之现在的SYSTEM表空间上有坏块了. 不想让公司知道, 要不然面子上过不去. 问我如何出售AUL的许可证, 他已经用AUL试过了, 可以读出部份数据.     个人以为, 不管发生什么情况, 数据还是公司的, 如果要恢复这些数据, 应当是公司来承担恢复的成本, 而不是让DBA偷偷地去处理掉....

August 9, 2007

ORA-30175: invalid type given for an argument

    今天朋友遇到一个比较郁闷的问题, 想了一段时间还没有想出来, 于是在网上问我. 下面这一段代码报了这个错误: declare    l_max_date VARCHAR2 (50) := '2999-12-31 23:59:59';    l_format   VARCHAR2 (50) := 'YYYY-MM-DD...

SQL*Plus出现段错误及Core dump

    当你的SQL语句很长(估计是2048个字节)并写成一行时, 用SQL*Plus去运行这个角本时, 就会出现这个错误. 原因是SQL*Plus中用一个有最大行长度限制的单行缓冲区去读取一行, 当读到的一行比这个单行缓冲区长时就出问题, 整成多行就没有问题. 每读入一行就将这一行的SQL拼接到更大的(如64K)SQL缓冲区中.     这种Overflow的方法就是一开始黑客用的攻击手段, 想出来的对册是在内核的代码及程序中, 一律改成有长度限制的函数调用, 这样一改后, 通过这种方法攻击的成功率就降低很多了.     遇到这个问题后, 突然记起我的AUL/MyDUL工具也遇到过,...

August 8, 2007

Internal error: ulconnect: OCIInitialize [1804]

    一个用sqlldr来装载数据的批处理角本发生了如上错误. % 9205/bin/sqlldr *****/*****@***** control=testsqlldr.ctl data=..... SQL*Loader: Release 9.2.0.5.0 - Production on Tue Aug 7 18:00:35 2007 Copyright...

August 2, 2007

如何取得Oracle当前会话的编号(Session ID)?

    下面这个应当是大家常用的. SQL> SELECT SID FROM V$MYSTAT WHERE ROWNUM =1;        SID ----------      19949     下面一个更简单, 但只能在Oracle...

July 23, 2007

open resetlogs何时成了第一招? 唯一一招?

    今天在QQ上遇这样一件事情, 大约是这样的. 一个运行在Linux上的Oracle数据库, 在正常关闭数据库后, 将磁盘从一台机器挂到另一台机器后, 磁盘的顺序发生了变化, 比如/dev/sdb变成了/dev/sdc, /dev/sdc变成了/dev/sdb, 由于这是在正常关闭数据库的情况下做的, 因此只要准确地改变软链接的映射关系(用了磁盘分区方式的裸设备), 是完全可以正常打开的, 结果一个负责安装RAC的公司, 应当是在没有完全搞对映射关系时, 直接进行了open resetlogs操作. 当然这时是启不来的了.    ...

July 17, 2007

问题解答 -- 如何得知一张表的纪录有变化?

    网上有一个问题, 要想知道那些表记录发生了变化? 对于一些更新不是很多(一秒种有几百条上下的)的表, 我会建议用实体化视图日志(Materialize View Log/Snapshot Log)去实现. 其基本原理是能过一个内部(Internal)的内核(Kernal)一级的行级触发器(Row Level Trigger), 将变化过的记录的ROWID或主键值保存到另一个表中去. 实体化视图的增量刷新(Fast Refresh)正是基于这个技术.     假设我们需要监控的表名为T_OBJECTS, 主键为OBJECT_ID, 如果没有主键则用ROWID,...

July 11, 2007

通过改写SQL来优化性能, 如何做?

    网友说这个SQL语句跑了两上小时, 没有什么思路去解决. select tbilltrace_43.bno,tbilltrace_43.SAVETIMESTAMP from    ( select bno,SAVETIMESTAMP      from tbilltrace      where  SAVETIMESTAMP>=monitor_start_date        and SAVETIMESTAMP<=monitor_end_date and...

July 4, 2007

为什么到二十一世纪还要改sys.props$呢?

    很久没有人去改sys.props$表了, 今天却出了一个, 在9i以前的话, 改错了NLS_CHARACTERSET的值是不行的, 数据库就起不来了. 但到了9i后, 是可以的, 也许有人知道了这一点所以放心地去做了. 为了慎重起见, 我重做了如下实验: SQL> UPDATE PROPS$ SET VALUE$='WE8ISO8859PP'   2  WHERE NAME='NLS_CHARACTERSET'; 1...

June 28, 2007

手工删除DBA_TABLESPACES中的记录后...

    最初是在ITPub上看到人家这样的误操作的, 估计谁也没有遇到过这样的事, 不好作出回答. 今天我在自已的机器上试了一下, 10g的数据库, 如下所示: SQL> delete from dba_tablespaces where tablespace_name='USERS'; 1 row deleted. SQL> commit; Commit...

June 6, 2007

OR引起的性能问题, 在表上进行行过滤

    对SCOTT用户EMP表的DEPTNO和ENAME字段建了一个复合索引. 在SQL的WHERE子句中用了一个OR条件, 看Plan: SQL> SELECT /*+ first_rows no_expand */ * FROM EMP    2 WHERE deptNO=10 AND (ENAME...

May 14, 2007

由compute statistics选项引起的性能问题

    在数据库中有一个表, 在其上面有一个索引, 现在的情况是没有分析数据的. 如下所示: SQL> SELECT TABLE_NAME, NUM_ROWS, LAST_ANALYZED   2    FROM USER_TABLES WHERE TABLE_NAME='POS_SELL'; TABLE_NAME                       NUM_ROWS LAST_ANAL ------------------------------ ----------...

May 10, 2007

今日中午时分收到的一封求救信

    最近范错的人比较多, 这不? 就收到了一封求救信. 内容如下: anysql,你好:     我是山东的革命老区临沂人, 非常冒昧打扰你, 我把单位的一个ORACLE数据库弄坏了. 从网上搜索到你开发的工具aul可以直接从DBF中读取数据, 因此就很冒昧的给你这个邮件, 还是关于注册码的事情, 不知道你能否.... 我们这里经济很不好, 尤其是这几年物价飞涨, 能否给个注册码.  ...

May 7, 2007

使用sqlldr工具中遇到的几个问题

    第一个是在用高版本的sqlldr向低版本的数据库中装载数据时遇到的, 解决的方法是将DIRECT=TRUE去掉, 不用DIRECT方式装载. 错误信息为: SQL*Loader-951: Error calling once/load initialization ORA-00942: table or view does not exist    ...

April 28, 2007

Organization Index之后是Organization Cluster

    最近常研究和分析Hash Cluster表, 发现要选建一个Cluster, 再在上面建表, 过程麻烦, 明明只有一个表, 却要分成两步, 或三步走. 在电视广告上什么都说一片能顶三片或五片的时代下, Oracle也应当进步一下. 我总是只在一个Cluster上建一个表, 称为Single Table Cluster吧.     IOT是很好, 可是他的主要缺点是必需要有主键,...

April 24, 2007

选择了错误的实现方法, 其实很简单!

    今天写了下面这一段SQL语句, 在写之前总觉得有更简便的方法, 可就是没有想出来: SELECT    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(       REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(TABLE_NAME,'0','#'),          '1','#') ,'2','#') ,'3','#') ,'4','#')              ,'5','#') ,'6','#') ,'7','#') ,'8','#') ,'9','#')  PATTERN_NAME...

March 29, 2007

由物化视图Complete刷新引起的数据丢失

    今日早上, 在网上看到一篇贴子, 问了如下两个问题: 数据仓库中有2007年之前的数据 问题一: 如何保持erp与数据仓库中2007年数据一致而数据仓库中2007年之前数据不变(以前通过dbms_mview.refresh('xxx','fast'))? 问题二: 我对x物化视图做了一个全部刷新,但是x物化视图中的数据全部变成2007年的数据,以前数据丢失?如阿恢复到刷新前的状态     其中第一个问题是个难题, 现在很多公司都在想这样的一个解决方案, 其实就是一个实时复制方案, 从在的角度来说, 这方面可以用的方案有: 1, Quest公司的SharePlex; 2,...

March 23, 2007

和Biti_rainy一起成为Oracle ACE

    第一次Fenng引荐我时, 没有打电话, 因此没成为第一批. 后来Jack Han在MSN上主动找我, 真是不好意思. 发现我和Biti大师的情况差不多. 用的126的邮箱, 用Web方式登录才发现确认信居然跑到垃圾邮件列表中了, 因此在本地用Foxmail收时怎么也没有收下来, 什么规则也没有设, 就这样了! 其实信昨天就到达了, 没有在外漂泊一个月.     Biti被特意推荐到第100位, 不知道我是多少位?...

March 21, 2007

最有价值的键盘一击, 值220700美金

    这个最有价值的一击出自Alaska州政府税收部门, 工程师在做维护工作时, 意外地删除了一个石油公司的帐户, 并且恰好将备份的磁带也格式化了一下. 等发现问题时, 却发现所作的备份根本就不可用. 从300箱纸质档案上重新输入数据. 技术员意外删除数据及格式化含有备份的磁带 被删除数据和石油业的税收有关 70个人花了6个星期来重新录入数据 失误的代价超过220000美金     如果中国公司出现这样的事故, 估计就没有这么值钱了, 因为找重新录入的人员很便宜, 而且可以强制加班. 另外也未必有这么重要的数据....

February 7, 2007

处理Resource Busy情况的一段角本

    对于一些建在更新比较频繁的列上的索引, 或者是有大量记录被删除表上的索引, 需要定期进行Rebuild, 对于比较大表上的索引一般会考虑用一定的并行度去建, 以让索引在更短的时间内建好. 但不要忘了将索引的并行度重新设置为1(禁用并行), 否则很容易让所有的SQL都用并行方式来执行, 从而引起主机崩溃. 在很忙的OLTP系统中, 可能常会遇到Resource Busy的错误, 如何确保修改能最后成功呢? 就需要一段角本来处理一下这个错误, 下面是我常用的一段角本: alter index ...... rebuild...

从Windows(32Bit)迁到Linux(32Bit), 有多大的必要?

    在网上看到过几次这样的问题, 当数据量极小时, 迁移只是很简单的一个事情时, 可以做做. 但当数据库达到100G或更大时, 迁移还是需要花费一定的时间的, 并且比较复杂的, 个人认为没有什么必要做这样的迁移, 首先我想不出来迁移后会对性能有很大的影响, 或者对于数据库管理上提供了很大的方便性? 同样的都是32位的平台, 迁移并不能解决大内存的利用问题. 因此得不到Capacity上的提升, 实在想不出有什么必要!     对于一个重要应用的数据库, 作领导的应当尽量少作些这样的决定,...

January 24, 2007

Copy和Paste中遇到的两个问题

    Copy和Paste是个谁都会遇到的大问题, 众多的Blog遇到了被别的网站Copy和Paste引起的版权问题, 如: Chedong, Fenng和Eygle, 访问量较高的个人网站上的网站纷纷被很多的网站简单地Copy和Paste过去, 影响了很多人的创作积极性.     不过这儿要讲的是另一个意思上的问题, 前不久有个朋友在逻辑灾备的机器上不小心删除了一个表, 其原因就是Copy和Paste, 从UltraEdit上拷贝到Secure CRT的屏幕上去执行, 却不知为什么Copy没有成功, 而Paste了上一次Copy的内容, 一个回车后将一个表删除了. 后来总共花了大约6个小时的时间去修复这个逻辑灾备....

January 15, 2007

系统的安全问题, 如何才能最好?

    今天和一个很出名的DBA聊起安全问题, 缘于他发现Perl的DBI程序在编译成机器码时, 不能执行, 我在网上花了一点时间想找解决方案, 结果没有找到. 当我问他为什么要编译成机器码时, 回答是他想将数据库的用户名和口令加密掉, 以确保安全. 我回答说建一个只读的用户, 随便这么聊了几句后, 就转到如何确保系统安全的话题上来了.     现在的情况是, 很多的公司DBA兼SA, 知道root用户的密码, 这就是知道了一切. 当团队在迅速扩展时,...

January 11, 2007

性能调整等对于企业将越来越重要

    象Oracle这样的数据库, 在License上面的监管将越来越严历, 随着业务的增长而导致的数据库性能问题, 将如何得到解决? 在过去的相当长的一段时间内, 我们的企业都不惜在硬件升级上大花血本, 但这种简单的解决方法将变得越来越困难, 原因以下几个方面:     1, License的费用增长     当你用硬件升级的道路(如增加CPU)来解决性能问题时, 势必会引起Licence的增加, 你将付出硬件的成本, 同时也得支付License的费用,...

January 2, 2007

帮助我成为DBA的一些重要书籍

    Fenng发贴调查DBA最重要的书是一个很好的贴子, 从很多人的回复中看到Oracle Document CD中的官方文档(10g/9i)在人们心目中的位置. 从个人讲我看得最多的文档是下面的四个: 1, Oracle Concept(Oracle 7的看了两次, 8i的看了三次吧, 9i的一次) 2, Administrator Guide (8i的三次, 9i的一次) 3, Performance...

December 25, 2006

列类型和变量类型不一致引起的性能问题?

    一条不能再简单的SQL引起了性能问题, Where条件中只有一个列, 并且有索引, 这是为什么呢? 请看下面的例子: SQL> CREATE TABLE T_OBJECTS   2  (   3    COL1 NUMBER, COL2 VARCHAR2(20), COL3 VARCHAR2(30)   4  ); Table...

December 8, 2006

如何用英文读出键盘上的各种符号?

~ tilde (sounds like til-da); be prepared to explain to computer-illiterate people saying "you know, the wave-shaped thingy" !...

December 6, 2006

你准备何时升级数据库? 如何升级?

    Oracle已经推出9.2.0.8一段时间了, 某些平台上10.2.0.3的补丁也可下载了, 免不了要问是否有必要升级的问题了.     升级的目的是什么? 作为一个DBA来说首要目的显然不是使用最新版本的数据库, 而是保证数据库的高可用性, 保证运行在数据库上的业务系统能良好地运行. 一般来讲升级的理由有如下: Oracle不再对现在运行的底版本提供支持, 如8i已经不支持了, 9i大约也只有一两年了吧. 新版本的某些新功能对系统的改进有很重要的作用, 如8i的分区, 9i的List分区等. 老版本遇到了一些Bug, 在新版本中得到了修复....

December 4, 2006

如何用SQLLDR装载UNICODE字符集的列?

    周末有人在玩AUL时向我提了个问题, 还真不知道如何回答. 他说在他们的库中有NCHAR/NVARCHAR2类型的列, 用AUL恢复成文本格式时, 有部份列的数据存成了UNICODE编码. 如何将这些数据用SQLLDR装入到数据库中?     下面是一个测试表(COL1 NVARCHAR2(100), COL2 NVARCHAR2(100)), 插入两条数据, 然后用AUL去恢复成文件, 用竖线分隔字段, 如下所示: N C...

November 16, 2006

Linux/Unix下的虚拟屏幕, 你开始用了吗?

    作为一个DBA, 我经常要连到数据库服务去执行角本或做其他事情, 当然网络突然断开的事情也是经常有的, 因此我们都使用一个共享软件screen, 允许你在服务上使用虚拟屏幕, 这样的话就可以不怕网络断开的情况了. 下面介绍一下最常的几个命令:     1, 创建一个虚拟屏幕. screen -S screen_name     2, 退出屏幕,...

November 15, 2006

10g的EXP/IMP连到早期版本时的错误信息

    9i或以前的EXP/IMP连到老版本的库时总是报ORA-00942(表或视图不存在)的错误, 而10g中错误信息变了, 如下所示: EXP-00056: ORACLE error 6550 encountered ORA-06550: line 1, column 41: PLS-00302: component 'SET_NO_OUTLINES' must be...

November 8, 2006

Oracle 10.2.0.3修复的一些Bug, 需要看看...

    Oracle已经要发布10.2.0.3的Patch了, 在Metalink上已经可以找到Bug修复列表了. 这个列表很长, 我初略地看了一下, 抄出以下面的一些我认为需要关注一下的, 从这份列表来看, 10.2.0.2是很不成熟的, Oracle会建议立马打补丁到最新的版本. 3279497 Interupted (Ctrl-C) TRUNCATE can corrupt ASSM table 4188324 Wasted...

November 1, 2006

10月份下半个月免费AUL许可证的请求情况

    下半个月的申请次数还是比较多的, 但我想真正使用它来恢复的次数是少的, 因为有些是从同一个IP来的; 并且很多人可能还不清楚许可证的使用方法, 因此有很多申请其实是没有实际作用的.     来看一下吧... DAY=20061017 IP=211.96.15.27 CODE=BOG3-FT04-3XMF-FTU6-4YSE DAY=20061017 IP=212.68.138.137 CODE=SB9J-1XZT-KHNI-RO0T-IR6L DAY=20061017 IP=58.20.108.23 CODE=FMDO-DU90-49H6-V1W9-DRUI DAY=20061017...

October 18, 2006

改变网上AUL许可证的计数方式, 取消IP上的限制

    对在线销售的AUL许可证的计数方法作了一点改变, 在新的方法中不将IP地址列入考虑, 当不同日期的访问仍计数, 在同一天内五次访问将会计数一次. 但要注意, 不要对页面进行刷新, 重复的访问也会计算次数的.     下面是到今天为止, 10月份免费的请求情况, 同时我们也来计数一下: USER     NAME = free // count...

October 17, 2006

rsync的sockopts选项的可选值列表

    我对于TCP/IP协议一无所知, 不过有些选项对于rsync传文件的速度会有一定的影响, 设置合适的值可以优化性能, 下面的几行是我从rsync的源代码中grep出来的, 以供参考. struct {   char *name;   int level;   int option;   int value;   int opttype; }...

October 16, 2006

10月份上半个月免费AUL许可证的请求情况

    随着DBA技术水平的整体提高, 对于AUL/MyDUL这一类软件的使用需求越来越少了, 我于9号在网上发布了一个CGI, 通过网上可以在线早请许可证了. 下面是这一周多一点的时间以来free帐号(密码:200610)的使用情况, 用了5次, 不算多. DAY=20061013 IP=58.212.85.189 CODE=5IFW-1D8F-UB4U-MT6J-K89C DAY=20061013 IP=66.211.156.98 CODE=OC0Y-USYX-PP5C-YAGD-O6AN DAY=20061014 IP=200.6.100.10 CODE=AU3I-KV2S-KQKM-30VS-TV46 DAY=20061014 IP=69.140.195.22...

October 10, 2006

如何将Oracle的数据导成Excel中的CSV格式?

    在网上看到有人问如何导出数据成Excel的CSV格式文件, 其实CSV格式只不过是以逗号分隔字段的文件本件, 用Spool或用ociuldr都可以很容易地将数据生成这种格式的文本文件. 用ociuldr的例子如下: C:\TEMP>ociuldr user=anysql/anysql@test query="select * from tab" field=, file=anysql_tab.csv     3100 bytes allocated for column TNAME...

October 9, 2006

手工创建一个数据库的步骤参考

    下面介绍一下如何手工创建一个数据库的步骤:     1,准备一个参数文件(init<SID>.ora), 应当主要包括以下参数. compatible=10.2.0.1.0 remote_login_passwordfile=NONE pga_aggregate_target=33554432 db_domain="" db_name=LFXDB control_files=() java_pool_size=0 large_pool_size=0 shared_pool_size=80m open_cursors=300 undo_management=AUTO undo_tablespace=UNDOTBS1 background_dump_dest=...

September 19, 2006

通过改变SQL来简化工作, 减轻工作量(二)

    Oracle的分析函数功能强大, 可以用于SQL的优化, 往往用普通的SQL需要好几次表扫描的, 用了分析函数后可以一句话轻松搞定. 我们来看一下统计学生成绩的例子吧.     我不想专门建一个成绩表, 就用DBA_OBJECTS来表示吧, 用OBJECT_TYPE来表示班级或年级, 用OBJECT_ID余100的值来作成绩, 为了减少记录显示, 我只查了"TABLE"和"INDEX"两个班级, 通过使用WIDTH_BUCKET函数可以很容易地实现这一要求, 如下所示: ASQL> SELECT CLASS_ID,SCORE_LEVEL,COUNT(*)...

September 14, 2006

通过改变SQL来简化工作, 减轻工作量(一)

    今天接到一个任务, 将在大约二十几个数据库中运行以下的两个SQL来取某个值, 这个表很大, 大约快100个G了, 因此是一件不小的任务. SELECT /*+ FULL(T) PARALLEL(T,4) */  COUNT(*) FROM BIGTABLE T WHERE COL1 < 1000000000   AND...

September 4, 2006

Linux裸设备在Oracle 10.2.0.2版本中要过时了

    从Metalink(Notes: 357492.1, 发布于28-Jun-2006)来看, 在Linux的2.6内核版本上安装Oracle 10.2.0.2以上版本时, 可以不使用Linux的裸设备了, 而采用O_DIRECT方式来访问块设备. 具体可以有以下方法: 直接访问块设备 用ASMLib映射的设备 用OCFS2的设备(OCFS还没有通过认证) 如果单结点, 可直接用LVM2卷管理下的块设备     这对于Linux的Oracle来说实在是件好事, Linux上的裸设备和传通的Unix上的裸设备有很大的不同, 是不太方便使用的....

August 27, 2006

用SQLLDR来装载CLOB/BLOB列的控制文件例子

    Oracle的SQLLDR是用来将文本文件中的记录装载到数据库中的工具, 其并行(Parallel),直接(Direct)的装载模式是目前所知最快的方式. 不过用于指定文本格式的控制文件有点难于写, 我在写时也经常需要查阅文档. 为了方便我还是在这儿写一个例子吧, 下面是样表的结构: SQL> create table test(   2    num_col number(10),   3   ...

August 25, 2006

用SQLLDR装载数据的一次小事故

    今天用SQLLDR装载数据, 没有足够的注意, 管应用程序的人说, 我们装载的数据不对, 后面多了一个空格. 过了好一会儿我们才查到原因, 居 然是因为Windows和Linux/Unix的文本编辑器中对换行的不同处理, 在Windows中是用0x0d(13),0x0a(10)两个字符来表示的, 而Linux/Unix中只用一个字符0x0a (10)来表示. 将Windows上编辑好的文本文件以Binary方式FTP上去(或以SCP拷上去)后, 用Linux/Unix下的SQLLDR装载, 因此装载进去的数据中就多了一个字符, 如下所示: SQL> SELECT DUMP(COL1)...

August 22, 2006

Oracle 9i/10g的Bug和修复列表及升级指南

    以下连接仅为提供查询方便, 更详细的信息请访问Oracle Metalink. 9.2.0.4 9.2.0.5 9.2.0.6 9.2.0.7 9.2.0.8 9i升级指南 10.1.0.3 10.1.0.4 10.1.0.5 10g R1升级指南 10.2.0.2 10.2.0.3 10g R2升级指南...

August 18, 2006

我被空格玩了两次的经过

    我曾遇到过数据文件名字中有空格的情况, 结果呢我用SQL来生成的拷贝所有文件的角本怎么都不对, 那事当时整了我15分钟, 用SQL语句或用图形工具时都要注意这一点. 下面是我建的一个表空间, 看起来是有同样的文件名的, 看了长度后才知道的. SQL> create tablespace test datafile   2    '/oracle/ora9i/data01/alex/testdata01.dbf' size 10m...

August 17, 2006

丢了当前或活动的日志后还能起动数据库吗?

    这几天网上恶耗不断, 昨天有人问我这个问题, 我认为这样的情况有很大的运气成份在里面, 不一定能open resetlogs的. 已有工程师在那他那儿试了以下步骤了. 1, 直接open resetlogs报, ora-600 [2662] 2, 用(Event 10015)ADJUST_SCN (在eygle.com上查一下)调整数据库的SCN. 3, 第二步的open resetlogs产生了以下错误信息...