oracle XEのセットアップ

## 内容

oracle xeのインストールとインストール後のセットアップ、外部接続設定について記載しました。

今後の自己学習用にとりあえず上記内容のみまとめました。
外部接続の設定は自己学習するだけなら多分不要な設定だと思いますが、
複数個所から接続できるならそれを活かしてなんかしたいなと思ったので設定しています。

## oracle XEのインストール

1. 下記サイトから自分のOSにあったファイルをダウンロードします。
[oracle XE インストール](
https://www.oracle.com/jp/database/technologies/appdev/xe.html
)
1. ファイルを展開し、setup.exe(windowsの場合)を実行します。
1. 基本的に次へボタンを押していればOKです。
※インストール先とDBのパスワードは任意のものを設定します。

## インストール後のセットアップ手順

コマンドプロンプトを開き下記でDBに接続します。
as sysdba は管理者でログインするために必要で
ほかのやり方でも管理者ログインできますが下記のほうが手順的に早いです。
> sqlplus sys/パスワード as sysdba

XEPDB1 という PDB が作成されているので下記で接続先を変更します。
> alter session set container = XEPDB1;

下記で表領域の作成をします。
表領域とはテーブルを格納している物理的な場所のことでファイル拡張子は.dbfです。
segment space management auto;はDB を自動で効率化してくれる設定です。
> SQL> create tablespace testspace
> 2 datafile 'C:\app\user\product\21c\oradata\XE\test.dbf' size 100m
> 3 segment space management auto;
> 
> 表領域が作成されました。

下記で一時表領域の作成をします。(ソートを行うための領域)
autoextend on;はスペース不足になったときに自動でサイズを増加する設定です。
> SQL> create temporary tablespace testtemp
> 2 tempfile 'C:\app\user\product\21c\oradata\XE\testtemp.dbf' size 100m
> 3 autoextend on;
> 
> 表領域が作成されました。

下記でユーザの作成をします。
> SQL> create user ユーザID
> 2 identified by パスワード
> 3 default tablespace testspace
> 4 temporary tablespace testtemp;
> 
> ユーザーが作成されました。

下記でユーザに権限を付与します。
> alter session set container = XEPDB1;
> grant connect to ユーザID;
> grant resource to ユーザID;
> grant dba to ユーザID;

下記で作成したユーザで再接続します。
> sqlplus ユーザID/パスワード@//localhost:1521/xepdb1

## 外部接続設定

Windows Defender ファイアウォールを開き、詳細設定を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604560/08d45396-985c-3c1a-bd73-5756a172ee66.png)

受信の規則を押下すると、新しい規則が表示されるので押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604560/06100f8a-e48b-df26-bfba-7343612aa4a3.png)

新規の受信の規則ウィザードが表示されるので下記設定をします。
規則の種類：ポート
プロトコルおよびポート：TCP, 1521
操作：接続を許可する
プロファイル：すべて
名前：任意

コマンドプロンプトで下記を実行します。
DBに接続している場合はexitで切断してください。
> ipconfig

実行結果のIPv4 アドレス項目にIPアドレスが表示されるのでメモします。

別PCで接続確認をします。
a5m2(DB接続できるものなら何でもいいです)で下記の接続情報を入力したら完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604560/6fb66d12-b8d1-7133-d781-b5341d402dd7.png)

## 追記
別PC(oracle xeインストール済み)でsqlplusによる接続をしようとしたらエラーになりました。
> ORA-12638: 資格証明の取出しに失敗しました。

上記エラーについては下記ファイルを開きます。
C:\app\user\product\21c\homes\OraDB21Home1\network\admin\sqlnet.ora

下記行の先頭に#を付けてコメントにし、再度sqlplusを実行すると接続できました。
> SQLNET.AUTHENTICATION_SERVICES= (NTS)

ついでにsqlplusで接続するときに毎回IPアドレス入力するのは大変なので
sqlnet.oraと同階層にあるtnsnames.oraに下記を追加します。

``` tnsnames.ora
任意の名前 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = IPアドレス)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = xepdb1)
    )
  )
```
上記を設定すると以降は下記で接続できるようになります。
> sqlplus ユーザ名/パスワード@任意の名前


## 参考記事
[oracle XE インストール](
https://www.oracle.com/jp/database/technologies/appdev/xe.html
)
[インストール後のセットアップ手順](
https://www.fenet.jp/infla/column/technology/oracledatabase%E3%81%A8%E3%81%AF%EF%BC%9F%E7%84%A1%E6%96%99%E3%81%A7%E5%B0%8E%E5%85%A5%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%8B%E3%82%89%E3%80%81%E8%A1%A8%E9%A0%98%E5%9F%9F%E3%81%AE%E4%BD%9C/
)
[PDB/CDBについて](
https://xn--w8j8bac3czf5bl7e.com/2018/06/07/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%86%E3%83%8A%E3%83%B3%E3%83%88%E3%81%A8%E3%81%AF/#:~:text=%E3%80%8C%20%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%921,%E3%81%A7%E3%81%8D%E3%82%8B%20%E3%80%8D%20%E3%81%A8%E3%81%84%E3%81%A3%E3%81%9F%E6%A9%9F%E8%83%BD%E3%81%A8%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82&text=%E3%80%8C%20%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E4%B8%AD%E3%81%AB%E3%80%81%E5%AD%90,%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%20%E3%80%8D%20%E6%A9%9F%E8%83%BD%E3%81%A7%E3%81%99%E3%80%82
)