使用SYS用户启动oracle 报错: ora-00000 normal, successful completion

本文记录了ORA-00000错误及ORA-600内部错误的解决方法,主要涉及/etc/hosts文件配置与alert日志分析。通过修改hostname和排查共享池相关错误,可以有效解决问题。


之前好几次也遇到过ora-00000的错误,没有整理过,又遇到时候总是记不起来,现在记录一下。。


ora-00000的错误多是由于 /etc/hosts文件中的hosname和当前的主机名不一致导致,

该错误多见于系统是复制过来的情况。

解决方法就是修改/etc/hosts文件中的hostname


alert日志中还伴随着出现如下错误:

ora-600 internal error code ,arguments: [504] [xxx] [xxxx] [xxxx] [shared pool]

ora -00108 failed to set up dispatcher to accept connection asynchronously



ORA-00942 错误是 Oracle 中非常常见的错误,提示: > **ORA-00942: 表或视图不存在** 这意味着 SQL 语句中引用了数据库认为“**不存在**”的表、视图、同义词或数据库链接对象。即使你确信表存在,也可能因为权限、schema、dblink 配置等问题导致无法访问。 --- ### 🔍 常见引发 ORA-00942 的原因及解决方案 #### ✅ 1. **没有正确指定 Schema 名称** Oracle 中,每个表都属于某个用户(Schema)。如果你不是该用户,就必须用 `schema.table` 的方式访问。 ❌ 错误写法(当前用户无此表): ```sql SELECT * FROM SDB_TB_WAFER_START_PLAN; ``` ✅ 正确写法(需加 owner/schema): ```sql SELECT * FROM DR01.SDB_TB_WAFER_START_PLAN; ``` 👉 **解决方法**:确保所有跨 schema 的表都使用 `用户名.表名` 格式。 --- #### ✅ 2. **数据库链接(DBLink)问题 @B2MFGDBP1** 你在查询中用了类似: ```sql DW01.SDB_TB_INFO_PRODUCT_P1@B2MFGDBP1 ``` 这表示通过 DBLink `@B2MFGDBP1` 访问远程数据库的对象。 📌 报错可能原因: - 当前用户没有访问 `B2MFGDBP1` 这个 DBLink 的权限。 - DBLink 名称拼写错误。 - 远程数据库中的表 `SDB_TB_INFO_PRODUCT_P1` 在 `DW01` 下不存在。 - 远程用户 `DW01` 没有给你的用户授权访问这张表。 🔍 **检查方法**: ```sql -- 查看当前用户是否有这个 DBLink SELECT * FROM USER_DB_LINKS WHERE DB_LINK = 'B2MFGDBP1'; -- 或查看所有可用 DBLink SELECT * FROM ALL_DB_LINKS WHERE DB_LINK = 'B2MFGDBP1'; ``` 👉 如果查不到结果 → 说明你没有权限使用该 DBLink。 ✅ **解决方法**: - 联系 DBA 授予你使用 DBLink 的权限; - 或让 DBA 创建一个公共 DBLink(PUBLIC DBLINK); - 或确认 DBLink 名称是否正确(例如是不是 `B2MFGDBP`?少了个 `1`?) --- #### ✅ 3. **表确实不存在 or 被删了 / 改名了** 虽然你看到别人能用,但可能是: - 表被删除或重命名; - 使用了测试环境和生产环境不同的表名; - 表在另一个数据库实例上未同步。 🔍 **验证表是否存在(本地)**: ```sql SELECT owner, object_name, object_type FROM all_objects WHERE object_name = 'SDB_TB_WAFER_START_PLAN'; ``` 🔍 **验证远程表是否存在(通过 DBLink)**: ```sql SELECT COUNT(*) FROM DR01.SDB_TB_WAFER_START_PLAN@B2MFGDBP1; -- 如果报错 ORA-00942,则说明: -- - 表不存在,或 -- - DR01 用户下没有这张表,或 -- - 你不能通过 DBLink 访问它 ``` --- #### ✅ 4. **缺少对象访问权限** 即使表存在,如果 `DR01` 用户没有授予你(或你的用户)对该表的 `SELECT` 权限,也会报 ORA-00942。 📌 示例: ```sql -- 假设你是 USER_A,想访问 DR01.SDB_TB_WAFER_START_PLAN -- 但 DR01 没有执行过: GRANT SELECT ON SDB_TB_WAFER_START_PLAN TO USER_A; -- 或更宽泛地: GRANT SELECT ANY TABLE TO USER_A; -- 不推荐,安全风险高 ``` ✅ **解决方法**: 联系 DBA 或表所属用户(如 DR01),让他们执行: ```sql GRANT SELECT ON DR01.SDB_TB_WAFER_START_PLAN TO 你的用户名; ``` --- #### ✅ 5. **大小写敏感问题(极少情况)** 如果表名是双引号创建的 `"Sdb_Tb_Wafer_Start_Plan"`,则必须带引号且大小写一致访问。 一般不建议这样建表,但如果真遇到了: ```sql SELECT * FROM "Sdb_Tb_Wafer_Start_Plan"; -- 必须加引号 ``` 通常我们忽略这点,因为绝大多数表都是大写存储的。 --- ### ✅ 快速排查步骤总结 | 步骤 | 操作 | |------|------| | 1️⃣ | 确认报错具体在哪张表?看完整错误信息定位哪一行出错 | | 2️⃣ | 执行 `SELECT * FROM all_objects WHERE object_name = '表名';` 检查是否存在 | | 3️⃣ | 对于带 `@dblink` 的表,尝试单独运行 `SELECT COUNT(1) FROM 表@dblink;` 测试连通性 | | 4️⃣ | 检查 `ALL_DB_LINKS` 是否能看到对应的 DBLink | | 5️⃣ | 联系 DBA 或数据负责人确认:表是否存在 + 是否授权给你 | --- ### 🛠️ 实用诊断 SQL 示例 ```sql -- 1. 查看你能访问的所有同名表 SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM ALL_OBJECTS WHERE OBJECT_NAME LIKE '%WAFER_START_PLAN%'; -- 2. 检查 DBLink 是否可用 SELECT SYSDATE FROM DUAL@B2MFGDBP1; -- 3. 测试远程表是否存在 SELECT COUNT(*) FROM DR01.SDB_TB_WAFER_START_PLAN@B2MFGDBP1 WHERE ROWNUM=1; ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值