ORA-16796: one or more properties could not be imported from the database [ID 358040.1]

ORA-16796: one or more properties could not be imported from the database [ID 358040.1]


 

Modified 29-MAY-2009     Type PROBLEM     Status MODERATED

 

In this Document
  Symptoms
  Cause
  Solution


 

This document is being delivered to you via Oracle Support's Rapid Visibility (RaV) process, and therefore has not been subject to an independent technical review.

Applies to:

Oracle Server - Enterprise Edition - Version: 10.2.0.1 to 10.2.0.4
This problem can occur on any platform.

Symptoms

$ dgmgrl
DGMGRL for Linux: Version 10.2.0.1.0 - Production

Copyright (c) 2000, 2005, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.
DGMGRL> connect sys/<Password>
Connected.
DGMGRL> remove configuration
Removed configuration

DGMGRL> create configuration 'SHRUB' as
> primary database is 'SHRUB'
> connect identifier is 'SHRUB';
Configuration "SHRUB" created with primary database "SHRUB"

DGMGRL> add database 'WAGTAIL' as
> connect identifier is wagtail
> maintained as physical;
Error: ORA-16796: one or more properties could not be imported from the database

Failed.

Following error reported in the standby dataguard broker log

DG 2006-02-14-22:16:08 0 2 0 DMON: cannot open configuration file "/oracle/product/10.2.0/dbs/dr2wagtail.dat"

Cause

Noticed following file was not exists at standby server.

DG 2006-02-14-22:16:08 0 2 0 DMON: cannot open configuration file "/oracle/product/10.2.0/dbs/dr2wagtail.dat"

Solution

1) Stop the Data Guard Broker on both, the Primary and Standby Database using following Command:

 

SQL> alter system set dg_broker_start=false scope=both;

 

2) Remove the old Data Guard Broker Configuration Files specified by the Initialization Parameter 'DG_BROKER_CONFIG_FILE1|2' from Primary and Standby Site.

3)  Start the Data Guard Broker on both Sites again:

 

SQL> alter system set dg_broker_start = true scope=both;

 

4) Recreate the Data Guard Broker Configuration


 

 

 

 

------------------------------------------------------------------------------

QQ:492913789

Email:ahdba@qq.com

Blog: http://www.cndba.cn/dave 


网上资源: http://tianlesoftware.download.youkuaiyun.com

相关视频:http://blog.youkuaiyun.com/tianlesoftware/archive/2009/11/27/4886500.aspx

DBA1 群:62697716(); DBA2 群:62697977()

DBA3 群:62697850   DBA 超级群:63306533;    

聊天 群:40132017

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

<think>我们正在分析Oracle数据库错误:ORA-04063, ORA-06508, ORA-06512。根据用户提供的引用和错误信息,这些错误通常与无效的PL/SQL对象有关。具体来说: - ORA-04063: 表示指定的包体(package body)有错误。 - ORA-06508: 表示PL/SQL程序无法找到被调用的程序单元(可能是包、过程、函数等)。 - ORA-06512: 指示错误发生的具体行号(这里是第1行),但通常需要结合前面的错误。 根据引用[1][2][3][4]的信息,这些错误通常是由于: 1. 包体编译无效(例如,因为依赖的对象不存在或无效)。 2. 在只读数据库上尝试创建对象(引用[4])。 3. 包体本身存在编译错误。 用户的具体错误信息是: ``` ORA-04063: package body "FDSF.SF_COMMON_PACKAGE" has errors ORA-06508: PL/SQL: could not find program unit being called: "FDSF.SF_COMMON_PACKAGE" ORA-06512: at line 1 ``` 这表明在调用包`FDSF.SF_COMMON_PACKAGE`时,该包体存在错误,导致无法找到程序单元。 ### 错误分析步骤 1. **检查包状态** 首先,我们需要确认包`FDSF.SF_COMMON_PACKAGE`的状态是否有效。可以查询`dba_objects`视图: ```sql SELECT status FROM dba_objects WHERE owner = 'FDSF' AND object_name = 'SF_COMMON_PACKAGE' AND object_type = 'PACKAGE BODY'; ``` 如果状态为`INVALID`,则说明包体无效。 2. **查看编译错误** 如果包体无效,我们需要查看具体的编译错误: ```sql SHOW ERRORS PACKAGE BODY FDSF.SF_COMMON_PACKAGE; ``` 或者在SQL*Plus中使用: ```sql SELECT line, position, text FROM dba_errors WHERE owner = 'FDSF' AND name = 'SF_COMMON_PACKAGE' AND type = 'PACKAGE BODY'; ``` 3. **重新编译包体** 如果无效,尝试重新编译: ```sql ALTER PACKAGE FDSF.SF_COMMON_PACKAGE COMPILE BODY; ``` 然后再次检查状态和错误。 4. **检查依赖对象** 包体无效通常是因为依赖的对象(如表、视图、其他包等)无效或不存在。通过以下查询查找依赖对象: ```sql SELECT name, type, referenced_name, referenced_type FROM dba_dependencies WHERE owner = 'FDSF' AND name = 'SF_COMMON_PACKAGE'; ``` 然后检查这些依赖对象的状态是否有效。 5. **处理只读数据库问题(如果适用)** 如果数据库是只读的(如引用[4]所述),则不能在数据库上编译对象。此时需要联系DBA在可写的主数据库上编译,然后同步到只读库。 ### 常见原因 - 包引用的表或视图被删除或修改。 - 包引用的其他过程、函数或包无效。 - 权限问题:包的所有者(FDSF)没有访问依赖对象的权限。 ### 解决方案 1. 重新编译包体:`ALTER PACKAGE FDSF.SF_COMMON_PACKAGE COMPILE BODY;` 2. 如果编译失败,根据错误信息修复依赖问题(例如重新创建缺失的表,重新编译依赖的包等)。 3. 确保所有依赖对象都有效,并重新编译整个依赖链。 ### 示例操作 假设错误信息显示包中引用了一个不存在的表`FDSF.TEMP_TABLE`,则需要创建该表或修改包代码。 ### 注意事项 - 如果包体在编译时没有错误,但在运行时出错,可能是动态SQL的问题(如引用不存在的对象)。 - 在复杂的依赖关系中,可能需要重新编译整个模式:`DBMS_UTILITY.compile_schema('FDSF');` §§相关问题§§ 1. 如何查询Oracle中无效对象? 2. 如何重新编译Oracle中的所有无效对象? 3. Oracle中包体无效的常见原因有哪些? 4. 如何查看Oracle包的编译错误?</think>### Oracle PL/SQL包调用错误分析:ORA-04063、ORA-06508、ORA-06512 您遇到的错误序列表明在调用包`FDSF.SF_COMMON_PACKAGE`时存在对象无效问题,具体分析如下: #### 错误原因解析 1. **ORA-04063: package body "FDSF.SF_COMMON_PACKAGE" has errors** 核心错误表明包体存在编译错误或无效状态。可能原因: - 包依赖的对象(如表、视图、其他包)被修改或删除 - 包代码本身存在语法错误或逻辑错误 - 权限变更导致包失去必要访问权限 - 数据库升级后对象失效(常见于系统包) 2. **ORA-06508: PL/SQL: could not find program unit** 直接原因:ORA-04063导致系统无法定位有效的程序单元。当包体无效时,Oracle无法执行其中的存储过程/函数[^1]。 3. **ORA-06512: at line 1** 指示错误发生在调用栈的最顶层(即首次调用位置),但实际根源是包体无效[^3]。 #### 诊断与解决步骤 ```sql -- 1. 检查包状态(需DBA权限) SELECT object_name, status FROM dba_objects WHERE owner = 'FDSF' AND object_name = 'SF_COMMON_PACKAGE' AND object_type = 'PACKAGE BODY'; -- 2. 查看编译错误详情 SHOW ERRORS PACKAGE BODY FDSF.SF_COMMON_PACKAGE; -- 3. 重新编译包体(尝试修复) ALTER PACKAGE FDSF.SF_COMMON_PACKAGE COMPILE BODY; ``` ##### 常见解决方案 1. **依赖对象修复** 若错误信息显示缺失表/视图: ```sql -- 示例:修复缺失表 CREATE TABLE FDSF.missing_table (...); -- 重新编译包 ALTER PACKAGE FDSF.SF_COMMON_PACKAGE COMPILE BODY; ``` 2. **系统包失效处理** 若涉及`DBMS_DATAPUMP`等系统包(如引用[1][2]): ```sql -- 重新编译系统包 ALTER PACKAGE SYS.DBMS_DATAPUMP COMPILE BODY; ``` 3. **权限问题修复** ```sql -- 授予必要权限(示例) GRANT EXECUTE ON FDSF.required_package TO SF_COMMON_PACKAGE; ``` 4. **复杂依赖链处理** 使用批量编译(需DBA权限): ```sql EXEC UTL_RECOMP.recomp_serial('FDSF'); ``` #### 预防措施 1. 定期检查无效对象: ```sql SELECT owner, object_name, object_type FROM dba_objects WHERE status = 'INVALID'; ``` 2. 关键操作前使用依赖分析: ```sql SELECT * FROM dba_dependencies WHERE referenced_name = 'SF_COMMON_PACKAGE'; ``` 3. 避免在只读库执行编译操作(如引用[4]) > **关键提示**:当错误涉及`SYS.DBMS_DATAPUMP`时(如引用[1][2]),通常需要DBA介入处理系统级包失效问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值