转)Oracle 10G重建EM DB Control ----(java.lang.Exception: Exception in sending Request :: null)

本文介绍了解决Oracle10G环境下企业管理器(EM)出现的各种问题的方法,包括重建EM资料库、调整时区设置等操作步骤。通过使用emca命令及修改配置文件,可以有效解决EM无法正常使用的问题。

Oracle 10G重建EM DB Control.
1.drop configuration files and repository run :
emca -deconfig dbcontrol db -repos drop


2. Logon SQLPLUS as user SYS or SYSTEM, and drop the sysman account and mangement objects:
a. drop user sysman cascade;
b. drop role MGMT_USER;
c. drop user MGMT_VIEW cascade;
d. drop public synonym MGMT_TARGET_BLACKOUTS;
e. drop public synonym SETEMVIEWUSERCONTEXT;

3.Create configuration files and repository run
emca -config dbcontrol db -repos create

创建EM时,提示的端口号,应为实例的断口号,比如1521,不是EM的端口号(比如1158)
EM的端口号在这个文件中可以查到10.2.0/db_1/sysman/config/emca.properties

然后,进行em后,界面出来了,但报了一个错:
java.lang.Exception: Exception in sending Request :: null
很多功能不能用,提示重新登录.
在Oracle论坛上查到了解决办法:
http://forums.oracle.com/forums/thread.jspa?threadID=320574&tstart=0&messageID=1374397
找到下面的文件
10.2.0/db_1/ZYKNET_ORC2/sysman/config/emd.properties
其中的agentTZRegion缺省是GMT,改为你所在的时区即可,例如:
agentTZRegion=Asia/Chungking
关于时区的列表参考:10.2.0/db_1/sysman/admin/supportedtzs.lst
然后,重启OracleDBConsole

 

 

在10g 中,我们可能会经常遇到OEM不能正常使用的问题,但导致问题的原因不尽相同,最后绝大多数问题可以通过emca 这个命令来解决,详细的说明可以查看连机帮助,下面给出一些常用的命令,及实例步骤.

创建一个EM资料库
emca -repos create
重建一个EM资料库
emca -repos recreate
删除一个EM资料库
emca -repos drop
配置数据库的 Database Control
emca -config dbcontrol db
删除数据库的 Database Control配置
emca -deconfig dbcontrol db
重新配置db control的端口,默认端口在1158
emca -reconfig ports
emca -reconfig ports -dbcontrol_http_port 1160
emca -reconfig ports -agent_port 3940
先设置ORACLE_SID环境变量后,启动EM console服务
emctl start dbconsole
先设置ORACLE_SID环境变量后,停止EM console服务
emctl stop dbconsole
先设置ORACLE_SID环境变量后,查看EM console服务的状态
emctl status dbconsole

配置dbconsole的步骤
emca -repos create
emca -config dbcontrol db
emctl start dbconsole
重新配置dbconsole的步骤
emca -repos drop
emca -repos create
emca -config dbcontrol db
emctl start dbconsole

PackageManager: System package ecarx.ads no longer exists; it's data will be wiped[2025-07-18 10:21:15.406] 01-01 08:00:12.782 1358 1358 I PackageManager: Finished scanning system apps. Time: 133 ms, packageCount: 74 , timePerPackage: 1 , cached: 128[2025-07-18 10:21:15.406] 01-01 08:00:12.786 1358 1358 E System : ******************************************[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E System : ************ Failure starting system services[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E System : java.lang.NullPointerException: Attempt to read from field 'com.android.server.pm.PackageSignatures com.android.server.pm.PackageSettingBase.signatures' on a null object reference[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E System : at com.android.server.pm.PackageManagerService.assertPackageIsValid(PackageManagerService.java:11584)[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E System : at com.android.server.pm.PackageManagerService.scanPackageNewLI(PackageManagerService.java:10427)[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E System : at com.android.server.pm.PackageManagerService.addForInitLI(PackageManagerService.java:9192)[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E System : at com.android.server.pm.PackageManagerService.scanPackageChildLI(PackageManagerService.java:8881)[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E System : at com.android.server.pm.PackageManagerService.scanDirLI(PackageManagerService.java:8720)[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E System : at com.android.server.pm.PackageManagerService.scanDirTracedLI(PackageManagerService.java:8673)[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E System : at com.android.server.pm.PackageManagerService.<init>(PackageManagerService.java:2977)[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E System : at com.android.server.pm.PackageManagerService.main(PackageManagerService.java:2378)[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E System : at com.android.server.SystemServer.startBootstrapServices(SystemServer.java:649)[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E System : at com.android.server.SystemServer.run(SystemServer.java:450)[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E System : at com.android.server.SystemServer.main(SystemServer.java:311)[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E System : at java.lang.reflect.Method.invoke(Native Method)[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E System : at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E System : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:891)[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E Zygote : System zygote died with exception[2025-07-18 10:21:15.406] 01-01 08:00:12.787 1358 1358 E Zygote : java.lang.NullPointerException: Attempt to read from field 'com.android.server.pm.PackageSignatures com.android.server.pm.PackageSettingBase.signatures' on a null object reference[2025-07-18 10:21:15.437] 01-01 08:00:12.787 1358 1358 E Zygote : at com.android.server.pm.PackageManagerService.assertPackageIsValid(PackageManagerService.java:11584)[2025-07-18 10:21:15.437] 01-01 08:00:12.787 1358 1358 E Zygote : at com.android.server.pm.PackageManagerService.scanPackageNewLI(PackageManagerService.java:10427)[2025-07-18 10:21:15.437] 01-01 08:00:12.787 1358 1358 E Zygote : at com.android.server.pm.PackageManagerService.addForInitLI(PackageManagerService.java:9192)[2025-07-18 10:21:15.437] 01-01 08:00:12.787 1358 1358 E Zygote : at com.android.server.pm.PackageManagerService.scanPackageChildLI(PackageManagerService.java:8881)[2025-07-18 10:21:15.437] 01-01 08:00:12.787 1358 1358 E Zygote : at com.android.server.pm.PackageManagerService.scanDirLI(PackageManagerService.java:8720)[2025-07-18 10:21:15.437] 01-01 08:00:12.787 1358 1358 E Zygote : at com.android.server.pm.PackageManagerService.scanDirTracedLI(PackageManagerService.java:8673)[2025-07-18 10:21:15.437] 01-01 08:00:12.787 1358 1358 E Zygote : at com.android.server.pm.PackageManagerService.<init>(PackageManagerService.java:2977)[2025-07-18 10:21:15.437] 01-01 08:00:12.787 1358 1358 E Zygote : at com.android.server.pm.PackageManagerService.main(PackageManagerService.java:2378)[2025-07-18 10:21:15.437] 01-01 08:00:12.787 1358 1358 E Zygote : at com.android.server.SystemServer.startBootstrapServices(SystemServer.java:649)[2025-07-18 10:21:15.437] 01-01 08:00:12.787 1358 1358 E Zygote : at com.android.server.SystemServer.run(SystemServer.java:450)[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E Zygote : at com.android.server.SystemServer.main(SystemServer.java:311)[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E Zygote : at java.lang.reflect.Method.invoke(Native Method)[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E Zygote : at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E Zygote : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:891)[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 D AndroidRuntime: Shutting down VM[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: main[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E AndroidRuntime: java.lang.NullPointerException: Attempt to read from field 'com.android.server.pm.PackageSignatures com.android.server.pm.PackageSettingBase.signatures' on a null object reference[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E AndroidRuntime: at com.android.server.pm.PackageManagerService.assertPackageIsValid(PackageManagerService.java:11584)[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E AndroidRuntime: at com.android.server.pm.PackageManagerService.scanPackageNewLI(PackageManagerService.java:10427)[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E AndroidRuntime: at com.android.server.pm.PackageManagerService.addForInitLI(PackageManagerService.java:9192)[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E AndroidRuntime: at com.android.server.pm.PackageManagerService.scanPackageChildLI(PackageManagerService.java:8881)[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E AndroidRuntime: at com.android.server.pm.PackageManagerService.scanDirLI(PackageManagerService.java:8720)[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E AndroidRuntime: at com.android.server.pm.PackageManagerService.scanDirTracedLI(PackageManagerService.java:8673)[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E AndroidRuntime: at com.android.server.pm.PackageManagerService.<init>(PackageManagerService.java:2977)[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E AndroidRuntime: at com.android.server.pm.PackageManagerService.main(PackageManagerService.java:2378)[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E AndroidRuntime: at com.android.server.SystemServer.startBootstrapServices(SystemServer.java:649)[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E AndroidRuntime: at com.android.server.SystemServer.run(SystemServer.java:450)[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E AndroidRuntime: at com.android.server.SystemServer.main(SystemServer.java:311)[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)[2025-07-18 10:21:15.468] 01-01 08:00:12.787 1358 1358 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)[2025-07-18 10:21:15.500] 01-01 08:00:12.787 1358 1358 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:891)[2025-07-18 10:21:15.500] 01-01 08:00:12.788 1358 1358 E AndroidRuntime: Error reporting crash[2025-07-18 10:21:15.500] 01-01 08:00:12.788 1358 1358 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke interface method 'void android.app.IActivityManager.handleApplicationCrash(android.os.IBinder, android.app.ApplicationErrorReport$ParcelableCrashInfo)' on a null object reference[2025-07-18 10:21:15.500] 01-01 08:00:12.788 1358 1358 E AndroidRuntime: at com.android.internal.os.RuntimeInit$KillApplicationHandler.uncaughtException(RuntimeInit.java:143)[2025-07-18 10:21:15.500] 01-01 08:00:12.788 1358 1358 E AndroidRuntime: at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)[2025-07-18 10:21:15.500] 01-01 08:00:12.788 1358 1358 E AndroidRuntime: at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1063)[2025-07-18 10:21:15.500] 01-01 08:00:12.788 1358 1358 E AndroidRuntime: at java.lang.Thread.dispatchUncaughtException(Thread.java:1955)[2025-07-18 10:21:15.500] 01-01 08:00:12.788 1358 1358 I Process : Sending signal. PID: 1358 SIG: 9[2025-07-18 10:21:15.500]
07-19
<think>我们正在处理一个Android系统启动时PackageManagerService(PMS)抛出空指针异常(NullPointerException)导致系统崩溃的问题。根据引用[1],我们知道PMS在启动过程中会访问一些对象,如果这些对象未被正确初始化,就会导致空指针异常。结合引用[2],异常断电可能导致文件系统损坏,进而引发系统关键文件(如包信息文件)损坏。引用[3]则提到签名不匹配的问题,但我们的核心问题是空指针。 ## 问题分析步骤 ### 1. 定位崩溃点 从日志中提取崩溃堆栈(如用户提供的日志片段中的崩溃信息): ``` Line 8460: 01-01 08:00:10.309 1006 1006 E System : at com.android.server.pm.PackageManagerService.assertPackageIsValid(PackageManagerService.java:11584)[2025-07-18 10:21:13.619] Line 8461: 01-01 08:00:10.309 1006 1006 E System : at com.android.server.pm.PackageManagerService.scanPackageNewLI(PackageManagerService.java:10427)[2025-07-18 10:21:13.619] ... ``` 这里崩溃发生在`assertPackageIsValid`方法中,具体位置是`PackageManagerService.java`的第11584行。我们需要分析该处代码。 ### 2. 分析源代码 假设我们查看Android 4.2的源码(如引用[1]所示),在`PackageManagerService.java`中找到对应方法: ```java private void assertPackageIsValid(PackageParser.Package pkg, ...) { // ... // 假设崩溃行是以下代码(示例): if (pkg.mSharedUserId != null) { // 访问pkgSetting对象 PackageSetting pkgSetting = mSettings.getPackageLPw(pkg.packageName, ...); // 可能返回null // 第11584行:直接使用pkgSetting对象 if (pkgSetting.sharedUser != null) { // 这里如果pkgSetting为null就会抛NPE // ... } } } ``` **原因推断**:`mSettings.getPackageLPw()`可能返回`null`,而后续没有做空判断直接访问其成员。 ### 3. 根本原因 - **直接原因**:代码未对`pkgSetting`做空值检查。 - **深层原因**:`mSettings`(即`Settings`类)中未找到该包名的`PackageSetting`对象,这可能是由于: 1. **文件损坏**:异常断电导致`/data/system/packages.xml`或`packages.list`损坏(引用[2]),系统无法正确恢复包信息。 2. **系统升级失败**:OTA升级过程中断电,导致新旧包信息不一致。 3. **预装应用签名冲突**:如引用[3]所示,签名不匹配可能导致包信息未正确注册。 ### 4. 解决方案 #### 临时修复(恢复系统) 1. **进入Recovery模式**:通过硬件按键组合启动到Recovery。 2. **清除缓存**:执行`wipe cache partition`(不会清除用户数据)。 3. **恢复出厂设置**:若问题依旧,执行`wipe data/factory reset`(会清除用户数据)。 #### 永久修复(代码层面) 修改`PackageManagerService`源码,在访问`pkgSetting`前添加空检查: ```java // 修改前(易崩溃) if (pkgSetting.sharedUser != null) { ... } // 修改后(安全) if (pkgSetting != null && pkgSetting.sharedUser != null) { ... } ``` #### 针对文件损坏的修复 在系统启动时增加文件校验机制: ```java // 在Settings.readLPw()中添加备份恢复逻辑 if (!file.exists() || isFileCorrupted(file)) { restoreFromBackup(); // 从备份文件恢复 } ``` ### 5. 验证方法 - **模拟断电测试**:使用开发板反复进行断电重启测试。 - **注入空对象测试**:在单元测试中注入`mSettings.getPackageLPw()`返回`null`,验证系统是否健壮。 ## 总结流程图 ```mermaid graph TD A[系统启动] --> B[PMS初始化] B --> C[扫描系统应用] C --> D{读取packages.xml} D -->|文件损坏| E[恢复备份文件] D -->|正常| F[加载包信息] F --> G[创建PackageSetting] G --> H{是否为空?} H -->|是| I[跳过或重建] H -->|否| J[继续启动] I --> K[记录错误日志] K --> J ``` §§相关问题§§ 1. 如何进入Android设备的Recovery模式? 2. 如何为Android系统服务添加空指针保护? 3. 如何防止异常断电导致Android系统文件损坏? 4. 如何调试Android系统启动过程中的空指针异常? 5. `packages.xml`文件损坏后如何手动修复?</think>### Android系统启动时PackageManagerService空指针异常的解决方案 #### 1. **定位崩溃根源** 从日志中可观察到关键错误堆栈: ``` Line 8460: E System: at com.android.server.pm.PackageManagerService.assertPackageIsValid(PackageManagerService.java:11584) Line 8461: E System: at com.android.server.pm.PackageManagerService.scanPackageNewLI(...) ``` 这表明空指针发生在包验证阶段,可能原因包括: - 未正确初始化的`PackageSetting`对象 - 损坏的包信息文件(如`packages.xml`) - 签名校验过程中的空对象引用[^1][^3] #### 2. **紧急恢复措施** **步骤1:进入Recovery模式** ```bash # 通过ADB强制进入Recovery adb reboot recovery ``` **步骤2:清除缓存分区** - 在Recovery菜单中选择"Wipe cache partition" - 重启后观察是否解决临时文件损坏问题[^2] **步骤3:恢复出厂设置(谨慎操作)** - 在Recovery中选择"Factory reset" - 会清除`/data`分区,重建数据库 #### 3. **代码级修复方案 在`PackageManagerService.java`中添加空指针保护: ```java // 修改前(危险代码) if (pkgSetting.signatures.equals(expectedSigs)) {...} // 修改后(安全代码) if (pkgSetting != null && pkgSetting.signatures != null && pkgSetting.signatures.equals(expectedSigs)) { // 验证逻辑 } else { Slog.e(TAG, "Invalid PackageSetting for: " + pkgName); } ``` **关键修改点**: 1. 在`assertPackageIsValid()`方法入口添加参数校验 2. 在访问`pkgSetting`成员前检查对象非空 3. 增加异常处理日志输出具体包名 #### 4. **预防性措施 **文件系统健壮性增强**: ```xml <!-- 在device.mk中添加 --> PRODUCT_PROPERTY_OVERRIDES += \ ro.vendor.force.fsck=1 \ ro.vendor.force.fsck_on_boot=1 ``` **电源管理优化**: - 为无电池设备添加UPS模块 - 实现紧急断电保护流程: ```mermaid graph LR A[断电检测] --> B[紧急保存包状态] B --> C[同步文件系统] C --> D[安全关机] ``` #### 5. **深度调试方法 **获取包管理状态**: ```bash adb shell dumpsys package > package_state.txt ``` 分析输出中的关键字段: ```log Packages: Package [com.android.car] (c6ac86c): status=ERROR # 异常状态标记 signatures=null # 空签名对象 installStatus=INSTALL_FAILED_INVALID_PACKAGE ``` #### 6. **签名冲突专项处理 若日志中出现`Signature mismatch`错误(如引用[3]): 1. 检查`/system/etc/permissions`下的签名白名单 2. 验证预装APK签名是否匹配平台证书: ```bash # 提取APK签名 unzip -p app.apk META-INF/CERT.RSA | keytool -printcert # 比对平台证书 openssl x509 -in platform.x509.pem -text ``` > **根本原因总结**:异常断电导致`/data/system/packages.xml`损坏,使PackageSetting对象未正确初始化。在签名验证时访问了空对象的`signatures`字段,触发空指针崩溃[^2][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值