FRM-40654问题解决

本文提供了一种查询和解锁ERP系统中被锁定表的方法,通过SQL语句可以帮助您找到锁定的表并给出解除锁定的具体步骤。

发现这样的问题有两种可能性:  

    FRM-40654:已更新记录。重新查询块,已查看更改!

1.表被锁定。查看是否有被锁定请参考下文查询,并利用SQL进行解锁。

在erp中我们常常会遇到表锁定的问题,那么我们如何去查那些表被锁定了呢?一下是fifali提供的一个查找解锁表的SQL语句,在执行该SQL后你可以杀掉该表对应的 DB_PID

进程。

杀进程的语句为:

alter system kill session 'session_id,serial#';

一下是SQL 。

    • SELECT dob.OBJECT_NAME Table_Name
    • lo.LOCKED_MODE,
    • lo.SESSION_ID,
    • vss.SERIAL#,
    • vps.spid,
    • vss.action Action,
    • vss.osuser OSUSER,
    • vss.process AP_PID,
    • VPS.SPID DB_PID,
    • 'alter system kill session ' || '''' || lo.SESSION_ID || ',' ||vss.SERIAL# || ''';' kill_command
    • from v$locked_object lo, dba_objects dob, v$session vss, V$PROCESS VPS
    • where lo.OBJECT_ID = dob.OBJECT_ID
    • and lo.SESSION_ID = vss.SID
    • AND VSS.paddr = VPS.addr
    • order by 2, 3, DOB.object_name;

这是查找被锁包的SQL 。


2.该表中有一个看不见的字符(空格结尾)遇到该问题,请用数据库后台将空格去掉(首先尝试前台诊断是否可以修改)。

<think>我们正在处理的是FRM-90928错误,具体描述为"命令行中关键字后的位置参数问题"。这个错误通常发生在启动Oracle Forms应用时,命令行参数传递不正确。 根据错误信息:“positional parameter after keyword on command line”,这意味着在命令行中,关键字参数(如userid、module等)后面出现了位置参数(即没有关键字前缀的参数)。在Oracle Forms的命令行语法中,所有参数都必须以关键字形式指定,不能出现无关键字的参数。 例如,以下命令是错误的: frmweb.exe module=myform.fmx userid=scott/tiger@db my_parameter <-- 错误!my_parameter是位置参数,不能出现在关键字参数后面 正确的命令应该是: frmweb.exe module=myform.fmx userid=scott/tiger@db paramform=no other_parameter_key=value 因此,解决此错误的方法是检查启动Forms应用的命令行,确保所有参数都有关键字前缀。 具体步骤: 1. **检查启动命令**: 查看用于启动Forms应用程序的命令行(例如,在Web环境中,可能是通过URL传递参数,或者是在服务器端的配置文件中设置的命令)。确保每个参数都有明确的关键字(如`module`、`userid`、`paramform`等),并且没有多余的位置参数。 2. **检查URL参数**: 如果通过浏览器URL启动Forms,检查URL中的参数。例如: ``` http://host:port/forms/frmservlet?config=test&userid=scott/tiger@db&module=myform.fmx ``` 这里每个参数都有关键字(config, userid, module)。如果URL中出现了没有关键字的参数值,就会导致该错误。 3. **检查formsweb.cfg文件**: 在Forms服务的配置文件`formsweb.cfg`中,检查对应配置节(如[test])中的参数设置。确保每个参数都正确指定了关键字。特别注意`otherParams`参数,它用于传递额外的参数,这些参数必须是以逗号分隔的“关键字=值”对。 例如,在formsweb.cfg中: ``` [test] form=myform.fmx userid=scott/tiger@db otherParams=param1=value1,param2=value2 # 正确:每个额外参数都有关键字 # 错误示例:otherParams=value1,value2 (这样会导致位置参数错误) ``` 4. **检查自定义脚本或调用程序**: 如果通过脚本(如shell脚本或批处理文件)或自定义程序调用Forms运行时,检查这些脚本中构建的命令行,确保没有遗漏关键字。 5. **调试技巧**: 可以尝试简化命令行,只保留必要参数(如module和userid),然后逐步添加其他参数,以定位是哪个参数导致了问题。 示例错误场景: - 错误:`frmweb.exe module=myform.fmx userid=scott/tiger@db some_value` 这里`some_value`是一个位置参数,因为它没有关键字。 - 正确:`frmweb.exe module=myform.fmx userid=scott/tiger@db param1=some_value` 总结:FRM-90928错误的根本原因是命令行参数语法错误,即关键字参数后面出现了位置参数。请按照上述步骤检查并修正命令行参数,确保每个参数都有关键字前缀。 如果问题仍然存在,请提供具体的命令行或URL示例,以便进一步分析。 相关问题: 1. 如何正确设置Oracle Forms的启动参数? 2. 在formsweb.cfg文件中,otherParams参数的正确用法是什么? 3. 如何调试Oracle Forms的启动错误? 4. 常见的Oracle Forms命令行参数有哪些? 5. 为什么在URL中传递参数会导致FRM-90928错误?</think>### 解决 FRM-90928 错误:命令行中关键字后的位置参数问题 FRM-90928 错误的核心是 **命令行参数语法错误**,当在 Oracle Forms 启动命令中,关键字参数(如 `module=`)后面直接跟了位置参数(无关键字的参数)时触发。以下是完整解决方案: #### 错误原因分析 1. **参数顺序错误** 关键字参数后出现位置参数,例如: `frmweb.exe userid=scott/tiger module=app.fmx REPORT_PARAM` `REPORT_PARAM` 作为位置参数出现在关键字参数 `module=` 后,违反语法规则。 2. **参数语法混合** 同时使用两种参数格式: ```bash frmweb config=test userid=scott/tiger@db # 关键字参数 my_report_param # 位置参数(错误) ``` 3. **URL 参数传递错误** 在 Web 启动 URL 中错误拼接参数: `http://server:9000/forms/frmservlet?config=test&module=app.fmx&REPORT_DATA` --- #### 解决方法 ##### 1. 统一参数格式(二选一) **方案 A:全关键字参数** 所有参数必须带关键字前缀: ```bash frmweb.exe userid=scott/tiger@db \ module=app.fmx \ param1=value1 \ # ✅ 正确 param2=value2 # ✅ 正确 ``` **方案 B:全位置参数** 严格按顺序传递参数(需确认参数顺序): ```bash frmweb.exe app.fmx scott/tiger@db value1 value2 # ✅ 正确 ``` ##### 2. 检查配置文件 在 `formsweb.cfg` 中,确保 `otherParams` 使用关键字格式: ```ini [MY_APP] form=app.fmx userid=scott/tiger@db otherParams=param1=REPORT_DATA,param2=FORMAT # ✅ 逗号分隔的关键字参数 ``` ##### 3. 修正 URL 参数 在 Web 启动 URL 中,所有参数必须带关键字: ```http http://server:9000/forms/frmservlet?config=MY_APP&param1=REPORT_DATA&param2=PDF ``` ##### 4. 验证参数顺序 通过 `frmweb help=y` 查看合法参数顺序: ```bash $ frmweb help=y Valid parameters: module=form_name userid=username/password@db param=value # 额外参数必须带关键字 ... Positional parameters must precede keyword parameters. ``` --- #### 调试技巧 1. **启用日志** 添加 `debug=yes` 参数捕获详细错误: ```bash frmweb.exe module=app.fmx debug=yes log=forms.log ``` 2. **参数顺序验证工具** 使用临时脚本检查参数顺序: ```bash #!/bin/bash # 检查关键字参数后是否有位置参数 has_keyword=false for arg in "$@"; do if [[ $arg == *=* ]]; then has_keyword=true elif $has_keyword; then echo "错误:位置参数 '$arg' 出现在关键字参数后" exit 1 fi done ``` --- #### 关键原则总结 1. **位置参数必须全部在关键字参数之前** $$ \text{位置参数} \rightarrow \text{关键字参数} $$ 2. **混合使用时,位置参数必须在第一个关键字参数出现前结束** 3. Web URL 和配置文件必须 **始终使用关键字参数格式** > **示例修正** > 错误命令: > `frmweb module=order.fmx userid=ops$oracle REPORT=DailySales` > 修正后: > `frmweb userid=ops$oracle module=order.fmx report=DailySales` > 或(纯位置参数): > `frmweb order.fmx ops$oracle DailySales` [^1] [^2]
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值