C# 必须声明UTL_RECOMP.RECOMP_SERIAL
首先,我想指定我正在尝试远程执行此升级。我收到这个错误: 2015-04-24:11:59:42[错误]myDB-无法重新编译“DBTYPE” 数据库对象:ExcSQL失败:遇到Oracle错误:ORA-06550: 第1行第7列:PLS-00201:标识符“UTL\u重新编译。重新编译\u序列” 必须声明为ORA-06550:第1行第7列:PL/SQL:语句 已忽略(6550)SQL文本:begin utl_recomp.recomp_serial('DBTYPE'); 结束 2015-04-24:11:59:42[错误]工作对象执行失败:DBTYPE- 进程JAR文件失败:无法重新编译“DBTYPE”数据库 对象:ExcSQL失败:遇到Oracle错误:ORA-06550:第1行, 第7列:PLS-00201:标识符“UTL\u重组。重组\u序列”必须为 声明的ORA-06550:第1行第7列:PL/SQL:语句被忽略(6550) SQL文本:开始utl_recomp.recomp_serial('DBTYPE');结束 2015-04-24:11:59:42[错误]UPGD失败!:myDB-升级错误- 工作线程进程错误-DBTYPE-进程JAR文件失败: 未能重新编译“DBTYPE”数据库对象:ExcSQL失败:Oracle 遇到错误:ORA-06550:第1行第7列:PLS-00201:标识符 “UTL_RECOMP.RECOMP_SERIAL”必须声明为ORA-06550:第1行第列 7:PL/SQL:语句被忽略(6550)SQL文本:开始 utl_recomp.recomp_serial('DBTYPE');结束 当我尝试对无效对象进行重新编译时。我在互联网上能找到的唯一一件事是,在重新编译时,我应该以sysdba的身份登录,我目前正在这样做C# 必须声明UTL_RECOMP.RECOMP_SERIAL,c#,sql,oracle,C#,Sql,Oracle,首先,我想指定我正在尝试远程执行此升级。我收到这个错误: 2015-04-24:11:59:42[错误]myDB-无法重新编译“DBTYPE” 数据库对象:ExcSQL失败:遇到Oracle错误:ORA-06550: 第1行第7列:PLS-00201:标识符“UTL\u重新编译。重新编译\u序列” 必须声明为ORA-06550:第1行第7列:PL/SQL:语句 已忽略(6550)SQL文本:begin utl_recomp.recomp_serial('DBTYPE'); 结束 2015-04-
"Data Source = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = " + MyHostName + ")(PORT = 1521))(CONNECT_DATA =" +
"(SERVICE_NAME = " + mySID + ")));DBA Privilege = SYSDBA;" +
"User Id = " + MyID + ";Password = " + MyPW;
我的连接工作正常,因为我可以运行3/4的升级过程,直到我达到这个点,尝试重新编译这个特定的模式
Conn = GetConn( MyID, MyPW );
if (DevelopSrvr)
{
ExcSQL(Conn, "alter session set plsql_debug=true");
}
ExcSQL(Conn, "begin utl_recomp.recomp_serial('" + schema + "'); end;");
这个程序在本地运行良好,我检查了堆栈跟踪,所有变量都返回了预期值。有什么我遗漏的吗?提前感谢以下是与UTL\u重组包相关的操作说明: 此程序包必须使用SQL*PLUS运行 此包使用作业队列进行并行重新编译 您必须以SYSDBA身份连接才能运行此脚本 此程序包要求已创建具有有效状态的以下程序包: 标准(STANDARD.sql) DBMS_标准(dbmsstdx.sql) DBMS_作业(dbmsjob.sql)
DBMS_RANDOM(dbmsrand.sql)根据您的输出: 必须将“UTL\u RECOMP.RECOMP\u SERIAL”声明为ORA-06550:第1行第7列:“ 此消息表示您已登录,但没有sysdba权限 在目标数据库中验证: 1.)远程登录密码文件设置为独占
SQL> show parameter password
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string EXCLUSIVE
2.)您用于登录的用户名列在v$pwfile_users目录视图中(假设您使用“Z_TEST”数据库帐户作为sysdba进行连接):
以下示例假定“z_test/welcome1”帐户凭据和“db99”作为目标服务名称:
sqlplus z_检验/welcome1@db99作为sysdba
提示:当以sysdba连接时,您的用户名将变为“SYS”。在代码中验证这一点。例如:
SQL> show user
USER is "SYS"
UTL_重新映射包的此列表已完成,因为应用程序可以在本地运行。我对这个包所做的唯一更改是将其连接到远程。是否有一个命令行参数可以通过“begin utl_recomp.recomp_serial(““+schema+”);end;”传递,以允许我作为sysdba执行sql?在登录过程中为sysdba权限提供了帐户凭据。我给你举个例子作为第二个答案。谢谢你的帮助,丹尼尔!我是以sys的身份连接到服务器的,但我遇到的问题是,一旦连接正确,我就需要启动sqlplus?当我的意思是以sysdba的身份连接时,我的C#应用程序将我以sysdba的身份连接到服务器,我想知道我是否必须从此点打开sqlplus。想知道本地运行sqlplus并尝试以这种方式连接是否更容易。感觉就像我做了双倍的工作。如果你能在本地运行sqlplus,那么在运行“utl_recomp.recomp_serial”时就不会有任何问题。上面的示例是从客户端计算机(远程)执行“sqlplus”时执行的。谢谢您的时间,Daniel!你帮我指明了正确的方向。
SQL> set serveroutput on
SQL> begin
2 utl_recomp.recomp_serial('Z_TEST');
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> show user
USER is "SYS"