超初心者でもできる) Oracle DB 23ai をインストール

# はじめに

今回は2024年5月に利用可能となった23ai Free版を使ってAI Vector Searchを試すうえで、DBのインストールが必要なので必要操作をまとめています。
Oracle DBのインストールやベクトル検索をやったことがない方でもご安心ください！
PythonやLangChainなどは使用していないので、私のような新人SEでも試すことができました涙

本記事では以下について触れています。

- Oracle Database 23ai Free版インストール手順

Oracle Database 23ai Free版の概要については以下をご覧ください。
https://www.oracle.com/jp/database/free/
Oracle Database 23ai - AI Vector Searchの特徴は以下の通りです。
- 生成AIで必要となる、ベクトル検索に対応
- ユーザーの問い合わせ文や、画像、音声などを「意味」や「特徴」で検索
- 1つのデータベースにベクトルデータとビジネスデータを格納
- データベース内でテキスト抽出、ベクトル化。テキスト分割が可能
- クラウドとオンプレミスで提供予定
https://blogs.oracle.com/oracle4engineer/post/ja-general-availability-of-ai-vector-search-in-23ai

# 前提条件
Oracle Database 23ai Freeをインストールする仮想マシンインスタンスにSSH接続できること
※本検証ではOracle Linux 8を使用しています。

# Oracle DB 23ai Free版インストール

まずはrootユーザーでログイン
```
sudo -s 
```

RPM(Oracle Linux版)ベースでインストールしていきます。
```
dnf -y install oracle-database-preinstall-23ai
```
```
wget https://download.oracle.com/otn-pub/otn_software/db-free/oracle-database-free-23ai-1.0-1.el8.x86_64.rpm
```
RPMベースでインストールするメリット：Oracleデータベースをインストールする前の作業を自動化するRPMパッケージです。事前作業の多くを自動化できるので、より簡単・確実にインストールできるようになります。
具体的には以下の作業↓
- インストール前のチェック
- DBソフトウェアの抽出
- Oracle Databaseソフトウェアの構成に必要なすべてのroot操作の実行
- シングルインスタンスのOracle Databaseの作成および構成
などを自動化してくれます！マジ助かる！

それではOracle DBソフトウェアをダウンロードしていきましょう！
```
dnf -y install oracle-database-free-23ai-1.0-1.el8.x86_64.rpm
```
なんと数行でOracle Databaseのインストールが完了しました！

# Oracle Databaseの作成と構成
続いて、構成スクリプトを実行してデータベースを構築していきましょう。
こちらの構成スクリプトを実行すると
- プラガブル・データベース（FREEPDB1）を1つ持つコンテナ・データベース（FREE）を作成
- デフォルトのポート（1521）でリスナーを構成
がされます。
```
/etc/init.d/oracle-free-23ai configure
```
この後にSYS、SYSTEM、PDBADMIN管理ユーザーのパスワードの設定を求められます。
- Oracleではパスワードは少なくとも8文字以上で、少なくとも1つの大文字、1つの小文字、1桁の数字[0-9]を含むことを推奨している、らしい。
- 例）Welcome123#
:::note info
余談）ちなみに私は設定したパスワードを見事失念してこのあとのログインができなくなりました。
```
/etc/init.d/oracle-free-23ai delete
```
から構成ファイルを削除してもう一度上記のconfigureコマンドで作り直しております涙
ご参考までに・・・
:::

さすがに環境変数は自動で設定されないので、Oracleユーザーに切り替え設定していきます。
```
sudo su - oracle
```
環境変数の設定
```
export ORACLE_SID=FREE
export ORAENV_ASK=NO
```
（↑Free版はこうらしい）
```
. /opt/oracle/product/23ai/dbhomeFree/bin/oraenv
```
# Oracle Database 23ai Freeに接続
```
sqlplus sys@localhost:1521/freepdb1 as sysdba
```
先ほど設定したパスワードを入力（画面には表示されません）

SQLPlusに接続出来たら、下記は特に何も考えず作成していきます。

表領域の作成
```
Create bigfile tablespace tbs2 Datafile 'bigtbs_f2.dbf' SIZE 1G AUTOEXTEND ON next 32m maxsize unlimited extent management local segment space management auto;
```
UNDO表領域の作成
```
CREATE UNDO TABLESPACE undots2 DATAFILE 'undotbs_2a.dbf' SIZE 1G AUTOEXTEND ON RETENTION GUARANTEE;
```
一時表領域の作成
```
CREATE UNDO TABLESPACE undots2 DATAFILE 'undotbs_2a.dbf' SIZE 1G AUTOEXTEND ON RETENTION GUARANTEE;
```
Vector Search用のユーザーである、Vectorさんを作成します。
```
create user vector identified by vector default tablespace tbs2 quota unlimited on tbs2;
```
Vectorさんに開発者用のロールも付与してあげます。
```
grant DB_DEVELOPER_ROLE to vector;
```

諸々の設定が終了したので、exitでOSに戻ります。

freepdb1という名前で接続できるよう、tnsnames.oraファイルにサービス名を追加します。
```
vi $ORACLE_HOME/network/admin/tnsnames.ora
```
Vim基本コマンド
- i：文字を挿入
- qa!で保存して終了

サービスFREEのエントリをコピーして、赤枠のSERVICE_NAMEをfreepdb1に修正します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763355/bc6f0f8a-ad2e-8be5-fcfa-9d810760376a.png)

すると、作成したVectorユーザーでfreepdb1に接続できるようになりました！
```
sqlplus vector/vector@freepdb1
```
イメージとしてはこんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763355/0ef12597-1002-eaa3-c919-4bfc1fe48610.png)

次回はいよいよVMにPDFファイルをインポートしてチャンク分割、ベクトル化してみます！
おたのしみに！