2015-04-28 3 views
1

Прежде всего, я хотел бы указать, что я пытаюсь выполнить это обновление удаленно. Я получаю эту ошибку:UTL_RECOMP.RECOMP_SERIAL должен быть объявлен

2015-04-24:11:59:42 [Error] myDB - Failed to Recompile 'DBTYPE' Database Objects: ExcSQL Failed: Oracle Error Encountered: ORA-06550: line 1, column 7: PLS-00201: identifier 'UTL_RECOMP.RECOMP_SERIAL' must be declared ORA-06550: line 1, column 7: PL/SQL: Statement ignored (6550) SQL Text: begin utl_recomp.recomp_serial('DBTYPE'); end;

2015-04-24:11:59:42 [Error] WorksObjects Execution Failed: DBTYPE - Process JAR Files Failed: Failed to Recompile 'DBTYPE' Database Objects:ExcSQL Failed: Oracle Error Encountered: ORA-06550: line 1, column 7: PLS-00201: identifier 'UTL_RECOMP.RECOMP_SERIAL' must be declared ORA-06550: line 1, column 7: PL/SQL: Statement ignored (6550) SQL Text: begin utl_recomp.recomp_serial('DBTYPE'); end;

2015-04-24:11:59:42 [Error] UPGD FAILED! : myDB - Upgrade Error - Worker Thread Process Error - DBTYPE - Process JAR Files Failed: Failed to Recompile 'DBTYPE' Database Objects:ExcSQL Failed: Oracle Error Encountered: ORA-06550: line 1, column 7: PLS-00201: identifier 'UTL_RECOMP.RECOMP_SERIAL' must be declared ORA-06550: line 1, column 7: PL/SQL: Statement ignored (6550) SQL Text: begin utl_recomp.recomp_serial('DBTYPE'); end;

, когда я пытаюсь перекомпилировать недействительные объекты. Единственное, что я могу найти в Интернете, это то, что при перекомпиляции я должен войти в систему как 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;"); 

Эта программа работает нормально локально, и я проверил трассировку стека, и все переменные возвращают ожидаемые значения. Есть что-то, что мне не хватает? Заранее спасибо

ответ

1

по вашему выходу:

"UTL_RECOMP.RECOMP_SERIAL» должен быть объявлен ORA-06550: строка 1, столбец 7:"

Это сообщение говорит о том, что вы вошли в систему, но без SYSDBA привилегии.

В вашей целевой базе данных проверить, что:

1.) Удаленный Логин файл установлен пароль ЭКСКЛЮЗИВ

SQL> show parameter password 

NAME         TYPE  VALUE 
------------------------------------ ----------- ------------------------------ 
remote_login_passwordfile   string  EXCLUSIVE 

2.) Имя пользователя, который вы используете для входа в систему приведена в ст каталога $ pwfile_users (предположим, что вы подключаетесь с помощью «Z_TEST» учетную запись базы данных как SYSDBA):

SQL> select username,sysdba from v$pwfile_users ; 

USERNAME      SYSDBA 
------------------------------ ----- 
SYS       TRUE 
Z_TEST       TRUE 

В следующем примере «z_test/welcome1» учетные данные учетной записи и "db99" в качестве имени целевой службы:

SQLPLUS z_test/welcome1 @ db99, как SYSDBA

SQL> set serveroutput on 
SQL> begin 
2  utl_recomp.recomp_serial('Z_TEST'); 
3 end; 
4/

PL/SQL procedure successfully completed. 

СОВЕТ: при подключении в качестве SYSDBA ваш имя пользователя становится «SYS». Убедитесь, что в вашем коде. Например:

SQL> show user 
USER is "SYS" 
+0

Спасибо за помощь Даниэль! Я подключаюсь как sys к серверу, но там, где я догоняюсь, мне нужно запустить sqlplus после правильного подключения? –

+0

, когда я имею в виду связанный как sysdba, мое приложение C# соединяет меня с сервером как sysdba, и мне интересно, нужно ли мне открывать sqlplus с этой точки. Удивительно, если проще запустить sqlplus локально и попытаться подключиться таким образом. Почувствуйте, как я делаю двойную работу. –

+0

Если вы можете запустить sqlplus локально, это не будет проблемой при запуске «utl_recomp.recomp_serial». В приведенном выше примере было выполнено выполнение «sqlplus» с клиентской машины (удаленно). –

1

Вот оперативные заметки, относящиеся к пакету UTL_RECOMP:

Этот пакет должен быть запущен с помощью SQL * PLUS.

Этот пакет использует очередь заданий для параллельной перекомпиляции.

Для запуска этого скрипта необходимо подключить AS SYSDBA.

Этот пакет предполагает следующие пакеты были созданы с ДЕЙСТВИТЕЛЬНО статус:

STANDARD (standard.sql)

DBMS_STANDARD (dbmsstdx.sql)

пакет DBMS_JOB (dbmsjob.sql)

DBMS_RANDOM (dbmsrand.sql)

+0

Этот список для пакета UTL_RECOMP завершен, так как приложение может выполняться локально. Единственное, что я изменил из этого пакета, - это соединение, чтобы сделать его удаленным. –

+0

есть аргумент командной строки, который я могу передать с помощью «begin utl_recomp.recomp_serial (« + схема + »); end;» разрешить мне выполнить sql как sysdba? –

+0

Привилегии «sysdba» предоставляются учетные данные во время процесса входа в систему. Я предоставляю вам пример в качестве второго ответа. –

Смежные вопросы