Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Подключение к Oracle под sysdba (http://forum.oszone.net/showthread.php?t=231006)

fossil 22-03-2012 14:29 1884653

Подключение к Oracle под sysdba
 
Доброго времени суток!
Делюсь с вами своей проблемой, так как после потраченного рабочего дня на поиски решения, я расписался в собственном бессилии.
Программа пишется в консольном режиме. Необходимо чтобы она совершала некоторые операции в базе данных.
Для выполнения большинства скриптов программе нужны привилегии пользователя SYS под SYSDBA.

Привожу программный код получившейся программы.
При попытке выполнить данную программу под пользователем SYS вылетает ошибка

Код:

TDBXError: ORA-28009: connection to sys should be as sysdba or sysoper
Если выполнять данные действия под пользователем SYSTEM, то код вполне рабочий.
В интернете прочитал о том, что для подключения под ролью SYSDBA необходимо использовать .NET (если действительно так, то мне необходимы примеры).

Заранее хочу сообщить, что в строку инициализации были попытки ввести параметры подключения "DBA Privilege=SYSDBA", а также "RoleName=sysdba"

Заранее благодарен за любую помощь!

Код:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Windows, WinSvc, ShellApi, Registry, SqlExpr, DbxOracle;

  var
    dbpath:string='C:\Oracle\ora92';
    dbname:string='database';
    dbpass:string='password';
    readst:string;
    result:boolean;
    Reg: TRegistry;
    Conn: TSQLConnection;
    Query: TSQLQuery;

    procedure MyWriteln(const S: string);
    var
    NewStr: string;
    begin
      SetLength(NewStr, Length(S));
      CharToOem(PChar(S), PChar(NewStr));
      Writeln(NewStr);
    end;

    procedure MyWrite(const S: string);
    var
    NewStr: string;
    begin
      SetLength(NewStr, Length(S));
      CharToOem(PChar(S), PChar(NewStr));
      Write(NewStr);
    end;

begin
  try
    { TODO -oUser -cConsole Main : Insert code here }
    MyWrite('Путь до базы данных Oracle ['+dbpath+']: ');
    readln(readst);
    if (readst<>'') then dbpath:=readst;
    if not DirectoryExists(dbpath) then
      begin
      MyWriteln('ОШИБКА! Путь до базы данных Oracle не найден!');
      readln;
      Exit;
      end;
    MyWrite('Имя базы данных ['+dbname+']: ');
    readln(readst);
    if (readst<>'') then dbname:=readst;
    MyWrite('Пароль пользователя SYS ['+dbpass+']: ');
    readln(readst);
    if (readst<>'') then dbpass:=readst;

    MyWrite('Подключаемся к базе данных... ');
    Conn := TSQLConnection.Create(nil);
    Query := TSQLQuery.Create(nil);
    try
      try
        Conn.ConnectionName:='OracleConnection';
        Conn.DriverName := 'Oracle';
        Conn.GetDriverFunc:='getSQLDriverORACLE';
        Conn.LibraryName:='dbxora30.dll';
        Conn.VendorLib:='OCI.DLL';
        Conn.Params.Clear;
        Conn.Params.Add('DataBase='+dbname);
        Conn.Params.Add('User_Name=sys');
        Conn.Params.Add('Password='+dbpass);
        Conn.LoginPrompt:=false;
        Conn.Connected:=true;
        Query.SQLConnection := Conn;
        Query.SQL.Text := 'SELECT banner FROM v$version';
        Query.Open;
        while not Query.Eof do begin
          Writeln(Query.Fields[0].AsString);
          Query.Next;
        end;
      except
        on E: Exception do
          Writeln(E.ClassName, ': ', E.Message);
      end;
    finally
      Query.Free;
      Conn.Free;
    end;
    readln; //КОНЭЦ
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.


Delirium 23-03-2012 01:38 1885059

моя строка подключения к ораклу(C#)
Код:

DATA SOURCE=bosstest.sun;DBA PRIVILEGE=SYSDBA;PERSIST SECURITY INFO=True;USER ID=FIRSOV
Использую Oracle ODP.NET провайдера.

fossil 23-03-2012 10:46 1885190

Да я тоже уже перешел на .NET и все заработало.
Спасибо.


Время: 18:42.

Время: 18:42.
© OSzone.net 2001-