白鳝的洞穴 ( 白鳝与Oracle的亲密接触 ) 给他(她)留言   |  相册  |  回到专栏  |  管理  |   登录  博客首页
白鳝在工作中的点滴积累,不仅仅包括技术的
白鳝
  •    我的栏目
  •   我的文章
      Oracle杂谈
      内部分析
      优化
      案例
      小技巧
      BUG与故障
      SQL与PL/SQL开发
      DBA日记
      IT长篇小说第一部:IT的I
  •    最新文章
  •   DBA日记第三部 像Oracle一样
      DBA日记第三部 像Oracle一样
      DBA日记第三部 像Oracle一样
      DBA日记第三部 像Oracle一样
      DBA日记第三部 像Oracle一样
      CPU_COUNT对共享池的影响
      DBA日记 第三部 像Oracle一样
      DBA日记 第三部 像Oracle一样
      3月24日 简单任务 (1)令人
      3月23日 理解表的存储结构 (
  •    最新评论
  •   [HadaVopsesoto]   Would you like to play solitaire against real persons?
      [飞帆]   回复:DBA日记第三部 像Oracle一样思考 3月28日 理解索引(1)
      [xhh]   回复:健康性检查
      [jimlist]   回复:Oracle常用EVENT参考(3)
      [edwards6309]   回复:DBA日记第三部 像Oracle一样思考 4月2日 索引危机(3)效果不错
      [eagle_fan]   回复:DBA日记第三部 像Oracle一样思考 4月2日 索引危机(3)效果不错
      [白鳝]   回复:DBA日记第三部 像Oracle一样思考 4月2日 索引危机(3)效果不错
      [白鳝]   回复:DBA日记第三部 像Oracle一样思考 4月2日 索引危机(3)效果不错
      [killkill]   Re:DBA日记第三部 像Oracle一样思考 4月2日 索引危机(3)效果不错
      [sir.liang]   回复:健康性检查
  •    博客统计
  •   文章 - 166
      评论 -772
      访问 - 57822
  •    友情链接
  •    
      10G 检查RMAN备份可否跨平台恢复 2008-9-26 16:06:30
    Note:413586.1上有个小程序不错,供大家参考SQL> set serveroutput ondeclare  db_ready boolean;  begin  db_ready := dbms_tdb.check_db('Linux IA (64-bit)');end;/SQL>   PL/SQL procedure successfully completed.SQL> set serveroutput ondeclare  db_ready boolean;  begin  db_ready := dbms_tdb.check_db('AIX-Based Systems (64-bit)');end;/SQL>  The specified target platform name 'AIX-Based Systems (64-bit)' is invalid orthe target platform is not transportable.PL/SQL procedure successfully completed.如果没返回任何信息,就是可以兼容,否则会显示不兼容。不过要注意的是数据库要在READONLY模式下打开才可以做该贴被白鳝编辑于2008-9-26 16:08:32

    点击此处查看原文
    评论 (1)阅读(1797)
      WINDOWS上使用文件系统模拟ASM 2008-4-3 13:03:04
    一直想在WINDOWS上搞一个ASM的测试环境,不过笔记本上没留裸设备。所以也一直没做。今天看到METALINK上一个文件系统模拟ASM的方案,感觉不错,拿出来和大家分享:1、创建CSS服务E:\oracle\product\10.2.0\db_2>crssetup ladd -oh E:\oracle\product\10.2.0\db_2 -l ENStep 1:  creating new OCR repositorySuccessfully accumulated necessary OCR keys.Creating OCR keys for user 'jackson xu', privgrp ''..Operation successful.Step 2:  creating new CSS servicesuccessfully created local CSS servicesuccessfully added CSS to home2、创建虚拟设备E:\oracle\product\10.2.0\db_2>asmtool -create e:\asm\file01.asm 200E:\oracle\product\10.2.0\db_2>asmtool -create e:\asm\file02.asm 200E:\oracle\product\10.2.0\db_2>dir \asm 驱动器 E 中的卷是 e 卷的序列号是 CCD1-A66D E:\asm 的目录2008-04-03  11:44              .2008-04-03  11:44              ..2008-04-03  11:44       209,715,200 file01.asm2008-04-03  11:46       209,715,200 file02.asm               2 个文件    419,430,400 字节4、启动实例并创建DISKGROUPE:\oracle\product\10.2.0\db_2>set ORACLE_SID=ASM1E:\oracle\product\10.2.0\db_2>set ORACLE_HOME=E:\oracle\product\10.2.0\db_2E:\oracle\product\10.2.0\db_2>ORADIM -NEW -SID ASM1实例已创建。SQL> startupASM 实例已启动Total System Global Area   83886080 bytesFixed Size                  1247420 bytesVariable Size         

    点击此处查看原文
    评论 (9)阅读(4251)
      重建INVENTORY的RAC NODELIST 2008-3-28 0:16:43
    最近的系统升级好像总是不消停。今天一个哥们又碰到这样的问题:RAC安装的时候是装的单节点,添加节点是将安装介质手工拷贝过去,并做了一定修改。要升级到9.2.0.8。升级的时候出问题了,由于两个节点的INVENTORY是一样的,并且只有单节点信息,因此OUI无法识别第二个节点。处理方法: runInstaller -updateNodeList -noClusterEnabled -local ORACLE_HOME=$ORACLE_HOME CLUSTER_NODES=racdb1,racdb2更改节点列表后,安装还是有问题,检查$ORACLE_HOME/oui/oraparam.ini 发现:CLUSTERWARE={"oracle.crs","10.1.0.2.0"} 将该行删除,再次运行安装程序,一切OK了。分析:1、通过updateNodeList可以修改inventory的节点信息2、由于使用了10G的OUI,而我们的版本是9i,因此使用了noClusterEnabled参数,但是没起作用,这是oui的bug引起的,因此只能直接修改oraparam.ini 该贴被白鳝编辑于2008-4-6 9:16:42

    点击此处查看原文
    评论 (2)阅读(2019)
      修复被设置为unused的字段 2008-3-17 21:07:25
    刚才有个人问我如何修复被设置为UNUSED的字段,我考虑了一下,以下的方法可以恢复(以下步骤执行前要做好备份),没有经验的DBA不要轻易尝试。1、创建实验表TTTASQL> CREATE TABLE TTTA ( A INTEGER,B INTEGER,C VARCHAR2(10),D INTEGER);表已创建。SQL> INSERT INTO TTTA VALUES (1,2,'3',4);已创建 1 行。SQL> INSERT INTO TTTA VALUES (2,3,'4',5);已创建 1 行。SQL> COMMIT;提交完成。  ALTER TABLE TTTA SET UNUSED COLUMN C;2、以下进行恢复  SQL> SELECT OBJ# FROM OBJ$ WHERE NAME='TTTA';      OBJ#----------     32067SELECT COL#,INTCOL#,NAME FROM COL$ WHERE OBJ#=32067;      COL#    INTCOL# NAME---------- ---------- ------------------------------         1          1 A         2          2 B         0          3 SYS_C00003_08031720:09:55$   被UNUSED的字段         3          4 DSQL> SELECT COLS FROM TAB$ WHERE OBJ#=32067;        COLS----------         3      ------字段数变为3了 SQL> UPDATE COL$ SET COL#=INTCOL# WHERE OBJ#=32067;已更新4行。SQL> UPDATE TAB$ SET COLS=COLS+1 WHERE OBJ#=32067;已更新 1 行。UPDATE COL$ SET NAME='C' WHERE OBJ#=32067 AND COL#=3;UPDATE COL$ SET PROPERTY=0 WHERE OBJ#=32067;SQL> COMMIT;3、重启数据库SQL> SELECT *  FRO

    点击此处查看原文
    评论 (8)阅读(1772)
      健康性检查 2008-2-13 13:11:01
    很多人会把健康性检查和调优混淆起来,其实调优和健康性检查的出发点是不同的。健康性检查的目的是找出系统可能存在的隐患,性能隐患只是其中的一个方面,而不是全部。有些非性能隐患可能给系统带来的风险更大。所以说健康性检查的最终目的是找出可能对系统造成影响,带来服务终止或者服务质量下降的因素。一般来说健康性检查需要涵盖以下的方面:1、硬件资源:各种硬件资源是否充足,是否能够满足目前以及未来几个月甚至半年的业务发展2、操作系统:操作系统的文件系统是否存在问题,操作系统日志中是否存在严重的隐患,操作系统的参数是否满足目前数据库实例的需要,SWAP区、/tmp等是否满足目前业务的需要3、数据库的配置:参数设置是否存在问题,SGA、UNDO、REDO、控制文件、归档是否合理。表空间是否存在问题。4、数据库各种日志5、数据库性能6、备份恢复7、TOP SQL8、安全可以参考一下METALINK How to Perform a Healthcheck on the Database 122669.1该贴被白鳝编辑于2008-4-6 9:32:55

    点击此处查看原文
    评论 (15)阅读(3099)
      系统HANG住了,怎么办? 2008-2-1 10:56:46
    如果系统HANG住了,这个时候做一个SYSTEM STATE DUMP,对于分析HANG的原因十分重要。但是很多情况下,系统HANG住了就无法登录,那么如何进行分析呢?METALINK DOC :359536.1提供了一些好的办法,在这里和大家共享:支持的数据库版本:9.2.0.1-10.2平台(部分是UNIX平台,部分适用于所有平台)1、10G以前,使用DBX,GDB之类的工具:  找到一个前台进程的PID(ps -ef|grep LOCAL),然后用gdb $ORACLE_HOME/bin/oracle 进行跟踪 oracle@gurufl02:~> ps -ef|grep LOCALoracle   26358 26357  0 09:52 ?        00:00:00 oracleora9 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))oracle   27848 27810  0 10:41 pts/3    00:00:00 grep LOCALoracle@gurufl02:~> gdb $ORACLE_HOME/bin/oracle 26358然后执行:print ksudss(10)(gdb) print ksudss(10)[Switching to Thread 4154533552 (LWP 26358)]warning: Unable to restore previously selected frame.$1 = 181773020Current language:  auto; currently asm这个时候在UDUMP或者BDUMP下会生成一个TRACE文件。里面包含SYSTEM STATE DUMP 2、10G下sqlplus -prelim如果10G,可以使用sqlplus -prelim选项强制登录export ORACLE_SID=ora9                              sqlplus -prelim '/ as sysdba'oradebug setmypidoradebug unlimit;oradebug dump systemstate 10 3、如果上述都不行,可以使用pstack把堆栈信息取出来,另外也可以使用truss, tusc 之类的工具看看到底在等什么   该贴被白鳝编辑于2008-4-6 9:33:40

    点击此处查看原文
    评论 (3)阅读(2197)
      小技巧:另外一种形式的热块 2008-1-31 10:44:36
    有些BLOCK比较热,如何查找热块呢?通过X$BH可以发现热块,以下的查询可以发现热块:select dbarfil,dbablk,sum(tch) from x$bh group by  dbarfil,dbablk having sum(tch)><阀值>;另外一种情况是可能某个块在DB CACHE中的版本较多,通过下列查询可以检查:select dbarfil,dbablk,count(*)  from x$bh group by  dbarfil,dbablk having count(*)><阀值>;过高的版本数可能还会导致cache buffer chains的增加,从而导致该闩锁的竞争加剧。当然过高的TCH也可能导致cache buffer chains的竞争。热块引起HASH CHAINS相关闩锁竞争也是十分常见的。该贴被白鳝编辑于2008-4-6 14:02:13

    点击此处查看原文
    评论 (0)阅读(2103)
      LINUX下用ltrace跟踪LSNRCTL 2007-11-20 18:47:06
    LISTENER启动的时候很慢。想找到原因,可以用ltrace进行跟踪,用ltrace关键要找到Pid。所以需要写一个脚本1、在要启动listener的终端下看看终端的号[ora10g@racdb1 ~]$ tty/dev/pts/42、编写一个脚本:[ora10g@racdb1 ~]$ more aaaa.shecho 'ok...'read aexec lsnrctl start3、修改属性chmod +x aaaa.sh4、启动脚本$./aaaa.shok....5、在另外一个终端上:$ps -ef|grep pts/4[root@racdb1 ~]# ps -ef|grep pts/4root       850  3235  0 17:52 ?        00:00:00 sshd: root@pts/4,pts/5root      1224   850  0 17:53 pts/4    00:00:00 -bashroot      1323  1224  0 17:53 pts/4    00:00:00 su - ora10gora10g    1324  1323  0 17:53 pts/4    00:00:00 -bashroot      2466  1432  0 17:53 pts/5    00:00:00 grep pts/4根据情况可以看出ora10g    1324  1323  0 17:53 pts/4    00:00:00 -bash这个就是刚才启动aaaa.sh的进程6、因此可以#ltrace -p 13247、在启动aaaa.sh的终端上,敲回车[ora10g@racdb1 ~]$ ./aaaa.shok...LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 20-NOV-2007 17:53:50Copyright (c) 1991, 2005, Oracle.  All rights reserved.TNS-01106: Listener using listener name LISTENER has already been started[ora10g@racdb1 ~]$ 此时LISTENER就启动了,8、到Ltrace执行的终端,观察系统调用的情况,这个时候就能看出在等待什么了malloc(19)                                &nb

    点击此处查看原文
    评论 (11)阅读(3091)
      刷新共享池 2007-8-31 11:42:35
    刷新共享池     一个使用了大量文本化SQL的系统运行了一段时间后,会出现共享池出现大量碎片,这时候共享池的性能会大大下降。在这种情况下,刷新共享池会恢复共享池的性能。使用下面的语句可以刷新共享池:         ALTER SYSTEM FLUSH SHARED_POOL; 要注意的时候,刷新共享池会使所有的没有使用DBMS_SHARED_POOL.KEEP固定的对象全部被清除,所以共享池刚刚刷新的时候,SQL和PL/SQL的执行效率会略微下降(需要重新装载和分析这些SQL和PL/SQL),不过很快系统的性能会提高并高于刷新前。 要注意的是,对于没有使用KEEP过程固定的序列号发生器,如果这些序列号发生器使用了缓冲,那么这些缓冲会被刷新,可能会导致序列号跳号。以下是一个例子: SQL> create sequence a; 序列已创建。 SQL> select a.nextval from dual;    NEXTVAL ---------------          1 SQL> alter system flush shared_pool; 系统已更改。 SQL> select a.nextval from dual;    NEXTVAL ----------         21 如果把该序列号固定在共享池中,那么刷新共享池将不影响该序列号,如下: SQL> exec dbms_shared_pool.keep('a','q'); PL/SQL 过程已成功完成。 SQL> select a.nextval from dual;    NEXTVAL ----------         22 SQL> alter system flush shared_pool; 系统已更改。 SQL> select a.nextval from dual;    NEXTVAL -------------         23该贴被白鳝编辑于2008-4-6 9:45:39

    点击此处查看原文
    评论 (1)阅读(2544)
    找到符合条件的记录9条 每页显示20条 页次 1/1   1   到第  页   

    Powered by CWBBS 2.1  © 2005-2006 Cloud Web Soft
      Email:webmaster@justdb.cn