在AnySQL.net中搜索标签(Tags) 'Oracle' 的结果:
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
俺是在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 \ glibc-devel-2.3.4-2.36.i386.rpm \ glibc-headers-2.3.4-2.36.i386.rpm \ glibc-kernheaders-2.4-9.1.100.EL.i386.rpm 然后开始安装X-Window组件. rpm -i xorg-x11-6.8.2-1.EL.18.i386.rpm \ chkfontpath-1.10.0-2.i386.rpm \ fonts-xorg-base-6.8.2-1.EL.noarch.rpm \ xinitrc-4.0.14.3-1.noarch.rpm \...
Mini VMWare Oracle RAC
创建第一个RAC节点时, 分了一个4GB的盘, Linux已经是选择最小安装了, 然后自已手工安装的gcc开发包及基本X-Windows系统, 能运行xterm就行. 后来搞了一个更小的3G, 分区设置如下: /boot : 64MB swap : 384MB / : 2578MB 手工安装开发包的命令如下, 可能这些包的版本要改改, 这些是RHAS4 Update 5的. rpm -i gcc-3.4.6-8.i386.rpm \ cpp-3.4.6-8.i386.rpm \ glibc-devel-2.3.4-2.36.i386.rpm \ glibc-headers-2.3.4-2.36.i386.rpm \ glibc-kernheaders-2.4-9.1.100.EL.i386.rpm rpm -i...
Oracle AQ的问题
Oracle AQ问题, 江湖救急, 在那么多的回答中, 有幸我的答案最后解决了问题, 解决的方法是如此之简单. 将aq表的索引rebuild一下? 其实在调优化的过程中, 主要还是缺少数据, 从而无法找出问题的根本原因所在, 所以我的回答也加了一个问号, 因为这只是猜的. 对于这种持续较长一段时间的, 比较容易获得相应数据, 如Statspack或现场去捕捉一些. 但对于偶然发生的突发性数据库负荷很高, 这种情况持续的情况很短暂, 可能最后自动变好, 或者数据库服务器就挂了, Statspack就无能为力. 因此需要一些能以较快的频率捕捉性能数据的程序, 如很早以前开发的OTop程序, 可以每10秒钟输出Top Session信息. 或OPMon程序, 可以捕捉最近30秒的SQL的执行情况, 从而找出Top SQL, 这两个工具本身的执行代价都极低. 但无法相象以这样的频率去进行Statspack收集. 最近在完善的另一个程序是oramon, 可以更好是记录一些主要的性能数据,...
结婚前的Oracle
Oracle是什么? 是一个管理数据的软件系统, 很重要, 和结婚前的恋人差不多, 此篇献给不懂Oracle的本站读者, 很早时写过一两篇的, 但站点被黑因此全丢了. Oracle Standby, 有一颗红心, 两种或多种准备, 万一一个恋爱谈崩了, 马上移到下一个. 从Primary切到Standby一般是不太愿意的, 放弃第一个而取第二个, 同样也是不太愿意的. 备用的一开始不需要很细心的照顾, 稍微留点心, 就可以保持了, 出问题时努力一下就成了Primary了. 如果出了问题就得重新建立了. Oracle Dataguard, 其实和Standby一样, 只是关系更密切一些, 需要投入更多一点的资源, 需要切换成Primary时更省力一些而已, 但还是有主从之分的. Oracle RAC, 这就比较花心了, 可以说成脚踩两只或多只船,...
Get DDL工具
在DBMS_METADATA之前, 要获得建表语法, 估计很多人都要用Toad或PL/SQL Developer之类的程序了, 不过很多数据库运行在Unix或Linux上, 并不允许我们用这类工具去连接, 这时还真是一件难事. 就算有了DBMS_METADATA我也并不觉得它很方便, 因此不如自已写一个角本, 在我的DBDiff程序中, 已经通过exp/imp的办法实现了, 将相关部分功能独立出来, 就成了getddl工具(Windows版本). 程序经以过以下步骤来实现这个功能: 1, rows=n进行导出; 2, 用show=y加上indexfile选项生成内容; 3, 处理生成的indexfile并打印出DDL语句. 因此这个小工具需要Oracle的客户端, 并且客户端的版本不能高于服务器端. Usage: getddl table=... [user=...] (c) Copyright Lou Fangxin, 2008, all rights reserved. ...
怎么升级Oracle的?
有人在Itpub上问Oracle 817建分区表怎么出错了? 错误如下: ORA-00604: error occurred at recursive SQL level 1 ORA-00904: invalid column name 通过设置SQL跟踪, 发现了引起错误的SQL语句. PARSE ERROR #5:len=127 dep=1 uid=0 oct=2 lid=0 tim=0 err=904 insert into partcol$ (obj#, intcol#, col#, pos#, spare1, segcol#, ...
MVIEW引起ORA-04031
有一个数据库报了ORA-04031错误, 等我们上去看时, 却是好的, 通过查询Statspack有关视图, 发现Shared Pool Free Memory在这之前是逐渐减少的, sql area部分占得很大. 可能的原因是, 当Oracle遇到这个错误后, 自动做了一次Flush Pool操作. 于是写了一段程序去跟踪SQL占用的内存, 发现有两个SQL语句很不正常, 版本数很多, 占用的内存也很大, 差不多占了一半的sql area. ASQL> ora share ADDRESS CHILDS BYTES ---------------- ------ --------- 0000040000A328F8 1026 215577124 000004000F7AB058 1026 215503530 来看一下这两个SQL语句是什么? ASQL>...
国外Oracle专家服务报价
服务越来越重要, 来看一个国外Oracle专家提供技术服务的报价, 都是以美元为单位的. 服务提供者为高级的具有OCP证书的DBA专业人员, 按服务地点可分为远程和现场, 按服务时间可分为临时服务和不小于多少小时的包时服务. 1, 远程服务价格, 临时: 每小时175 USD. 保证80小时: 每小时165USD, 至少13200美刀. 2, 现场服务, 临时: 每小时275 USD. 保证80小时: 每小时265USD, 至少21200美刀. 对于Oracle RAC的服务, 收费要贵一些了, 看来得好好学学RAC了. 1, 远程服务价格, 临时: 每小时200 USD. 保证80小时:...
SQL DBA兼管Oracle库
前段时间, 一个澳大利亚的网友说他的Oracle库中某个表空间只留下了几个数据文件, 还能不能恢复. 在这儿不讨论如何恢复数据的问题, 要关注引起这个问题的根源. 根本原因是他们请了一个SQL Server DBA, 兼职(顺便)管管Oracle数据库, 当某些数据过时了, 要归档起来, 这个SQL DBA就将表空间从Oracle中删除了. 原因是SQL Server中是可以这样做的, 只要数据文件存在, 就可以挂到新SQL Server数据库中, 不幸运地是, 他这个猜测错了. 后来他们的客户再来要求查询过去的数据时, 就发生了这个问题. 有两个方面的问题, 值得思考. 从DBA个人角度来说, 不应当这么随便地只根据自已的猜测, 就去做删除数据这样的操作, 这个思界, Google一下, 有这么难吗? 如果DBA有这种想法或倾向, 那么你很难被大公司录用. 从公司角度来说, 让不懂的人去做重要的事,...
删除4TB的表
由于历史的原因, 居然有机会清理4TeraBytes大小的表, 而且这个表是在字典管理表空间(DMT)上的, 新建的都不会再用字典管理表空间了, 估计在其他地方是不可能遇到的了. 用最吐的CTAS方法将数据归档了一部份, 并重新设计分区的逻辑, 完成后就得将这个表删除以释放空间. 心中很是担心害怕, 不过也没有办法, 只能继续. 大致经过了如下步骤: drop index ...; truncate table ... reuse storage; alter table ... deallocate unused keep 2000000m; alter table ... deallocate unused keep 1500000m; alter table...
TIMESTAMP类型上的索引
Oracle在进行值的大小比较时, 不是我们人脑所想象的那种值比较, 而是将这些值的物理存贮进行字典式的字节比较. 我们来看一下数值1和2的物理存贮. SQL> SELECT DUMP(1) FROM DUAL; Typ=2 Len=2: 193,2 SQL> SELECT DUMP(2) FROM DUAL; Typ=2 Len=2: 193,3 可以看到"1<2"就是象"AB<AC"这样比较的. 对于Timestamp类型也是这样的. SQL> select dump(current_timestamp) as col1 from dual; Typ=188 Len=20: 7,215,12,4,2,15,5,0,7,7,2,224,249,0,5,49,0,0,0,1 SQL> select dump(current_timestamp) as...
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 将exp拷贝一份, 命名为expp(Exp Parallel). 然后用UltraEdit打开expp文件, 在二进制模式下找到如下这一段. BEGIN SYS.DBMS_EXPORT_EXTENSION.SET_NO_OUTLINES; END; 将它编辑为"ALTER SESSION FORCE PARALLEL QUERY PARALLEL 4", 然后保存. 接下来用expp来导出一个表看看,...
如何提高Oracle exp/imp的速度?
在用Oracle的exp/imp工具时, 常常有人嫌它忙, 这个两个工具是比较慢, 除了用比较大的buffer参数外, 还是有办法可以加快的. 在exp时, 可以考虑更改表的并行度(ALTER TABLE xxx PARALLEL 4), 或者更改exp进程的Multiple Block Read参数的值. SELECT SID, SERIAL# FROM V$SESSION WHERE PROGRAM LIKE 'exp%'; exec dbms_system.set_int_param_in_session( sid, serial#, 'db_file_multiblock_read_count', 128); exec...
Oracle 11G OLTP Compress支持的含义
在Oracle 11g之前, 普通的Insert不能使数据以Compress方式存贮, 你可以做实验对它进行验证, 只能通过将表移动一下, 或用CTAS或Bulk Insert的方式来进行表压缩. 最近也开始用Compress表存放一些几年前的数据了. 虽然有触目惊心的Bug, 但空间的节约却是可观的, 有时也得挺而走险(没有这么严重)一下. 在Oracle 11g中, 号称支持OLTP的Compress表, 并不是算法有什么改进(我用AUL 5去恢复11g中的压缩表, 也能恢复出来, 就说明了这一点), 也只是修复了一些Bug, 并且在普通的Insert语句下, 也可以进行压缩(还没有装11g进行验证). 如果这个功能安全可靠的话, 到是可以用于存放什么Log信息的表, 一个系统中总是不关键的数据占据了大多数存贮. 11g安装软件太大了, 我还没有下载Windows的版本呢? 谁下载了去拷一下算了....