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を読み込んでくれて、パスワードの強制変更がうまくいくようになった。
やったことまとめ
上記までの作業をやった後にやったことまとめ。
- コマンドプロンプト起動
- SET ORACLE_SID=B
- sqlplus /nolog
- conn / as sysdba
- SELECT instance_name FROM v$instance ※念のためBになってるか確認
- ALTER USER SYS IDENTIFIED BY password;
- ALTER USER SYS ACCOUNT UNLOCK;
- SHUTDOWN
- STARTUP
他にも、コマンドプロンプトから、orapwdコマンドを叩いて、パスワードファイル作り直ししたけど、意味なかった。
orapwd file=<ORACLE_HOME>/database/PWDB.ORA
8番で再起動したけど、これは7番やったら、emが500エラー出て、アクセスできなくなったから。
7番は、もしかしたら、SYSユーザーのパスワードが間違っているんじゃなくて、ロックがかかってるんじゃなかって思ったから、やった。
8番で再起動したけど、これは7番やったら、emが500エラー出て、アクセスできなくなったから。
先にログインできるかどうか試してからやるべきだったと思った。
もうこれだけで1人日使ってたからしんどかった。
人がインストールしておかしいものを調査するってしんどい。
その他
emでログインできなくて、sqlplusでログインできるって書いてるけど、あたり前。
サーバーの管理者ユーザーでコマンドプロンプト使ってるんだから、管理者ユーザーだったら、OS認証で誰でもログインできちゃうんだから。
sqlplusで本当にログインできるかどうかのチェックは、別ユーザーか、クライアント側からアクセスを試さないとダメだった。
そんな面倒なことやってられないけど。