Windows10にOracle12c インストール、DB作成、ユーザ作成、接続までの手順

# 概要
Oracle12cをインストールして、DB作成してSQLPLUSで接続するまでの手順を記載します。

# 環境
- OS: Windows10 Professional 64bit
- Oracle: 12c(12.2.0.1.0)

# DB構成
ここでは下記のとおり２つのPDB構成を作成します。
※PDBとは？→http://qiita.com/AkihikoOgata/items/fdb83a1577bbf8a74cde

|ホスト|ポート|CDB|PDB|SID|
|:--|:--|:--|:--|:--|
|ローカル|1521|orcl|pdb1|SRV_PDB1|
|ローカル|1521|orcl|pdb2|SRV_PDB2|

# 手順
## ①インストール
こちら↓の資料を参考に「4.3.1 Oracle EM Express の稼働確認」まで進めます。
http://www.oracle.com/technetwork/jp/database/enterprise-edition/documentation/db12-1-0-2-install-guide-winx64-2323059-ja.pdf

注意点としては、「dbca.bat」を実行する際は管理者権限（右クリックして「管理者として実行」）で実行してください。管理者権限で実行しないとリスナー起動に失敗します。

## ②設定変更
SIDで接続可能にするために設定を追加します。
### listener.oraの変更
「*ORACLE_HOME*\network\admin\listener.ora」ファイルに
`USE_SID_AS_SERVICE_LISTENER = ON`
を追加します。

```listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = [任意のパス])
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:[任意のパス]\bin\oraclr12.dll")
    )
  )

USE_SID_AS_SERVICE_LISTENER = ON
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = [任意のホスト])(PORT = 1521))
    )
  )
```

### sqlnet.oraの変更
「*ORACLE_HOME*\network\admin\sqlnet.ora」ファイルに
`SQLNET.ALLOWED_LOGON_VERSION=8`
を追加します。

```sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
SQLNET.ALLOWED_LOGON_VERSION=8
```

### tnsnames.oraの変更
「*ORACLE_HOME*\network\admin\tnsnames.ora」ファイルに以下を追加します。
※SID接続名は「SRV_PDB1」と「SRV_PDB2」にしています。

```tnsnames.ora
SRV_PDB1=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = [任意のホスト])(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = [任意のPDB名])
    )
  )

SRV_PDB2=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = [任意のホスト名])(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = [任意のPDB名])
    )
  )
```

### リスナーの再起動
コマンドプロンプト（管理者権限で実行）にて、以下コマンドを実行します。

```
lsnrctl stop
lsnrctl start
```

## ③PDBオープン、オープン状態保持設定
コマンドプロンプトにて、以下コマンドを実行しSQL Plusを実行します。

```
sqlplus sys/[パスワード] as sysdba
```

SQL Plusにて以下コマンドを実行しPDBが「READ WRITE」であることを確認します。

```
ALTER PLUGGABLE DATABASE ALL OPEN;
ALTER PLUGGABLE DATABASE ALL SAVE STATE;
ALTER SESSION SET CONTAINER=[任意のPDB名];
SHOW CON_NAME;
select name, open_mode from v$pdbs;
```

※PDB名が「pdb1」の場合の例↓
![無題.png](https://qiita-image-store.s3.amazonaws.com/0/75324/2bbfd227-fe02-0a3f-77b6-f12f92f60688.png)

## ④ユーザ作成
PDBにユーザを作成します。コマンドプロンプトにて、以下コマンドを実行しSQLPLUSを起動します。

```
sqlplus / as sysdba
```

SQL Plusにて以下コマンドを実行しユーザを作成します。
ユーザを作成するPDBにセッションをセット

```
ALTER SESSION SET CONTAINER = [任意のPDB名];
SHOW CON_NAME
```

ユーザを作成

```
CREATE USER [任意のユーザ名] IDENTIFIED BY [任意のユーザパスワード];
```

ユーザ権限を付与

```
GRANT CONNECT , RESOURCE TO [任意のユーザ名];
```

※「pdb1」に「hoge」ユーザを「hoge_pwd」パスワードで作成した場合の例↓
![無題2.png](https://qiita-image-store.s3.amazonaws.com/0/75324/e5d23687-d85d-8eab-9b3c-a8684abd6795.png)

## ⑤接続確認
コマンドプロンプトにて、以下コマンドを実行しSQLPLUSで接続できることを確認します。

```
sqlplus [任意のユーザ名]/[任意のユーザパスワード]@[任意のSID]
```

※「SRV_PDB1」のSIDに「hoge」ユーザで接続した場合の例↓
![無題3.png](https://qiita-image-store.s3.amazonaws.com/0/75324/8127c935-f862-2328-4124-ddebccc7010b.png)

## ORA-01950が発生したら・・・
```alter user hoge quota unlimited on USERS;```


# おまけ
「A5:SQL Mk-2」ツールで接続する場合は以下の通りです。
※参照：http://a5m2.mmatsubara.com/

## OCI経由
![無題4.png](https://qiita-image-store.s3.amazonaws.com/0/75324/2b419d51-4d49-8872-a13e-b903af3c715a.png)

## 直接接続
![無題5.png](https://qiita-image-store.s3.amazonaws.com/0/75324/23a6cf76-485e-a3be-984a-efda6e72bdbf.png)


以上です。