Database 类别下的文章

重编译 invalid 对象

DBA在一些场合下,要对无效的数据库对象进行重新编译.如果只是对all_objects等视图中选出来的无效对象进行重新编译,可能需要很多次:因为各个对象之间有依赖性的.这样并不是一个很好的办法.Raymond 在Recompiling invalid objects提到了如何有效地重新编译无效对象.提到了三种比较有效地方法(

  • 利用$ORACLE_HOME/rdbms/admin下的utlrp.sql脚本编译.一般都是在迁移或者升级之后运行该脚本.Raymond说该方法的不足之处在于这个脚本是对整个数据库中的对象进行重新编译的,所以不可取.有网友指出utlrp.sql 实际上是调用utlrcmp.sql的这样就可以用utl_recomp包来做喽(这样就是比较好的方法).
  • 用DBMS_UTILITY包来进行编译.但是也有一定的局限性.
  • Raymond提到了自己的解决办法: 不过也立刻有人指出来,这样对 View 的重新编译是无能为力的(ALTER_COMPILE只能处理:PACKAGE, PACKAGE BODY, PROCEDURE, FUNCTION, TRIGGER).参见下面的脚本
CREATE OR REPLACE PROCEDURE RECOMPILE_SCHEMA
IS
  v_Type USER_OBJECTS.OBJECT_TYPE%TYPE;
  v_Name USER_OBJECTS.OBJECT_NAME%TYPE;
  v_Stat USER_OBJECTS.STATUS%TYPE;

  CURSOR c_Obj
  IS
    SELECT  BASE
    FROM  (SELECT A.OBJECT_ID BASE
           ,      B.OBJECT_ID REL
           FROM   USER_OBJECTS A
              ,      USER_OBJECTS B
              ,      SYS.DEPENDENCY$  C
           WHERE  A.OBJECT_ID = C.D_OBJ#
           AND    B.OBJECT_ID = C.P_OBJ#
           AND    A.OBJECT_TYPE IN ('PACKAGE',
                                    'PROCEDURE',
                                    'FUNCTION',
                                    'PACKAGE BODY',
                                  --  'VIEW', 
                                    'TRIGGER')
           AND    B.OBJECT_TYPE IN ('PACKAGE',
                                    'PROCEDURE',
                                    'FUNCTION',
                                    'PACKAGE BODY',
                                  --  'VIEW', 
                                    'TRIGGER')
            AND    NOT A.OBJECT_NAME = B.OBJECT_NAME) OBJECTS
    CONNECT BY BASE = PRIOR REL
    GROUP   BY BASE

    ORDER   BY MAX(LEVEL) DESC;
BEGIN
  -- loop through all objects in order of dependancy.
  FOR c_Row IN c_Obj
  LOOP
    -- select the objects attributes (type, name & status).
    SELECT OBJECT_TYPE
    ,      OBJECT_NAME
    ,      STATUS
    INTO   v_Type
    ,      v_Name
    ,      v_Stat
    FROM   USER_OBJECTS
    WHERE  OBJECT_ID = c_Row.BASE;

    -- if the OBJECT is INVALID, recompile it.
    IF v_Stat = 'INVALID' THEN
      DBMS_DDL.ALTER_COMPILE(v_Type, USER, v_Name);
    END IF;
  END LOOP;

  -- Recompile all remaining INVALID OBJECTS (all those without dependencies).
  FOR c_Row IN ( SELECT OBJECT_TYPE
             ,      OBJECT_NAME
             FROM   USER_OBJECTS
             WHERE  STATUS = 'INVALID'
             AND    OBJECT_TYPE IN ('PACKAGE',
                                    'PROCEDURE',
                                    'FUNCTION',
                                    'TRIGGER',
                                    'PACKAGE BODY',
                                 --   'VIEW', 
                                    'TRIGGER') )
  LOOP
    DBMS_DDL.ALTER_COMPILE(c_Row.OBJECT_TYPE, USER, c_Row.OBJECT_NAME);
  END LOOP;
END RECOMPILE_SCHEMA;
Rem   EXAMPLES
Rem      1. Recompile all objects sequentially:
Rem             execute utl_recomp.recomp_serial();
Rem
Rem      2. Recompile objects in schema SCOTT sequentially:
Rem             execute utl_recomp.recomp_serial('SCOTT');
Rem
Rem      3. Recompile all objects using 4 parallel threads:
Rem             execute utl_recomp.recomp_parallel(4);
Rem
Rem      4. Recompile objects in schema JOE using the number of threads
Rem         specified in the paramter JOB_QUEUE_PROCESSES:
Rem             execute utl_recomp.recomp_parallel(NULL, 'JOE');
Rem
Rem      5. Recompile all objects using 2 parallel threads, but allow
Rem         other applications to use the job queue concurrently:
Rem             execute utl_recomp.recomp_parallel(2, NULL,
Rem                                                utl_recomp.share_job_queue);
Rem
Rem      6. Restore the job queue after a failure in recomp_parallel:
Rem             execute utl_recomp.restore_job_queue();
调用 utl_recomp 包是比较好的做法.需要 sys 权限. BTW:刚才浏览eygle 的站点,发现他有一 Blog 说的正是这个事情: http://www.eygle.com/archives/2005/01/ecioaeaoeeeaoea.html ,晕倒

Oracle发布了新的CPU

Oracle发布了新的CPU:Critical Patch Update - April 2005这个CPU 基本上是针对HTTP Server 的.

Here is a summary:http://www.petefinnigan.com/weblog/archives/00000304.htm

不久前,Oracle(甲骨文)公司在美国加州的总部宣布, Oracle 10g 数据库 与 Oracle RAC 在 TPC-H 基准测试中创造了新的世界纪录.这是个令人震惊的消息.因为这个测试是在 Linux ( Red Hat Enterprise Linux Advanced Server 3) 的平台上进行的. 这充分显示了 Oracle 在低成本 Linux 集群服务器上高效管理大规模数据仓库的能力, 也表明 Linux 在性能价格比上显而易见的优势,标志着Linux在大规模企业应用上已经成熟.

相信很多朋友已经对10g跃跃欲试了,现在从这里让我们开始10g之旅.

本文描述了在Red Hat Enterprise Linux Advanced Server 3 (RHEL 3)上安装Oracle 10g 必要的步骤和相关知识. 本文假定你的Linux 操作系统已经安装完毕,并且您应该具有一定的 Unix 操作系统背景知识.

安装SQL Server 遇到错误提示:

以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机!。

找了半天,没发现什么一场程序,该机器上以前没安装过SQL Server。看看系统安装了什么软件? 3721 上网助手什么的赫然在目!删掉!

Singletask exp imp ? Still There ?

玉面飞龙在一则BLOG的评注中提起

imp exp sqlldr 有个叫做 singletask 模式 relink的方式据说可以增加执行速度。

上去是某种特定平台才有.据说会消耗更多内存.在IxORA 上有一则信息

To perform a single-task export, you must use the expst executable instead of just exp. You will probably need to create the executable first, as follows.
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk singletask
If you are intending the single-task executables to be used by a user other than oracle, then you will need to set the setuid bits as follows.
chmod 4511 $ORACLE_HOME/bin/*st

我在 Linux 下和 HP-UX 下测试了一下,现在的版本似乎都不支持了.得到的错误信息如下:

Metalink 也 Copy,Paste ?

Metalink 上看到一篇技术文档,Unix Commands on Different OS's(Note:293561.1).乍一看,非常眼熟,这不是http://www.unixguide.net/上的文档么? 怎么连一点声明都没有,直接粘贴过来了? 看看 Metalink 上该文日期:Creation Date: 09-DEC-2004 Last Revision Date: 14-DEC-2004 ,Unixguide.net 上可是至少两年前就有了.天下文章一大抄 :)

回顾一下。上周数据库有关的最主要新闻是Oracle发布了新的CPU(Critical Patch Update)公告:cpu-jan-2005_advisory。这是个累积更新,包括著名的安全更高 #68 的所有内容。公告中还提到了 Pete Finnigan,他发现了一个关于数据库Directory对象的安全问题:DIRECTORY OBJECT – Reading outside of the directory object,此外,他的BLOG站点专门针对Oracle安全,信息翔实,而且更新比较迅速。

用户要求对一个目录下的大量图片进行文件名修改。并给了一个对照文件:

4930503541,2019030524
4932503521,2089031230
4932503800,2389031456
4900003521,2019031211
.....

对照文件中前面的是就名字,后面的是新名字。可实际一看真正的文件名字,就傻了眼:文件名字都是类似:4930503541_1.png、4932503521_2.png 之类的,本来想用个Shell脚本来做,现在看起来,不好实现呀!

关于归档

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

上一类别为 Arch.

Geek 为下一类别.

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