Как подключиться в java как SYS к Oracle?

Я получаю эту ошибку:

java.sql.SQLException: ORA-28009: connection as SYS should be as SYSDBA or SYSOPER

Как исправить? (Мне нужно быть SYS). Спасибо.


person user710818    schedule 11.04.2012    source источник
comment
Пожалуйста, покажите код, который вы используете для подключения.   -  person Aaron Digulla    schedule 11.04.2012
comment
Когда вы говорите в java, вы имеете в виду через JDBC?   -  person Andrew Swan    schedule 11.08.2016


Ответы (9)


попробуй это :

import java.sql as jsql
import java.lang as lang
driver, url, user, passwd = (
"oracle.jdbc.driver.OracleDriver",
"jdbc:oracle:thin:@localhost:1234:xxx1",
"sys as sysdba",
"xxx1")
 lang.Class.forName(driver)
 c = jsql.DriverManager.getConnection(url,user,passwd)
person simplycurious    schedule 11.04.2012
comment
Что это, Груви? - person Andrew Swan; 11.08.2016
comment
Вопрос задан в java. - person ; 11.11.2017
comment
как обстоят дела с файлом tomcat server.xml? - person sns; 24.01.2018
comment
правильный URL-адрес jdbc для sys как sysdba: jdbc:oracle:thin:sys as sysdba/[email protected]:1521/xe, протестирован с xe 11.2.0.2.0 - person alexgirao; 08.06.2018

Ответы уже есть,

вы пытаетесь подключиться как sys, но сервер разрешает

либо

sys as sysdba

or

sys as sysoper

просто измените пользовательский параметр как один из приведенных выше

user='sys as sysdba'

or

user='sys as sysoper'
person RahulArackal    schedule 05.12.2013
comment
Спасибо, это предложение пригодится - person learningloop; 18.03.2014

Этот код работает

String driverName = "oracle.jdbc.driver.OracleDriver";
Class.forName(driverName).newInstance();
String nameForConnect = "sys as sysdba";
String pass = "password";
String url = "jdbc:oracle:thin:@192.168.0.1:1521:ORCL";
Connection conn = DriverManager.getConnection(url, nameForConnect, pass);
person Alexander    schedule 11.04.2012

Если вы пытались подключиться к базе данных следующим образом: connect SYS/<password> вы использовали синтаксис, который больше не действует (после Oracle 9i).

Вместо этого попробуйте подключиться следующим образом:

connect SYS/<password> as SYSDBA or connect SYS/<password> as SYSOPER
person Korhan Ozturk    schedule 11.04.2012
comment
Вопрос был о подключении через Java, что, как я полагаю, означает JDBC. Команды, которые вы дали, предназначены для использования с SQL * Plus, если я не ошибаюсь. - person Andrew Swan; 11.08.2016

Можете ли вы использовать объект OracleDataSource?

public class Database {    
    static OracleDataSource ods;    
    public static Connection openConnection(String URL, String user, String password,     String option) throws SQLException
    {
            Connection conn = null;
            Properties properties = new Properties();
            properties.put("user", user);
            properties.put("password", password);

            ods = new OracleDataSource();
            ods.setURL(URL);

            if(option != null)
            {
                properties.put("internal_logon", option);
            }

            ods.setConnectionProperties(properties);
            conn = ods.getConnection();

            return conn;
    }
}

И назовите это так:

Connection con = null;    
con = Database.openConnection("YourJDBCConnectionURL", "YourSYSUser", "YourSYSPassword", "sysdba");
person lkdg    schedule 12.04.2012

Если вы хотите подключить свою базу данных с пользователем, отличным от «sys», как «sysdba», вам нужно изменить драйвер с «thin» на «oci», чтобы установить успешное соединение.

try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        String DB_URL="jdbc:oracle:oci:@localhost:1521:orcl";
        OracleDataSource ds1=new OracleDataSource();
        Properties prop1 = new Properties();
        prop1.setProperty("user","ravi");
        prop1.setProperty("password","******");
        prop1.setProperty("internal_logon","sysdba");
        ds1.setConnectionProperties(prop1);
        ds1.setURL(DB_URL);
        OracleConnection conn1 = (OracleConnection)ds1.getConnection();
        Statement stmt = conn1.createStatement();
        ResultSet rs = stmt.executeQuery("select * from dba_users");
        while (rs.next())
            System.out.println(rs.getString(1));
        conn1.close();
    } catch (Exception e) {
        System.out.println(e);
    }
person Ravibhushan Kumar    schedule 10.06.2017

Вам нужно поставить sysdba с параметром user String, например

String user="sys as sysdba"
person Neha Gangwar    schedule 11.01.2018

Мои два цента, когда я столкнулся с тем же исключением. Следующее помогло мне:

           try (Connection conn = DriverManager.getConnection(
                "jdbc:oracle:thin:@myserverip:1521:XE", "sys as sysdba", "Hello123")) {   
           // this worked too - "jdbc:oracle:thin:@myserverip:1521:XE", "system"
              if (conn != null) {
                  System.out.println("Connected to the database!");
              } else {
                System.out.println("Failed to make connection!");
              }
 
            } catch (SQLException e) {
              System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());
            } catch (Exception e) {
            e.printStackTrace();
           }
person Ajay Kumar    schedule 08.12.2020

person    schedule
comment
Пожалуйста, объясните, что делает ваш код и как он это делает. - person M-Chen-3; 24.11.2020