Oracle编译用户无效对象

在采用IMPDP/IMP工具迁移数据时,经常会提示无效对象的警告,需要采用如下方式处理。

1. 查询指定用户的无效对象

su – oracle

sqlplus / as sysdba

SQL> select owner,object_name,replace(object_type,‘ ‘,‘‘) object_type,to_char(created,‘yyyy-mm-dd‘) as created,to_char(last_ddl_time,‘yyyy-mm-dd‘) as last_ddl_time,status from dba_objects where status=‘INVALID‘ and owner=‘HKJJW‘;  
OWNER      OBJECT_NAME                    OBJECT_TYPE     CREATED    LAST_DDL_T STATUS    
---------- ------------------------------ --------------- ---------- ---------- -------    
HKJJW      FUNC_RETURN_PY                 FUNCTION        2013-08-02 2013-08-02 INVALID    
HKJJW      MONITORING_FLOW_PARALLEL_VIEW  VIEW            2013-08-02 2013-08-02 INVALID    
HKJJW      TEST                           VIEW            2013-08-02 2013-08-02 INVALID

指定查询某用户无效对象。

SQL> select * from dba_objects where status<>‘VALID‘ and owner=‘HKJJW‘;

2. 手动执行编译或

ALTER FUNCTION HKJJW.FUNC_RETURN_PY COMPILE;  
ALTER VIEW HKJJW.MONITORING_FLOW_PARALLEL_VIEW COMPILE;    
ALTER VIEW HKJJW.TEST COMPILE;

如果是index的话,需要重建.  
alter index index_name rebuild;

如果是package body  
alter package DBMS_CUBE  compile body;

3. 自动生成编译无效对象SQL

1) 统计当前用户无效对象数量:

SQL> select owner,object_type,status,count(*) from dba_objects where status=‘INVALID‘ group by owner,object_type,status order by owner,object_type;

OWNER                          OBJECT_TYPE         STATUS    COUNT(*)  
------------------------------ ------------------- ------- ----------    
HNADEV_GROUP                   FUNCTION            INVALID          1    
HNADEV_GROUP                   PACKAGE BODY        INVALID         35    
HNADEV_GROUP                   VIEW                INVALID          7

2) 生成编译无效对象SQL

SQL> select  ‘ALTER ‘ || OBJECT_TYPE || ‘ ‘ ||  OWNER || ‘.‘ || OBJECT_NAME || ‘ COMPILE;‘ from dba_objects where status = ‘INVALID‘ and object_type in (‘PACKAGE‘,‘PACKAGE BODY‘,‘FUNCTION‘,‘PROCEDURE‘,‘TRIGGER‘,‘VIEW‘) ;

‘ALTER‘||OBJECT_TYPE||‘‘||OWNER||‘.‘||OBJECT_NAME||‘COMPILE;‘  
----------------------------------------------------------------------    
ALTER VIEW HNADEV_GROUP.V_E_T_FEEMONTH_CAL COMPILE;    
ALTER VIEW HNADEV_GROUP.V_E_T_FEEMONTH COMPILE;    
ALTER VIEW HNADEV_GROUP.V_E_Z_BILL_STAY_GROUP COMPILE;    
略...    
通过复制以上SQL语句,直接手动执行编译执行.

4. 也可以采用如下方式在oracle用户下进行手工编译

# su - oracle  
$ sqlplus / as sysdba    
SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql

时间: 2024-10-08 10:29:06

Oracle编译用户无效对象的相关文章

oracle 重新编译用户无效对象

oracle sys用户无效对象 select owner,object_name , replace(object_type,' ','') object_type ,to_char(created,'yyyy-mm-dd') as created ,to_char(last_ddl_time,'yyyy-mm-dd') as last_ddl_time, status from dba_objects where status='INVALID' and owner='SYS'; OWNER

转://oracle 重新编译用户无效对象

select owner,object_name, replace(object_type,' ','') object_type,to_char(created,'yyyy-mm-dd') as created,to_char(last_ddl_time,'yyyy-mm-dd') as last_ddl_time,status from dba_objects where status='INVALID' and owner='SYS'; OWNER OBJECT_NAME OBJECT_T

处理Oracle数据中的无效对象

今天还原了一份数据库(在服务器上没有无效对象),还原在本地之后有三十几个无效对象,当时很是郁闷,然后我发现还原之后的数据库中缺少表! 开始我怀疑Oracle数据库的还原功能,但是在我创建表的时候发现,原来是我本地数据库中表空间和服务器上的不一致.然后我在网上找到了解决方案: select username, default_tablespace from dba_users where username='NAXZXXBM';--查找某用户的默认表空间alter tablespace USERS

ORACLE编译失效对象

 数据库对象失效原因 数据库对象失效的原因很多,下面大致归纳了一些常见的原因: 1: 当被引用对象的结构变更时,都会使得相关的依赖对象转变为INVALID状态. 数据库中的对象(存储过程,函数,包,视图,触发器),它们往往需要直接或者间接的引用其它对象,对象的依赖包括直接和间接二种,其中直接依赖是指存储对象直接依赖于被引用对象,而间接依赖是指对象间接依赖于被引用对象 要查看被引用的对象,可以通过下面SQL查看 SELECT * FROM dba_dependencies WHERE NAME

Oracle下用户对象的迁移,包(package),表,试图,序列

问题:       在开发系统时候,有时我们希望能够限制前端页面对数据库的访问行为,比如在Oracle数据库当中,我们采用A用户创建数据库的表结构,package,视图,序列,因此A用户具有访问这些对象的所有权限,           如果前端页面是另一个团队(BTeam)开发,另一个团队对数据库的表结构了解不够熟悉,为了防止BTeam错误的操作导致数据的混乱,我们为BTeam用户创建一个用户B,BTeam通过用户B来访问A用户下           创建的对象,由于BTeam通过B用户来访问数

Oracle 用户、对象权限、系统权限

--================================ --Oracle 用户.对象权限.系统权限 --================================  一.用户与模式 用户:对数据库的访问,需要以适当用户身份通过验证,并具有相关权限来完成一系列动作 SYS用户,缺省始终创建,且未被锁定,拥有数据字典及其关联的所有对象 SYSTEM用户,缺省始终创建,且未被锁定,可以访问数据库内的所有对象 模式(schema):是某个用户拥有所有对象的集合.具有创建对象权限并创建

Oracle(控制用户权限)

权限允许用户访问属于其它用户的对象或执行程序, ORACLE系统提供权限:Object 对象级.System 系统级 查看权限的数据字典: 字典名 含义 ROLE_SYS_PRIVS System privileges granted to roles ROLE_TAB_PRIVS Table privileges granted to roles USER_ROLE_PRIVS Roles accessible by the user USER_TAB_PRIVS_MADE Object pr

oracle创建用户ORA-01045:user lacks CREATE SESSION privilege;

conn internal/oracle grant user aaaa identified by aaaa; conn aaaa/aaaa 会报错: SQL>conn aaaa/aaaa 会报错: ERROR: ORA-01045: user aaaa lacks CREATE SESSION privilege; logon denied 原因: 用户至少需要会话的权利,否则连接也不成功: 用户在会话的权利上,应该有其他操作的权利: 解决方法:  1 grant connect, reso

[转]Oracle DB 用户

? 创建和管理数据库用户帐户: – 验证用户 – 分配默认存储区(表空间) 1.数据库用户帐户 要访问数据库,用户必须指定有效的数据库用户帐户,而且还要根据该用户帐户的要求成功通过验证.每个数据库用户都有一个唯一的数据库帐户. Oracle 建议采用这种做法,从而避免潜在的安全漏洞,并为特定的审计活动提供有意义的数据.但是,有时候若干用户会共享一个公用数据库帐户. 在这些罕见的情况下,操作系统和应用程序必须为数据库提供足够的安全性. 每个用户帐户都包括以下项: ? 唯一的用户名:用户名不能超过3