windowsserverにてoracle12cのemにsysでだけアクセスできない理由は権限かも

oracle12cのインストールをしたらこんな現象が起きた。

EnterpriseManagerにSYSでアクセスできないのだ。

SYSTEMユーザではログインができる。

sqlplusでは、SYSでもログインできた。

 

EnterpriseManagerのSYSのときだけ、ログインが失敗する。

前提情報

環境周りや、状況は以下の通り。

  • OS:WindowsServer2012R2
  • 仮想環境を利用。
  • 作ったインスタンス数:2つ(AとBとしようか)
  • 仮想環境内で直接コマンドプロンプトを実行して、sqlplusを使用。
  • 仮想環境でGoogleChromeを利用して、EnterpriseManagerにアクセス。
  • ファイアウォールは全部無効。

 

今回、この現象が発生したのはBのem。

Aでは問題なく成功した。

 

Bでは、データベースを再起動するのに、spfileを読み込んでくれなくて、何か色々とおかしかった。

 

インストール作業自体は、会社の別の人がやったので、どんな風にインストールしたか不明。

結果だけがある状態。

理由

さっさと、原因を書く。

sysのパスワードが間違っているのが直接的な原因だった。

(本当に間違ってたかどうかはわからない。しかし、ほかのユーザーはログインできることから、そういうことなんだと思う。)

 

そこでまた現れた次の問題。

パスワードを強制で変更しようとしても、変更ができない。

 

もっとちゃんと書くと、画面では、変更したことになっているが、実際には変わってくれてないのだ。

 

この現象の原因は、以下。

  • <ORACLE_HOME>/databaseにインスタンスBのアクセス権限が付与されていない状態だった。
  • <ORACLE_HOME>/database/spfileB.oraに〜〜(忘れた。長い名前のやつ)のアクセス権限が付与されていなかった。

<ORACLE_HOME>/databaseのフォルダを右クリック→プロパティ→セキュリティタブにて、OracleServiceAが設定されているのに、Bがいないのだ。

追加ボタンから追加。

※OracleServiceBと名前を入力しても、そんな名前のやつはいないとエラーになる。

正式名みたいなものを入力しないといけないらしい。

正式名は、スタート→コントロールパネル→検索でサービス→一番上に出てきたものをクリック、OracleServiceBを右クリック→プロパティで見つけられる。

NT 〜〜OracleServiceBみたいなのが名前になるらしい。

 

同様の要領で、<ORACLE_HOME>/database/spfileB.oraにも、別の権限を付与。

 

こうすることで、データベース起動時にspfileを読み込んでくれて、パスワードの強制変更がうまくいくようになった。

やったことまとめ

上記までの作業をやった後にやったことまとめ。

  1. コマンドプロンプト起動
  2. SET ORACLE_SID=B
  3. sqlplus /nolog
  4. conn / as sysdba
  5. SELECT instance_name FROM v$instance ※念のためBになってるか確認
  6. ALTER USER SYS IDENTIFIED BY password;
  7. ALTER USER SYS ACCOUNT UNLOCK;
  8. SHUTDOWN
  9. STARTUP

 

他にも、コマンドプロンプトから、orapwdコマンドを叩いて、パスワードファイル作り直ししたけど、意味なかった。

orapwd file=<ORACLE_HOME>/database/PWDB.ORA

8番で再起動したけど、これは7番やったら、emが500エラー出て、アクセスできなくなったから。

7番は、もしかしたら、SYSユーザーのパスワードが間違っているんじゃなくて、ロックがかかってるんじゃなかって思ったから、やった。

8番で再起動したけど、これは7番やったら、emが500エラー出て、アクセスできなくなったから。

先にログインできるかどうか試してからやるべきだったと思った。

 

もうこれだけで1人日使ってたからしんどかった。

 

人がインストールしておかしいものを調査するってしんどい。

その他

emでログインできなくて、sqlplusでログインできるって書いてるけど、あたり前。

サーバーの管理者ユーザーでコマンドプロンプト使ってるんだから、管理者ユーザーだったら、OS認証で誰でもログインできちゃうんだから。

sqlplusで本当にログインできるかどうかのチェックは、別ユーザーか、クライアント側からアクセスを試さないとダメだった。

そんな面倒なことやってられないけど。

おすすめの記事