运行R代码“作为SYS连接应为SYSDBA或SYSOPER”时出错。我需要将R连接到oracle

时间:2018-11-23 13:18:53

标签: r database oracle oracle11g odbc

我正在尝试运行以下代码:

library("RODBC")

idisc_ODBC <- odbcConnect("TEST",'sys', "oracle123",
                       believeNRows = FALSE, rows_at_time = 1)

还找到了oracle db

的附加屏幕截图

运行R代码时出现错误:

Warning messages:
1: In RODBC::odbcDriverConnect("DSN=TEST;UID=sys;PWD=oracle123", believeNRows = FALSE,  :
  [RODBC] ERROR: state HY000, code 28009, message [Oracle][ODBC][Ora]ORA-28009: connection as SYS should be as SYSDBA or SYSOPER
2: In RODBC::odbcDriverConnect("DSN=TEST;UID=sys;PWD=oracle123", believeNRows = FALSE,  :
  ODBC connection failed

1 个答案:

答案 0 :(得分:0)

我不认识R。

首先,为什么要以SYS身份连接?它(连同SYSTEM)拥有数据库;这是 special ,并且-如果您不知道自己在做什么,则可能会破坏数据库。不用理会SYS和SYSTEM。创建另一个用户,然后在其架构中进行任何操作。

关于您的问题:用户名是(显然是SYS),密码是oracle123。如果是这样,请尝试

idisc_ODBC <- odbcConnect("TEST",'sys as sysdba', "oracle123",

就Oracle而言,它有效。看一下这个演示-我将以SYS身份连接到数据库,并在命令提示符下运行SQL * Plus:

C:\>sqlplus sys as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Pet Stu 23 20:05:40 2018

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL>

看到第一行? sys as sysdba。希望它也可以与R一起使用。但是,再次:不要使用SYS。您可能正在使用数据库中的用户来代替。如果您查看列表:

SQL> select * from all_users;

USERNAME                          USER_ID CREATED
------------------------------ ---------- --------
XS$NULL                        2147483638 29.05.14
SCOTT                                  79 06.09.18      --> this
IMPORTER                               76 06.09.18
MIKE                                   71 30.03.18
APEX_040000                            47 29.05.14
APEX_PUBLIC_USER                       45 29.05.14
FLOWS_FILES                            44 29.05.14
HR                                     43 29.05.14      --> this
<snip>

两个明显的选择是SCOTT和HR。如果您不知道他们的密码,请将其设置为

SQL> alter user scott identified by tiger;

User altered.

SQL>

现在您的连接看起来像

idisc_ODBC <- odbcConnect("TEST",'scott', "tiger",

并且它应该工作(当然,如果语法正确;我不知道为什么用户名用单引号引起来,而密码用双引号引起来-我希望您确实知道)。