我正在尝试运行以下代码:
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
答案 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",
并且它应该工作(当然,如果语法正确;我不知道为什么用户名用单引号引起来,而密码用双引号引起来-我希望您确实知道)。