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とか漏らしたらいけないやつを修正して投下。いろいろこまごま知見を得たりしてて修正が必要な部分もあるのでその辺はおいおい追記したり修正したりします。