Orcle 12cをWindows10にセットアップする
この作業のゴール
- Oracle 12c がWindows10上で動作する
- データベースにユーザーとしてuser/passを作成する
- Oracle 12c へ外部からユーザーuser/passとしてアクセスができる
- Oracle 12c へ古いOracleから出力されたdmpファイルをインポートし、
 user/passがローカル/リモートでインポートされたデータへアクセスできる
1. Oracle 12c のインストール
- 
1-1 setup.exeの実行- 
Oracle 12c のsetup.exeを右クリックメニューから管理者として実行を選択し、以下の手順でインストール作業を行う-> メールアドレスを空欄にし、セキュリティアップデートをMyOracleSupport経由で受け取ります のチェックを外す 
 -> [次へ]を選択し、「電子メールアドレスが指定されていません」のダイアログで[はい]を選択する-> [データベースの作成及び構成]を選択し、[次へ]を選択する -> [サーバー・クラス]を選択し、[次へ]を選択する -> [新規Windowsユーザーの作成]を選択し、標準ユーザーアカウントを作成する 
 (今回はuser/passをuser/passとした)-> デフォルトで埋められた内容を変更せず、パスワードとしてpasswordを設定し[次へ]を選択 
 -> パスワード強度が弱いため警告が表示されるが処理続行のために[はい]を選択-> 環境変数、レジストリなどを自動で検証してくれるため処理が終わるのを待つ -> 検証結果が表示されるので確認を行う。念のため[レスポンス・ファイルの保存]を選択し検証結果を保存しておく 
 -> [インストール]を選択し、インストール処理を実行する-> インストールが自動的に始まるので完了まで待つ -> データベースがインストールされたことを確認したのちにインストーラを終了する 
 
- 
- 
1-2 インストール結果の確認- 
Oracle 12cのインストールとデータベースの構築に成功していることを確認する- 
[コントロールパネル]->[システムの詳細]->[環境変数]->[システム環境変数]のPathに C:¥app¥[ユーザー名]¥product¥12.0.1¥dbhome_1¥binが宣言されていることを確認する 
- 
Windows管理ツールのサービスからOracleのサービスが存在していること、状態が[実行中]であることを確認する 
- 
sqlplusに sqlplus / as sysdbaでログインし、 SQL> select instance_name from v$instance;と打つと INSTANCE_NAME ---------------- orclとインスタンス名が表示されることを確認する 
- 
sqlplus上で SQL> shutdown immediate及び SQL> startupを実行してデータベースが停止、起動できることを確認する。 
 
- 
 
- 
2. ユーザーの作成とリスナーの設定
- 
2-1 リスナーサービスの存在確認- 
コマンドプロンプトから lsnrctl statusを実行し、実行結果として サービスのサマリー... サービス"CRLExtProc"には、1件のインスタンスがあります。 インスタンス"CLRExtProc"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります... サービス"orcl"には、1件のインスタンスがあります。 インスタンス"orcl"、状態READYには、このサービスに対する1件のハンドラがあります... サービス"orclXDB"には、1件のインスタンスがあります。 インスタンス"orcl"、状態READYには、このサービスに対する1件のハンドラがあります... サービス"pdborcl"には、1件のインスタンスがあります。 インスタンス"orcl"、状態READYには、このサービスに対する1件のハンドラがあります...のように、CDB、PDBを含むリスナーサービスのステータスが表示されることを確認する 
 
- 
- 
2-2 pdbの存在確認と起動- 
sqlplusに sqlplus / as sysdbaでログインし、 SQL> show pdbでPDBORCLがPDBとして存在していることを確認する。 |CON_ID |CON_NAME|OPEN MODE |RESTRICTED| |--------|--------|----------|----------| |2 |PDB$SEED|READ ONLY |NO | |3 |PDBORCL |READ WRITE|NO |のようになっていれば、PDBORCLが存在している。 
- 
また、 OPEN MODEがMOUNTEDの場合は、PDBが起動していないため、SQL> alter pluggable database pdborcl open;でPDBを起動する。また、 alter pluggable database PDB名 save state;でpdbの自動起動設定を行える 
 
- 
- 
2-3 pdbに接続しユーザーを作成する- 
sqlplusに入った状態で show con_nameを実行するとSQL> show con_name; CON_NAME ------------------------------ CDB$ROOTと表示されCDBに接続していることを確認できる 
 ここでSQL> alter session set container=pdborcl; セッションが変更されました。として、pdbへ接続する。また、 SQL> show con_name; CON_NAME ------------------------------ PDBORCLと表示されればpdbに接続されていることが確認できる 
- 
ユーザーアカウントの作成 SQL> create user user identified by pass; ユーザーが作成されました。 SQL> grant all privileges to user; 権限付与が成功しました。 SQL> grant dba to user; 権限付与が成功しました。でユーザーuserを作り、全権限とpdborclコンテナの管理権限を付与する 
 このままでは接続できないため、
 C:¥app¥[user]¥product¥12.1.0¥dbhome_1¥NETWORK¥ADMINのtnsnames.oraにPDBORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = [ホスト名])(PORT = 1521)) (CONNECT DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdborcl) ) )を追記して sqlplus user/pass@pdborclで接続できることを確認する 
 
- 
3. dmpファイルのインポートと確認
- 
3-1. dmpファイルをimpコマンドでインポートする- 
sqlplusからログアウトして、コマンドプロンプトで imp user/pass@pdborcl file=[dmpファイルのパス] full=y log=[logファイルのパス];としてインポート処理を行う 
 必要ならばプロンプトログをリダイレクトしてテキストデータとして出力したり、
 sqlコマンドをspoolを用いてテキストデータとして出力する
 ログはlogオプションで指定した先に出力されるので上記のテキストデータ出力等々は必要でない限りは特に必要ない
 
- 
- 
3-2. インポートしたデータの確認- インポートが終了したらselect文などでデータがインポートできていることを確認し、正しくインポートができたことを確かめる
 
4. リモートからのアクセス
- 
4-1. クライアントのセットアップ- 
クライアントとして利用したMacにOracle Instant Client(12.1.0.2)を導入する。 
 Oracle公式ページ( http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html )から、instantclient-basic-macos.x64.12.1.0.2.0.zipをダウンロードする
 また、sqlplusコマンドセットであるinstantclient-sqlplus-macos.x64-12.1.0.2.0.zipも同様にダウンロードする。
 両方を解凍したのち、instantclient_12_1に展開後のディレクトリ内のファイルをまとめる
- 
まとめたものを任意のディレクトリ(今回は~/oracle/)に保存して、sqlplusコマンドにパスを通す export ORACLE_HOME=/User/[User]/oracle export SQLPATH=$ORACLE_HOME/instantclient_12_1/ export PATH="$HOME/.rbenv/bin:$PATH:$SQLPATH"を .bashrcに追記後、tnsnames.oraを~/oracle/network/admin/以下に作る
 今回はPDBORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = [ホスト名またはIP])(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = pdborcl)) )と記述 
 保存後$source ~/.bashrcで設定を反映させる。
 ターミナルからsqlplusが起動したら成功
 
- 
- 
4-2. リモートからのアクセスを行う- 
とりあえずsqlplus user/pass@pdborcl してみてDBに入れたら以下のlistener.oraの書き換えは不要です 
- 
Oracleが動作しているサーバーのlistener.oraファイルのHOSTをサーバーのホスト名に書き換え、 SID_LIST_LISTENERに(SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = C:¥app¥[Windowsユーザー名]¥product¥12.1.0¥dbhome_1) (SID_NAME = ORCL) )を追記し、サービスからリスナーのサービスを再起動する 
- 
また、1521番のポートを解放、 C:¥Windows¥System32¥drivers¥etc下のhostsファイルにホスト名とローカルIPアドレスを記述。はしておいてください
- 
設定が終了したらMacで splplus user/pass@pdborclを用いてログイン、任意のデータベース操作を行いリモートからログインできていることを確認する
 
- 
29 Oct ちょこっと追記
追記1
ストアドパッケージがimportコマンドだときっちりインポートされず、
一部はパッケージボディがINVALIDステータスを示していたり、
他にはそもそもパッケージヘッダのみ入っていてパッケージボディがないとかいうことが起きました。
その場合は、INVALIDなパッケージは再コンパイルをしてみてください。
パッケージヘッダがあるのにボディがない場合は、パッケージのソースhoge.sqlをsqlplusにコピペしてみてください。
なんかいい感じに入ります。
パッケージまたはテーブルなどに依存関係があるとインポート順序によってこういう不具合が起きるみたいです。
ステータスが改善されたらexecuteとかで実行して確認してみてください。
追記2
サーバー側のlistener.oraのHOSTはPCのホスト名にしておくとなんか繋がります。
IPアドレスだと繋がらない。localhostとかにするとそもそも外から繋がらないです
* Oracleって新規導入よりもリプレースやアップデートの案件が多いかと思います。
そしておそらく個人で好き好んで触ったり利用する人もあまりいないのかなとも。
- とりあえずメモ書きmdからuser/passとか漏らしたらいけないやつを修正して投下。いろいろこまごま知見を得たりしてて修正が必要な部分もあるのでその辺はおいおい追記したり修正したりします。