首页 > 解决方案 > 运行 R 代码时出错“连接为 SYS 应为 SYSDBA 或 SYSOPER”。我需要将 R 连接到 oracle

问题描述

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

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

标签: rdatabaseoracleoracle11godbc

解决方案


我不知道R。

首先,为什么要以 SYS 身份连接?它(连同 SYSTEM)拥有数据库;它很特别- 如果您不知道自己在做什么,您可能会破坏数据库。不理会 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",

它应该可以工作(当然,如果语法正确;我不知道为什么用户名用单引号括起来,但密码用双引号括起来 - 我希望你知道)。


推荐阅读