web-dev-qa-db-ja.com

「SYSDBAとして」がSQL Developerから機能しないのはなぜですか?

私はSQL Server開発者/ DBAコンサルタントで、最近Oracle DBAを失った顧客を支援しています。私はOracleで開発を行いましたが、DBAの作業はそれほど多くなく、このようなマルチホーム環境ではありません。

問題: SQL Plusから「SY​​S As SYSDBA」を使用して接続できますが、同じシステム上のSQL Developerからはできません 。ただし、SQLプラスまたはのいずれかで「システム」を使用して接続できます SQL開発者。

詳細:

このサーバーでは、私のWindows管理者アカウント(Oracle Admin Asstでサーバー管理者としても入力されています)で、次のDOSコマンドが機能します。

D:\Oracle\app\product\11.2.0\dbhome_1\BIN>sqlplus /@MyDb as sysdba

そして、Select * from V $ INSTANCEは、それがMyDbにあり、ツールとデータベースの両方が11.2.0.3であることを示しています。

これもそうです:

D:\Oracle\app\product\11.2.0\dbhome_1\BIN>sqlplus sys/<pwd>@MyDb as sysdba

(ALSO:wrongパスワードの入力も機能します(!))

同じ(サーバー、アカウント、およびホーム)からSQL-Plusスタートメニューオプションを使用すると、これらも機能します。

Enter user-name: /@MyDb as sysdba
Enter user-name: sys/<pwd>@MyDb as sysdba

V $ INSTANCEから*を選択すると、それがMyDbにあり、ツールとデータベースの両方が11.2.0.3であることを示します。

同じSQL DeveloperからMyDbにアクセスしようとすると、 "system"ユーザー名は成功しますが、 "sys"は "ORA-01031:不十分な特権"でsysdbaとして失敗します。ただし、これは他のサーバー上の他のデータベースに接続するときに機能します。

私はこれを調査しましたが、投稿されたこのヘルプのほとんどは、接続がまったくできない場合を対象としているようですが、ここではそうではありません。これらのいくつかを回避するために:

  • SQL Developerはローカルでもリモートでも「システム」に対して機能するため、問題はネットワークがセットアップされていないことではありません。
  • 問題は、DB /インスタンスが開始されていないことではありません。これも、「システム」で機能するためです。
  • 間違ったデータベースに接続しているのではなく、「システム」をチェックしました
  • 私の知る限り、他のDB上の他のサーバーに接続すると機能するため、SQL Developerで間違った構文を使用して「SYSDBAとして」DBに接続しているわけではありません。

私の直感はどちらかです

  1. ネットワーク接続を介してSYSDBAを許可しない」という設定があります、または
  2. oracleのネットワークリスナーに構成/承認の問題があり、Windowsの管理者アカウントをチェックできません。さらに、sysのパスワードは、私が言われたものとは異なります。最後に、Oracleはそのために鈍いエラーメッセージを出します。

これに関するヘルプやガイダンスは大歓迎です。


OK、それで@BalasPappからの指示を使用して、私は以下をさらに見つけることができました:

  • このデータベースは、D:\Oracle\app\product\11.2.0\dbhome_1D:\Oracle\app\product\11.2.0\dbhome_1にパスされたOraDb11g_home3と呼ばれるsecondOracle 11gホームによって処理されます。
  • Windowsサービスは、no起動パラメーターを示しました(もちろんDB名を除きます)。
  • コマンドshow parameter remote_login_passwordfileは、 "[〜#〜] exclusive [〜#〜]"の値を示します。

Listener.oraの内容:

# listener.ora Network Configuration File: D:\Oracle\app\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (Oracle_HOME = D:\Oracle\app\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:D:\Oracle\app\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(Host = <SERVERNAME>.<networkname>.local)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

ADR_BASE_LISTENER = D:\Oracle\app

Sqlnet.oraの内容:

# This file is actually generated by netca. But if customers choose to 
# install "Software Only", this file wont exist and without the native 
# authentication, they will not be able to connect to the database on NT.

SQLNET.AUTHENTICATION_SERVICES = (NTS)

lsnrctl statusの出力:

D:\Oracle\app\product\11.2.0\dbhome_1\BIN>lsnrctl status

LSNRCTL for 64-bit Windows: Version 11.2.0.3.0 - Production on 23-DEC-2015 12:03:55

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=<SERVERNAME>.<networkname>.local)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for 64-bit Windows: Version 11.2.0.3.0 - Production
Start Date                02-DEC-2015 16:25:41
Uptime                    20 days 19 hr. 38 min. 17 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   D:\Oracle\app\product\11.2.0\dbhome_1\network\admin\listener.ora
Listener Log File         D:\Oracle\app\diag\tnslsnr\<SERVERNAME>\listener\alert\log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(Host=<SERVERNAME>.<networkname>.local)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
  Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "<DBNAME>" has 1 instance(s).
  Instance "<DBNAME>", status READY, has 1 handler(s) for this service...
The command completed successfully

D:\Oracle\app\product\11.2.0\dbhome_1\BIN>

SQL Developerから接続するときのパラメーター:

Username:  system (or sys)
Password:  <...>
Connection 
  Type:    Basic
  Role:    Default (or SYSDBA)
Hostname:  localhost
Port:      1521
SID (or Service name, both work/fail the same):
           <dbname>

(Neither OS Authentication nor Kerberos is set)

「システム、デフォルト」で機能し、「sys、SYSDBA」で「権限が不十分」で失敗します。 OS認証とKeberos設定の多くの組み合わせも試しましたが、役に立ちませんでした。

最後に、これらは.oraディレクトリにある2つの/databaseファイルのみです。

SNCF<DBNAME>.ORA           (18MB)
SPFILE<DBNAME>.ORA         (4kb)

メモ帳では、どちらもバイナリファイルのように見えます。

また、select * from v$pwfile_usersは行を返しません。

4
RBarryYoung

Sql * net経由でクライアントから「sysdbaとして」を使用して接続するには、

  1. 'exclusive'を持つremote_login_passwordfileパラメータ
  2. 接続しようとするインスタンスに存在するパスワードファイル(orapw $ {Oracle_SID})
  3. データベースでユーザーにsysdbaを付与します(sysにはこのデフォルトがあり、passwdファイルのパスワードを使用します。

パスワードファイルのデフォルトの場所は$ Oracle_HOME/dbsですが、Oracle v12以降はASMに保存することもできます。その場合、srvctlを使用してそれを見つけます

2
ik_zelf