「As SYSDBA」がSQL Developerから機能しないのはなぜですか?
-
29-09-2020 - |
質問
私は SQL Server 開発者/DBA コンサルタントで、最近 Oracle DBA を失った顧客を支援しています。私は Oracle で開発を行ったことがありますが、DBA の仕事はあまりしていませんし、このようなマルチホーム環境ではありませんでした。
問題: SQL Plusから「SYS As SYSDBA」で接続できるのですが、 ない 同じシステム上のSQL Developerから。しかし、私は できる どちらかの SQL Plus で「システム」を使用して接続します または SQL開発者。
詳細:
このサーバーでは、Windows Admin アカウント (Oracle Admin Asst でサーバー管理者としても入力) で、次の DOS コマンドが機能します。
D:\Oracle\app\product\11.2.0\dbhome_1\BIN>sqlplus /@MyDb as sysdba
そして、V$INSTANCE から * を選択すると、それが MyDb にあり、ツールとデータベースの両方が 11.2.0.3 であることが示されます。
これも同様です:
D:\Oracle\app\product\11.2.0\dbhome_1\BIN>sqlplus sys/<pwd>@MyDb as sysdba
(また:に入る 間違っている パスワードも機能します(!))
同じ (サーバー、アカウント、ホーム) から 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」「as sysdba」では「ORA-01031:権限が不足しています」で失敗します。ただし、これは する 他のサーバー上の他のデータベースに接続するときに機能します。
これについて調査したところ、これに関して投稿されているヘルプのほとんどは、まったく接続できない場合を対象としているようですが、ここでは当てはまりません。これらのいくつかを回避するために:
- SQL Developerはローカルとリモートの両方で「システム」に対して機能するため、問題はネットワークがセットアップされていないことではありません。
- 問題は、DB/インスタンスが起動していないことではありません。繰り返しますが、「システム」では機能するためです。
- 間違ったデータベースに接続しているわけではありません。「システム」を確認しました。
- 私の知る限り、SQL Developerで「SYSDBAとして」DBに接続するために間違った構文を使用しているわけではありません。これは、他のDB上の他のサーバーに接続するときに機能するためです。
私の直感では、どちらかです
- 「」という設定があります。ネットワーク接続を介した SYSDBA を許可しない"、 または
- Oracle ネットワーク リスナーに構成/認可の問題があり、Windows 管理者アカウントをチェックできません。さらに、sys パスワードが教えられたものと異なり、最終的に Oracle はそれについて意味不明なエラー メッセージを表示します。
これに関するご支援やご指導をいただければ幸いです。
@BalasPapp からの指示を使用して、さらに次の情報を見つけることができました。
- このデータベースは、 2番 OraDb11g_home3 という名前の Oracle 11g ホームのパス
D:\Oracle\app\product\11.2.0\dbhome_1D:\Oracle\app\product\11.2.0\dbhome_1
. - Windows サービスが表示されました いいえ その起動パラメータ (もちろん DB 名を除く)。
- コマンド
show parameter remote_login_passwordfile
" の値を示しますエクスクルーシブ".
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)
「system、Default」では機能しますが、「sys、SYSDBA」では「権限が不十分」で失敗します。OS 認証と Keberos 設定の組み合わせも数多く試しましたが、役に立ちませんでした。
結局この二人だけです .ora
内のファイル /database
ディレクトリ:
SNCF<DBNAME>.ORA (18MB)
SPFILE<DBNAME>.ORA (4kb)
メモ帳ではどちらもバイナリ ファイルのように見えます。
また: select * from v$pwfile_users
行を返しません。
解決
SQL*net 経由でクライアントから「as sysdba」を使用して接続するには、次のものが必要です。
- Remote_login_passwordfile パラメータに「排他的」を設定する
- 接続しようとしているインスタンスに存在するパスワード ファイル (orapw${ORACLE_SID})
- ユーザーにデータベース内の sysdba を付与させます (sys はこのデフォルトを持ち、passwd ファイルのパスワードを使用します)。
パスワード ファイルのデフォルトの場所は $ORACLE_HOME/dbs ですが、Oracle v12 以降は ASM に保存することもできます。その場合は、srvctlを使用して見つけます