在AnySQL.net中搜索标签(Tags) 'Oracle' 的结果:

一次被迫免费的恢复

    差不多四个月前发了一篇Oracle DUL不行就用AUL, 是为广东某地公安局所作的一次数据恢复的经历, 他们某系统中用CLOB来存放了很多的法律, 法规以及批文信息, 因为存贮上的某种原因, 导致了系统表空间出现了很多的坏块, 因而需要用AUL这样的软件来恢复数据.     一开始找的并不是我, 人家要的是Oracle原厂的服务, 因为原厂的DUL工具, 没有考虑变长字符集中CLOB数据的问题, 因此没有办法处理大量CLOB中的中文信息, 在Oracle恢复了不包含CLOB列的表后, 某技术服务公司的工程师向他们推荐了我. 去年也为其他地方公安局提供过类似服务, 都是很顺利地恢复出数据, 然后支付相应的旨用.     此次也是一样, 一科长级别的人与我电话构通的, 说就这么点服务费没有问题, 不用担心. 其实就这点费用, 的确不算什么, 组织几个人在国内参观/开会一次的费用也大大超过这个数了, 所以也没有什么担心, 再说牵线的那公司还是很有名的, 国内一流的Oracle技术服务提供商. 一向认为事情会以简单的方式去处理掉, 就不想什么其他先提供服务再说了, 毕竟人家的数据已经好几天没能访问了, 也就不先预收点劳务费了.    ...

小心看好你的数据

    今天收到一个恢复请求, 在QQ上和人聊了一通, 看情况是只有RMAN备份出来的文件, 没有数据文件, 需要恢复出数据来. 聊天内容如下: d.c.b.a: 现在所有数据文件都丢了? answer : 现在有的就是这些文件. d.c.b.a: 要确定, 是不是全的, 最好是找出他们作备份的脚本看一下 answer : 这个恐怕很难 answer : 这个脚本是什么格式的? answer : 一般存放在什么目录下? d.c.b.a: 他们那边没有管理员的? answer : 有,但是不能问... d.c.b.a: why? answer : 因为东西是down下来的. 明白了?     这种事情当然是不能做了,...

WebChart监控系统

    作为DBA这样的后台运维护人员, 需要监控很多东西, 除了数据库及主机的健康状况之外, 更重要的是一些业务信息的监控. 平台不是重要的, 最重要的是先有内容, 下面就是一个用WebChart画出来的业务数据图, 可以看到在早上2点前后的10分钟业务量有一个突然下降, 等会上班后就可以去问原因了.     很多网站应用都做成分布式的, 监控的内容还可以扩展到接口的调用, 及消息系统中消息的进入和处理量等.     监控的目的是为了帮助我们及时注意到发生的事情, 并为之找出合理的解释....

ASSM下DML的物理读高

    ASSM虽然是9i就出现的功能, 但一直没有使用它, 也没有任何经验. 早上在检查执行成本有显著变化的SQL时, 发现一条Insert语句的单次执行成本只有以前的四分之一, 很奇怪一条插入语句的平均执行成本为什么有这么大的变化. 从Statspack的信息中用WebChart画了一个图.     在上图中, 这个语句的表是按月分区的, 每天进入的记录数是相同的, 但物理读31号和1号截然不同, 可能是什么原因呢?     在ASSM中虽然了减轻了DML操作对Segment Header的争用, 但增加了用于空间管理(Free List的替换方案)Bitmap区域, 这部份的读取需要代价, 另外记录会被尽量均分出去, 最近Insert的记录也不一定放在一起, 所以每次Insert操作都可能会发生物理读.     除了这方面的问题, 记录的查询一般落在最新的数据上, 但由于使用ASSM, 最新的记录被分散的很历害, 所以查询的读也会比较多. 比如按时间去查询, 就是一个典型的例子, 用传统的Free List去管理, 情况会好一些.    ...

不可逆的日期转换

    今天想根据输入的带季度值的分区名, 再转换成季度的日期, 如下所示: SELECT ... FROM ... WHERE DATECOL >= TO_DATE('20&&partname.','YYYY"Q"Q')   AND DATECOL <  ADD_MONTHS(TO_DATE('20&&partname.','YYYY"Q"Q'),3)     却发现怎么都不行, 报了一个Oracle错误. 正向是可以的. SQL> SELECT TO_CHAR(SYSDATE,'YYYY-Q') FROM DUAL; TO_CHA ------ 2008-3     反向就不行了, 报日期的格式串不行. SQL> SELECT TO_DATE('2008-3','YYYY-Q') FROM DUAL;...

事务数高了会如何?

    数据库的事务数高了, 再好的机器, 也顶不了多少, Log Write这块会成关键, 在一个每秒有几百上千个事务的库上, 发现了这样的负载现象, Rq是Run Que, Act是Active Session. www.AnySQL.net  Load SY/WT/US  Rq  Act 07/23-22:18:02  6.09 11/27/31  64  16  07/23-22:18:12  6.43 10/29/29  48  41  07/23-22:18:22  5.82  7/42/21  39 1173 07/23-22:18:32  6.07 12/41/34  72  196  07/23-22:18:42  5.62 ...

连错库误删100多张表

    炎炎厦日, 容易让人头脑发晕, 做错事情. 某地某位开发人员连错了数据库, 本来要连到测试库进行表重建的, 连到了产品库, 过了几分钟后, 猛然惊醒, 已发现删除了一百来张表, 业务立马被中止, 一堆人被拖到惊惶失措中.     在事件发生后, 立马联系本站, 决定用AUL去恢复数据, 事发情景如下: 1, 事发后立马停止数据库. 2, 数据库在归档方式下, 删表归档文件还在. 3, 开发人员可以提供准确的重建表的语句. 4, 数据文件有十多GB, 有五万个存放在LOB中的图片.     了解上述情况后, 立马让客户准备远程连接环境, 先是拷贝AIX上的数据文件到Windows上, 由AUL进行跨平台恢复; 然后是将Windows机器挂到Internet上, 由我进行远程操作; 约好晚上八点半开始, 经过三个小时的紧张恢复, 数据全部搞定....

根据表名搜索SQL语句

    用全文索引做了一个根据表名查找SQL语句的功能. 在Statspack中有一个表存放了数据库中执行过的SQL, 虽然不是全部, 但也有差不多99.9%了. 只是由于它是分行存贮的, 不能直接用普通的SQL语句(like)来查找, 表名有可能被折分存放在两行中. 解决的方法有两种, 一是写过程, 将多行的串在一起. 二是用全文索引中的主从存贮方式, 建立全文索引来查询. 我选择的是全文索引的方式.     先将这里面的数据拷出来, 分成两个表, 主表和从表. CREATE TABLE SQLS AS   SELECT DISTINCT HASH_VALUE,'X' BODY FROM STATS$SQLTEXT; ALTER TABLE SQLS ADD PRIMARY KEY (HASH_VALUE); CREATE TABLE...

数据库容量(Capacity)预测?

    DBA的一块主要的工作是后台系统维护, 当你在一家高速增长的网络公司做这个职位时, 已经不能光做些事后故障处理的事了, 需要对数据容容量(Capacity)作了一些有效的预测, 否则当业务高峰来临时, 就会手忙脚乱. 要将高可用性当成第一目标, 也不能光看目前的系统可用性, 要结合业务增长速度来看系统可用性, 这样容量预测的工作就势在必行.     从数据库的角度来的看, 可以先去分析下面几个因素和系统负荷的关系. 1, Execute Count 2, Logical Read 3, Physical Read 4, Physical Write 5, Transactions     当了解了上面的因素和系统负荷之间的变化关系后, 需要再分析资源和上面这些因素的关系, 以及资源的限制. 有那些方面资源呢? 1, CPU 2, IOPS...

ASSM表空间真浪费

    一直都反对使用ASSM表空间, 因为空间浪费比较严重. 但也从没有认真比较过, 还是先测试一下再说话吧. SQL> select count(*) from t_assm;   COUNT(*) ----------         19     将这个表复制一份到非ASSM表空间中, 再分析计算一下统计信息后, 看表的大小. SQL> select table_name, blocks   2 from user_tables where table_name like '%ASSM%'; TABLE_NAME       ...

将dmp数据导入到另一个表

    偶然看到有人问, 如何将A表导出的dmp文件导入到B表中, 初一看, 的确好象是不行, 其实还是有办法的. 先来建一个测试环境吧! SQL> create table t_a as select * from tab; Table created. SQL> create table t_b as select * from tab where rownum < 1; Table created.     任务是将T_A表导出的记录导入到T_B表中, 所以我在SYSTEM用户中建了一个同义词. SQL> create...

Oracle不行再用AUL

    继上次DUL搞不定CLOB中文问题后, 又遇到了NVARCHAR2中文问题, 有人在正式库中使用了这种数据类型, 遇到数据库损坏(System表空间被覆盖)后, 请人用Oracle DUL去搞的, 好象搞不定NVARCHAR2中的中文问题.     原因只有两种, 没有搞明白Oracle DUL这方面的设置参数, 或者是Oracle DUL实在不支持这种数据类型中的中文. CLOB的中文问题, 我还是费了两个晚上搞定的, 这一次的NVARCHAR2问题, 则没有费任何事, 早就支持了. 只是没有用户真的使用这种数据类型, 一直没有发挥作用而已, 没想到一上来又和Oracle DUL PK了一把.     照这样下去, AUL可以卖给Oracle了, 至少可以卖给Oracle中国, 反正这种事中国遇到的特别多. 只要用心去考虑和做事, 可以做得比原厂更出色啊.     能PK过Oracle自已的东西, 还是很有轻飘飘的感觉的....

一周遇到两个Oracle Bug

    来杭两周多一点, 扣去入职培训一周, 接触系统仅一周多一点的时间, 已经遇到了两个数据库方面的Bug了. 第一个是在10.2.0.2版本上遇到的, 和Oracle CBO优化器有关的, 在某些用了INDEX这个HINT的数据库中, Oracle居然选择了INDEX FULL SCAN的方法, 而不是效率更高的INDEX RANGE SCAN, 由于表及索引较大, 导致了SQL语句执成本过高, 引起了主机负荷超常. 4323868 INDEX hints can lead to INDEX SCAN FULL     另一个是在9i中遇到的, 和UNDO表空间有关的, 平时的事务都很小, 某一点作了一个比较大的事务, 引起了回滚段的扩展, 虽然UNDO中有大量的可用未分配的空间, 但这个扩展的过程却极慢. Oracle并不从可用未分配的空间中优先分配, 而是先去检查有没有已用的空间可以回收再加以利用, 导致一个操作比测试时间多了20分钟....

Oracle DUL不行就用AUL

    几天以前, 有个朋友告诉我某单位的Oracle数据库坏了, 需要恢复, 很想推荐人家用AUL的, 不过客户自已只信任Oracle的, 并且Oracle已经介入了. 于是我就笑着说, Oracle DUL不行时再来用AUL吧.     其实也只是随便说说而已, 没想到昨天再接到那朋友的电话, 说是Oracle DUL恢复遇到了问题, 客户有CLOB列中存放了很多中文, 用DUL恢复出来后, 这些字段值都成了乱码. 形成这个乱码原因当然是由于Oracle CLOB列的特殊性, 以及DUL作者不是中国人, 所以没有考虑到CLOB中的中文情况. 来咨询AUL是否可以处理这些乱码, 我欣然说可以.     客户马上联系我, 下载AUL, 在我的指导下很快就恢复了第一张表, CLOB中的中文内容没有大问题, 却有些小问题, 某些地方总是多了一些问号, 这个问题最好可以完美解决. 形成这个问题的原因是, AUL中只支持了GB2312字符集中的常用汉字以及中文符号, 现在大家都用支持更多中文字和中文符号的GBK字符集了, 因此有些不在GB2312字符集中的汉字或符号在转换时就成了问号, 这就是问号的来源....

Log Miner恢复的误区

    今天一个网友在用Log Miner恢复时, 发现怎么都恢复不了想要的DML语句, 所有步骤都是正确无误的. execute dbms_logmnr.add_logfile(options =>dbms_logmnr.new,logfilename => ... execute dbms_logmnr.add_logfile(options =>dbms_logmnr.addfile,logfilename =>... EXECUTE dbms_logmnr.start_logmnr(DictFileName=>'.....'); SELECT sql_undo,sql_redo FROM v$logmnr_contents WHERE seg_name=...     我用自已的MyLOG程序去查, 是找到了一条DML语句的, 可是Log Miner怎么不行呢? 你看他为什么要用Log Miner? 1, 表被删除(Drop). 2, 从昨天的dmp中恢复这个表. 3, 生成Log Miner数据字典文件. 4, 用Log...

选择AUL恢复数据的理由

    某全球500强企业的数据库坏了, 都将AUL列为恢复的方案之一, 为什么?     1, 比Oracle的恢复服务便宜, 节约成本.     2, 比Oracle的恢复服务着更快的响应速度.     3, 和Oracle的恢复服务一样的优质, 并且合法.     4, 让更少的人知道数据库出现的问题.     有这些下由, 还不心动吗? 回头一看, 在AUL的支持和驱动下, 已经有500篇文章了.     曾经有一美国企业因为受不了Oracle的反应速度, 最终选择了AUL作为恢复解决方案, 在等了Oracle几天后, 联系了AUL, 只用了1.5小时, 就将数据恢复回来了.    ...

不是好人, 这么无耻!

    对有一件事情一直不能忘怀, 不得不重提旧事, 想起AUL/MyDUL以前被诽谤的事, 有个人在他自已的QQ群中使劲说他的MYjDUL有多了不起, 还不停地遇人就说AUL/MyDUL是抄jDUL的源代码的, 来中伤本人真正原创的软件.     那时因为忙于改进和完善软件, 因此没有空去理这件事, 经过了三年的发展, 数十次的恢复经历, 相当完善后. 才有空去了解这件事. 经过从多个网友了解来的信息, 充分信某网站宣称自主开发的MYjDUL其实只是AUL/MyDUL第一版的Java源代码而已, 结果还要说AUL是抄jDUL的, 有些人居然做这么丢脸的事. 因为那一版的程序框架是不成熟的, 没有什么正式的作用, 因此MYjDUL也只不过是一个吓人的名称而已, 没有真正实用的软件, 连个试用版本都没有呢. 很久以前我在网上放出过那份源代码, 几个月前正式放出那份源代码, 看他还怎么叫?     厚黑学中说做人可以脸皮厚一些, 但也不能厚到这种程度, 和那个打磨汉芯的长江学者有得一比了. 也不知道Oracle为什么不去查一下这种非法盗用DUL去恢复的情况. 强列建议Oracle也用我这种许可证方式, 需要用员工号去申请许可证, 这样就知道是那个内鬼放出去的了.     另外一个证据是他做不了我的第三第四种恢复方式....

AUL恢复Oracle视图代码?

    AUL的数据恢复主要关注于数据本身, 象视图代码AUL虽不自动整理, 但它们也不过是存放在系统表空间中的数据, 还是可以恢复的. 原理是将系统表的数据导出来, 再导入到新的库中, 然后自已 写SQL语句来进行查询, 就可以获得重建视图的角本了.     需要导出下面几个系统表的数据. unload table sys.USER$ to sys_user.txt; unload table sys.OBJ$ to sys_obj.txt; unload table sys.COL$ to sys_col.txt; SET FIELD_TAG \x07 SET RECORD_TAG \x06 unload table sys.view$ to sys_view.txt;...

AUL恢复Oracle Sequence?

    AUL的数据恢复主要关注于数据本身, 象Sequence的信息AUL虽不自动整理, 但它们也不过是存放在系统表空间中的数据, 还是可以恢复的. 原理是将系统表的数据导出来, 再导入到新的库中, 然后自已 写SQL语句来进行查询, 就可以获得重建Sequence的角本了.     需要导出下面几个系统表的数据. unload table sys.USER$ to sys_user.txt; unload table sys.OBJ$ to sys_obj.txt; unload table sys.SEQ$ to sys_seq.txt;     调用建表角本, 创建表. @USER$_syntax.sql @OBJ$_syntax.sql @SEQ$_syntax.sql     运行sqlldr将数据导入到新的库, 注意不要将这些数据导入到SYS用户下....

AUL恢复Oracle触发器?

    AUL的数据恢复主要关注于数据本身, 象触发器代码AUL虽不自动整理, 但它们也不过是存放在系统表空间中的数据, 还是可以恢复的. 原理是将系统表的数据导出来, 再导入到新的库中, 然后自已 写SQL语句来进行查询, 就可以获得重建触发器的角本了.     需要导出下面几个系统表的数据. unload table sys.USER$ to sys_user.txt; unload table sys.OBJ$ to sys_obj.txt; SET FIELD_TAG \x07 SET RECORD_TAG \x06 unload table sys.TRIGGER$ to sys_trigger.txt;     调用建表角本, 创建表. @USER$_syntax.sql...

AUL恢复Oracle索引结构?

    AUL的数据恢复主要关注于数据本身, 象索引结构之类的信息AUL虽不自动整理, 但它们也不过是存放在系统表空间中的数据, 还是可以恢复的. 原理是将系统表的数据导出来, 再导入到新的库中, 然后自已 写SQL语句来进行查询, 列出表上的索引信息.     除了SYS.USER$和SYS.OBJ$外, 我们还要导出下面几个系统表的数据. unload table sys.ind$ to sys_ind.txt; unload table sys.icol$ to sys_icol.txt; unload table sys.col$ to sys_col.txt;     调用建表角本, 创建表. @IND$_syntax.sql @ICOL$_syntax.sql @COL$_syntax.sql     运行sqlldr将数据导入到新的库,...

AUL恢复Oracle存贮过程

    AUL的数据恢复主要关注于数据本身, 象存贮过程之类的代码AUL虽不自动整理, 但它们也不过是存放在系统表空间中的数据, 还是可以恢复的. 原理是将系统表的数据导出来, 再导入到新的库中, 然后自已 写SQL语句来进行查询, 以生成重建存贮过程的代码.     先恢复几张系统表的数据. unload table sys.user$ to sys_user.txt; unload table sys.obj$ to sys_obj.txt; set field_tag \x07 set record_tag \x06 unload table sys.source$ to sys_source.txt;     调用建表角本, 创建表. @USER$_syntax.sql...

Oracle数据恢复服务模式

    AUL工具可用于没有备份情况下的Oracle数据恢复, 提供服务的方式有多种, 顺便和用Oracle DUL提供恢复的方式比较了一下.     1, 现场服务. 如果我们相距很近, 如在同一个城市, 或一两小时路程, 并且刚好是休息时间, 则可以提供现场服务. 比如在上海就提供过现场数据恢复服务, 缺点时受时间和地域限制. Oracle DUL恢复者也同样面临这样的问题.     2, 上传下载. 如果我们相距不近, 并且数据库比较小, 则可以用这种方式, 现在Internet的速度也还可以了. 早期都只提供这种工作模式, 缺点是数据的安全性会被受到质凝, 如果数据文件有几个GB大小的话, 上传下载就不是那么快了, 从而导致了整个恢复的时间较长. Oracle DUL恢复者大都想采用这种方法.     3, 远程登录. 在数据文件比较大时, 请允许我远程连接(VPN或Internet直连),...

终极Oracle数据恢复工具 -- AUL

    原创工具AUL可以离开Oracle运行环境, 从数据文件中直接读取记录, 当你无法打开数据库(如丢失System表空间, System表空间损坏, 丢失其中一个数据文件, 数据文件时间点不一致, 表被Drop掉或Truncate掉)时, 可以考虑用它来读取剩余数据文件, 将数据恢复成文本文件或Dmp文件, 再装载或导入到新的数据库中. 因此可以被用于没有备份又无法打开数据库情况下的恢复.     经过三年多的研究开发和完善, AUL的功能已经十分完美, 支持文本方式(第二版)及DMP方式(第三版),多种数据类型, 包括BLOB与CLOB(第四版)的恢复, 并在AUL第五版中成功支持压缩表. 支持最新的Oracle 11g版本数据库.     到目前为止, 已经有来自十多个不同地区和国家的数十位客户选择了AUL作为终极恢复工具, 累计恢复的数据量已经超过1TB, 曾收到过1TB数据库的恢复请求, 更被真实地应用于一个2TB数据库的恢复实例中, 以最快的响应速度和最快的恢复速度(最短的案例是一个半小时, 从接到请求到将数据库恢复成文本文件)满足客户的要求.     强烈建议大家做好数据库的备份工作, 欢迎大家在不知道如何备份或在恢复时遇到不明不清楚的问题时向我咨询....

OR引起的Join性能问题

    在SQL语句中用了OR之后, 其实很不容易控制, 第一次是想让一个带两个OR的用UNION去执行, 结果用了USE_CONCAT后变成了4个UNION了, 居然没有办法让他按我想象的第一个OR进行UNION. 第二次是在索引上, OR条件导致了不能在索引上进行条件过滤. 现在遇到了第三次, 是同事发现的, 怕自已记不住, 就没有征得他的同意, 在这儿共享出来了.     有下面两个表, TYPE_ID列上值的重复性很高. CREATE TABLE T_SMALL (TYPE_ID, ID, ...); CREATE TABLE T_MIDDLE (TYPE_ID, ID1, ID2, ...);     运行下面的SQL时, 总是很慢, 我们已经指定用HASH JOIN, 并也指定了T_SMALL是驱动表, 百思不得其解. SELECT...

致命的人为错误

    在所有的错误中, 人为错误是最难恢复的, 尤期是要到达99.9%的恢复, 最近就有三个这样的例子.     一个国外的200G的数据库, 使用的是Oracle ASM, 有一天突然起不来的, 上去看了后, 居然是将一块ASM中的盘加到了操作系统的卷管理系统中了, 因此硬盘上部分数据被覆盖, 导致了Oracle ASM起不来. 后来找来找去, 说是有一个dmp格式的备份, 接近200GB, 这么大的dmp文件能成功导入的可能性很少了, 果然, 导入35GB的数据后, imp报错了. 最后的结果可想而知, 从这里可以看出文档(要指明那块盘被那个系统使用了), 方法(加盘前检查一下有没有正被别的系统使用)和简单性(同一台机器用ASM和OS VG做什么呢?)的重要性.     第二个例子, 人家用PL/SQL Developer工具以DBA权限登录, 一不小心选中了所有用户选项, 然后按了删除操作, 虽然发现后按了取消键, 并强行关闭数据库, 还是导致了上百个表被删除. 在删除的过程中, 又有部分数据进入到系统中,...

如何防止大的DML语句?

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

HVR, 欧州的Shareplex?

    除了Shareplex和GoldenGate外, 及中途夭折的MyLOG(开玩笑)外, 还有一个基于日志文件分析作Oracle逻辑备份的产品, 来自欧州的HVR(High Volume Replicator). 前几天发的一篇关于Zizzy开源项目的文章, 引起了他们的注意, 从而找到我, 原来Zizzy就是这家公司贡献出代码来的, HVR的核心就是Zizzy这个项目的代码了, 它相当于是Unix的Kernel了, 而HVR则相当于很漂亮的一个Unix Shell. 现在主要维护它的居然是一个中国籍人, 实在是意料之外了.     在与他们的谈话中了解到, 这个项目是从99年就开始研究开发它的, 我想Shareplex也差不多就是那时侯开始的吧, 不知道主要开发这个代码的Sean Young是什么背景出生, 居然这么历害. 这下我的牛皮又吹破了, 说是要注入MyLOG的代码, 看来没有必要了, 比我现有的完善多了, 到是可以仔细研究一下他们的代码, 看看可不可以贡献一点点. 看来握着MyLOG的源代码不放, 的确是做错了.     还问了一下他们产品的应用情况, TNT就是他们的客户之一, 在欧州那边有相当多的客户, 据说有一次开会,...

世上8个DUL, 别破解AUL!

    这世上有8个DUL类(包括DUL本身)的产品, 大家不一定要找Oracle DUL了, 也不一定要找AUL, 中国人要去破解就去破国外的吧, 别破解AUL了, 最近发现很多写程序的都是大牛, 很容易破AUL, 也可能是我太菜了. Bernard’s Data UnLoader Oracle官方工具, 由Netherlands的Oracle工程师Bernard van Duijnen用C语言写成. 由Oracle支持人员提供服务服务, 价格相当贵. 不过流出来的很多, 一般不能提供远程恢复, 要求现场或传文件的, 都是在用它私下恢复吧. DUDE/jDUL 最早曾经开源(jDUL)过, 后来不开源了, 名称改为DUDE, 由OakTable的成员编写, 网站上可以看到一个团队在维护, 支持Oracle 7, 恢复数据字典(整理建表角本)方面比我的AUL历害, 其他不相上下, Big File表空间大家都没有开始用呢. AnySQL UnLoader (AUL) 由Oracle...

ocidiff助力51job日常维护

    比较两个环境, 比如测试A和测试B, 或测试环境和正式环境之间的表结构差异, 是件很麻烦的事, 如果有成千上百的表, 可能会相当地耗时, 花个一两天也是有的. 正是因为不想花这么长的时间去做麻烦的事, 就偷懒地写了ocidiff这个表结构比较和自动同步程序.     一位51job的DBA朋友正好面临同样的问题, 我就推荐了这个程序给他. 早上正式使用后, 回馈说程序运行相当的快速和准确, 几分钟内完成手工几个小时才能完成的事, 并给出可读性很好很清晰的比较报告, 因此决定作为正式工具在公司内部使用, 以大大的减少了DBA在这类琐事上无谓的时间消耗. 每年年初他们网站的流都要上升个几倍, 因此需要花更多的时间面对负荷的上升, 就不能花太多的时间在手工比较表结构这种事上面. 这个角本再加上良好的SQL编写习惯, 可以防止某些低级错误.     这个工具是命令行的OCI程序, 做成命令行是为了更适合在OS上进行作业调度, 这一点虽不为大众所喜欢, 但却是很实用的. 这是一个三年前开发的工具, 已经成熟稳重了, 并且和人工处理相比, 它的结果更加准确. ocidiff是点对点的比较, 另一个工具(Compare Any Column)则可以进行多点之间的比较,...

先报身高? 还是体重?

    "我身高1.76, 体重85kg"与"我体重85kg, 身高1.76"有什么不同? 在关系数据库理论中, 确明地写着实体属性的顺序并不重要, 因此在我的DBDiff程序(表结构比较)中是不比较列的顺序的. 如果说硬要说列的顺序有关系, 那只能是说明应用程序代码习惯不够好. INSERT INTO tablename VALUES (...)     只有Insert语句不带字段列表的情况下, 才与列的顺序有关系, 但这不是一个好的习惯. 比方在多表关联时, 选择列时不加表名就不是个好习惯. 去年参加年会时, 淘宝的朋友曾提及以前就遇到过这样的问题, 在一个不太重要的系统中, 关联的两个表一开始所有字段名都不同, 后来有一天在一个表上加了和另一个表中某列同名的列, 这时应用出问题了. SELECT A.COL1, B.COL2, ... FROM A, B WHERE ...     很多都是简单的事,...

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后也可以用同样的原理来处理, 自带的JRE文件存放路径如下, 和以前的版本有所不同. stage\Components\oracle.jdk\1.5.0.1.1\1\DataFiles\jre.jar     你可以从SUN Java网站下载可运行于Windows Vista的版本, 安装到根目录下的jdk目录. c:\jdk     然后在根目录下运行如下命令, 生成新的JRE文件. c:\jdk\bin\jar -cvf jre.jar jdk\jre    ...

向Zizzy项目注入MyLOG

    开源项目网(SourceForge)上出现了一个名为Zizzy的项目, 指在挑战Quest公司的拳头产品Shareplex或GoldenGate, 打造免费的基于日志的Oracle复制软件, 我开始研究Oracle日志格式时, 也定的这个目标, 可惜失败了. 是从Jonah Harris主管的Oracle Internals网站得到这个项目信息的. 现在这个项目中还没有任何代码或文档可以看, 而本人的MyLOG则已经可以解出SQL语句了, 只是凭着我一个人, 无法再研究下去了而已, 而我也很难找到志同道合者并有空余时间和精力继续下去, 早就有开源的想法了.     只要有人真的愿意好好做下去, 我还是愿意贡献我的代码的, 毕竟我的研究结果放着也就放着, 何不让出去呢? 不为利, 博个名吧.     目前还没有贡献出去, 还需要对这个项目的发起人, 及现在的人员作个调查再说. 交给别人去管, 自已有空时做个研究者, 也是一种乐趣....

Oracle CBO认为Cost为0

    在一个分区表上去执行一个SQL时(在Where条件中用了分区列等于的条件, 分区列为主键索引的最后一列), 发现用错了执行计划, Oracle居然认为某个SQL的执行计划的成本为0, 实际上是肯定没有本为0的执行计划的, 因此是明显的不合理的现象. SQLPLAN                                          COST CARD KBYTE PS PE ------------------------------------------------ ---- ---- ----- -- --   0     SELECT STATEMENT Optimizer=RULE             0    1     0   1   0   SORT (GROUP BY)                                1     0   2   1     PARTITION RANGE (SINGLE)                0    1     0 3  3   3   2      ...

无SYSTEM时的LOB恢复

    本想将这种情况下的恢复步骤永远藏在心中的, 因为它在实际生活中太难以恢复了. 看到有人真的遇到了这种情况, 我还是将恢复的步骤写一下吧. 先来创建一个表空间及带BLOB字段表. SQL> CREATE TABLESPACE LOBDATA   2    DATAFILE 'C:\oracle\oradata\db10g\lobdata01.dbf' size 24m   3    extent management local uniform size 128K   4    segment space management manual; Tablespace created. SQL> CREATE TABLE T_LOB (COL1 NUMBER, COL2 BLOB) TABLESPACE LOBDATA; Table created.  ...

导出时的字符集转换

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

保持好习惯不容易

    前几天体会到保持好的习惯不容易, 在一个几十个GB的分区表上建一个索引, 为了加快速度, 就用了并行. 命令如下所示: CREATE INDEX ... ON ... (...) PARALLEL 2 LOCAL ONLINE; ALTER INDEX ... NOPARALLEL; ANALYZE INDEX ... ESTIMATE STATISTICS SAMPLE 10000 ROWS; ANALYZE INDEX ... ESTIMATE STATISTICS SAMPLE 2 PERCENT;     其实这样也算不错了,...

Rename Table的语法

    谁都知道在SQL*Plus中重命名(Rename)一个表的命令, 如下所示: RENAME old_name TO new_name     但需要注意的是这个命令是SQL*Plus的命令, 如果将它放在你自已的程序(如:Java, Perl等)中, 则是会报错的. 这时应当用标准的重命名语法: ALTER TABLE old_name RENAME TO new_name     重命名索引时, 就必须用标准的数据库命令了. ALTER INDEX old_name RENAME TO new_name     有些SQL*Plus的命令, 在前面加上ALTER之类的就成了标准的数据库命令了, 如: RECOVER STANDBY DATABASE UNTIL...

ociuldr更新(2008/01/25)

    到现在为止, 免费文本导出小工具(ociuldr)的累计下载次数已经突破5000次, 已经有很多的知名的大公司, 选择下载源代码, 进行编译和使用, blue_prince在阿里巴巴更是创下了导出文本速度的新记录.     而我大约是这个工具的最大用户吧, 昨天花了二个小时, 给数据仓库组导了10亿条记录, 在导的过程中发现了一个无关紧要的小问题, 当文字类型字段不是从表中直接来时, 可能会分配过多的内存. 如下所示. C:\>ociuldr user=test/test query="select '' from dual" 1638450 bytes allocated for column '' (1)        0 rows exported at 2008-01-25 08:39:37        1 rows...

有恢复业务, 你想去做?

    在某一台机器上有两个数据库, 简称A库和B库. 有一天向A库加数据文件时, 用了B库中的某一个文件, 因此B库坏了, 某个表空间坏了, 有些表不能访问了. 其他情况如下: 没有任何数据文件备份. 有最近一年的归档日志. 那个文件是在最近一年之内(2007年9月份之前)新建的. 2007年10月26号的某一个日志坏了, Oracle恢复不运去了. 在这个坏的文件上有Extent的表有25个. 2007年10月26后到现在的归档日志大约有几百个.     依我个人意见, 我直接地告诉他们不可能完全(100%)恢复了, 当然可能其他人还有办法了, 他们的领导说了, Oracle一定能全部恢复就能100%恢复. 人家在QQ上不时地问了我三天有关这个恢复的问题了, 解释来解释去, 嫌烦了, 因为我做不到100%恢复, 所以将这个机会共享出来给大家.     有兴趣的可以问我要他们的QQ号, 正急着呢! 估计这几天如果不搞定, 再过几天就过年去了, 没有心思去搞了....

AnySQL的SQL Server / Sybase版

    AnySQL的Oracle版本, 自写自用, 感觉很好很强大, 可是还没有其他数据库的版本, 总是愧对Any这个字啊. 昨天装了SQL Server Express之后, 发现没有适合我的命令行工具, 习惯了Oracle的SQL*Plus一样的界面后, 用起osql及sqlcmd总感觉得十分不方便, 常常在一个SQL语句后面打上分号, 也常常另起一行敲入反斜杆来执行命令, 可这些在SQL Server的工具里都不灵了.     还是打造一个Oracle风格的命令行工具吧, 推出AnySQL的SQL Server/Sybase版, 这两种数据库是从同一个猴子进化而来的, 因此将他们放在一起好了. 命令行界面如下: C:\AnySQL>asql --mssql AnySQL for SQL Server/Sybase, version 2.0.0 (@) Copyright Lou Fangxin, all rights reserved....

不能删除物化视图?

    几分钟前一网友问我如何删除一个实体化视图, 当然不是什么语法不会的问题了, 是发了Drop命令后一直挂着, 几个小时都没有结束, 你可以想想为什么? 先看一下创建的语法. create materialized view  user_order_mavi      build immediate        refresh   on commit        enable query rewrite as select  service_id,substr(user_isdn,1,7),          bill_type,follow_action,count(user_isdn)   from user_order group by service_id,substr(user_isdn,1,7),           bill_type,follow_action     看到这个语句, 应当是刷新的类型那儿有问题, 在ON COMMIT刷新模式下, 如果基表的DML很频繁, 会造成刷新很频繁,...

分析用户所有表之后

    随着Oracle对CBO的进一步增强和改进, 对表进行分析已经成为一种常用的调优的手段, 当发现某个表的相关SQL语句的执行计划有问题时, 首先会想是不是统计信息过旧的问题, 如果的确是过旧, 则对这个表进行分析, 以让Oracle重新选择准确的最优执行计划, 以达到调优的目标. 用不合适的方式对表进分析, 则会造成十分严重的后果, 如对一个用户下的所有表进行分析, 或一下子分析多个表. 看到网友的一篇贴子, 让我想起二年多前帮别人处理过的一个案例, 有位DBA对某用户下的所有表进行了分析.     基本情况是, IBM P570, 16CPU, 32GB内存, 24GB的SGA, 支持不了一个50G的9i数据库(OLTP类型), 二百个以内的会话. 在分析之前CPU利用率是50-70%左右, 在分析后则一直是100%. 面临这样的情况后, 由于没有做统计信息(Statistics)的备份, 因此无法恢复以前的情况, 首先做的是删除所有非分区表的统计信息, 对分区表做更精确的统计信息分析, 使之运行于RULE方式, 情况稍有好转, 但用户还是不能接受, 相信Oracle的CBO没有那么差, 因此性能问题的关键并不在于统计信息了. 在处理了以下几个问题之后,...

为什么多了一个空格?

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

Oracle RAC VIP不能启动2

    由于VMWare GSX Server和Windows XP sp2的不兼容, 就安装了VMware Server版本, 却发现安装的Oracle RAC不能好好工作了, 最大的原因是, VIP服务不能自动启动了, 怎么找也找不出原因.     用oifcfg命令看RAC的网卡设置, 没有发现问题. [root@db01 /]# oifcfg getif -global eth0  138.1.137.0  global  public eth1  192.168.20.0  global  cluster_interconnect     冲其量来说, VIP只是在网卡上绑定了另一个IP, 手工运行如下命令都没有问题. [root@db01 /]# ifconfig eth0:1 138.1.137.11 netmask 255.255.255.0 up [root@db01 /]#...

Oracle DBA By ......

    昨天关注了一下公司股票, 顺便去Forbes(福布斯)看了一下外界对公司的有关评测, 没什么看到好消息. 到是Forbes(福布斯)网页的最下面, 有个地方引起了我的注意. Powered By ...... Oracle DBA by ......     "Powered By"到是常常在网站上见到, 而"Oracle DBA By"则是第一次见到, 由此可见DBA在国外网站的重要性. 对于广大的DBA来说, 看到这个应当会热血沸腾一下吧. 想想如果有网站如下面这样写, 我会有多高兴啊! Powered By ...... Oracle DBA by AnySQL     顺便建议广大DBA在做技术服务后, 让你的客户打上这样的标识. 你提过这样的要求吗?...

Oracle RAC VIP的依赖

    Oracle 10G RAC中多了一个VIP资源, 也许应当叫服务, 如下所示, 其中db01, db02, db03都是RAC节点的名称. [root@db02 oracle]# crs_stat | grep vip NAME=ora.db01.vip NAME=ora.db02.vip NAME=ora.db03.vip     正常安装后, 有两个资源或服务依赖于vip这个资源, 分别是listener和instance. [root@db02 oracle]# crs_stat | grep db01 NAME=ora.db01.LISTENER_DB01.lsnr NAME=ora.db01.gsd NAME=ora.db01.ons NAME=ora.db01.vip NAME=ora.racdb.db01.inst     这样也就是说如果vip出现服务, RAC会自动停止监听器和数据库实例. 停止监听器,...

手工添加Oracle RAC监听

    在Oracle 10g CRS中没有直接添加Listener的命令, 但可以创建一些配置文件, 然后注册这些文件来向CRS中添加临听器. 首先在每台机器中配置临听器, 手工创建listener.ora文件, 包括所有节点的监听器, 这里面的node名称用大写. SID_LIST_LISTENER_<node>= LISTENER_<node>=     接下来要创建配置文件, 有几个节点就要创建几个文件, 第一个node用小写的, 后面的用大写. ${ORA_CRS_HOME}/crs/public/ora.<node>.LISTENER_<node>.lsnr.cap     每个文件中包写入如下几行, 假设节点的名字是db03. NAME=ora.db03.LISTENER_DB03.lsnr TYPE=application ACTION_SCRIPT=${ORACLE_HOME}/bin/racgwrap CHECK_INTERVAL=600 ACTIVE_PLACEMENT=1 DESCRIPTION=CRS application for listener on node HOSTING_MEMBERS=db03 PLACEMENT=favored REQUIRED_RESOURCES=ora.db03.vip    ...

Oracle RAC VIP不能启动?

    在笔记本上完成三个节点的Oracle RAC安装已经好几天了, 先是在一个节点上用图形界面安装的, 另外两个是装了OS后, 用rsync将CRS和DB软件拷贝过去, 然后在命令行下完成所有设置的. 虽然RAC服务是可以起来了, 数据库也可以在三个节点打开, 但是一些外围服务去一直没有跑起来, 包括vip.     晚上先是在google上搜索了一下, 发现好象遇到了一个bug, 我的hosts和ocr中设置的机器名都是小写的, 而hostname命令输出的则是大写的, 导致了vip不能自动启动. 通过更改/etc/sysconfig/network文件, 然后重启服务器更改了, 不知道不重启, 运行如下命令行不行? echo "db01" > /proc/sys/kernel/hostname     很幸运地, 这台机器重启后, 启动crs, 发现vip服务已经启动了, 但如法泡制第二个节点时, 还是不行. 不知道那根筋搭错了, 去比较了一下两台数据库的公共网卡的配置文件(/etc/sysconfig/network-scripts/ifcfg-eth0). 发现不行的网卡少了两行. DEVICE=eth0 BOOTPROTO=static...

Linux OCFS2安装及配置

    OCFS2是一款廉价的Cluster文件系统(Cluster File System), 由Oracle领导开源方式开发的, 可以到Oracle OSS网站上免费下载现成的或源代码进行编译. 要下载两个包, 需要注意和Linux内核的版本匹配总题, 如果下载源码自行编译则另说. rpm -i ocfs2-2.6.9-55.ELsmp-1.2.7-1.el4.i686.rpm \        ocfs2-tools-1.2.7-1.el4.i386.rpm     安装后, 用root用户创建"/etc/ocfs2/cluster.conf"文件, 配置如下(你可能要改你的ip地址和主机名). cluster:         node_count = 2         name = ocfs2 node:         ip_port = 7777         ip_address = 192.168.20.10         number = 0         name...

Linux Oracle RAC内核参数

    在Oracle RAC/DB的安装过程中, 会要求调一些Linux内核参数, 如下所示. # For Oracle 10g RAC kernel.sem=250  32000   100     128 kernel.shmmax=1048576000 kernel.shmmni=4096 kernel.shmall=2097152 fs.file-max=65536 net.core.rmem_default=262144 net.core.rmem_max=262144 net.core.wmem_default=262144 net.core.wmem_max=262144 net.ipv4.ip_local_port_range=1024  65000     将上面的这几行加到/etc/sysctl.conf的最后, 然后运行如下命令使之生效. sysctl -p     在拷贝出来的结点中, 没有更改这些参数, 也没有问题出现, 能启动....

最小X-Window,运行xterm