Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 必须声明UTL_RECOMP.RECOMP_SERIAL_C#_Sql_Oracle - Fatal编程技术网

C# 必须声明UTL_RECOMP.RECOMP_SERIAL

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-

首先,我想指定我正在尝试远程执行此升级。我收到这个错误:

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的身份登录,我目前正在这样做

"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"