こんにちは、今日からDatabaseを扱いたいと思います。Oracle Cloud InfrastructureにはAutonomous Data Warehouse(ADW)とAutonomous Transaction Processing(ATP)があります。今回はATPを利用してみたいと思います。
私はデータベースに関する知識はほとんどありませんので(MySQL、SQLiteを過去に利用した程度)、これから学んでいきたいと思います。その入りとしてOracle ATPを触ってみます。今日は少しSQLにも触れたいと思います。
Oracle Cloud上でAutonomous Databaseを作成する
今回はATP、トランザクション処理のワークロードタイプを選択します。
トランザクション処理は「大量のランダム・データ・アクセスに重点を置く」という特徴を持つようです。名前の通り、多くの通信やトランザクションが発生する際に利用すると良いのでしょう。今回用途は決まっていないので特に関係ないです。
データベース構成の欄にAlways Freeの文字がありました。「Always Freeの構成オプションのみを表示」のチェックがあるので、チェックを入れAlways Freeの構成を行いました。Always Free構成はデータベースのバージョンが18cのみ、OCPU数が1つ、ストレージが0.02TB(20GB)そして自動スケーリングがOFFです。
Always Freeチェックを外すと、データベースのバージョンは18cと19cの選択ができ、CPUコア数、ストレージが変更でき、自動スケーリングも可能となります。
ADMINのパスワードを入力し、Autonomous Databaseの作成をクリック。すると、無事に作成されました。少し待つと状態が「使用可能」となりました。
Databaseが作成され、使用可能になると以下のようなメールが届きました。利用可能なストレージやCPUコア数も確認のため書かれています。こういう類のメールの出だしCongratulationsが地味に嬉しく感じます。
Oracle SQL DeveloperでATPに接続
データベースの作成ができたので、次はOracle SQL Developerに作成したデータベースを接続してみます。
事前にOracle Cloud側でクライアント資格証明(ウォレット)のダウンロードを行います。Oracle Databaseの詳細画面からDB接続をクリックし、ウォレットのパスワードを入力すると”Wallet_DB名.zip”がダウンロードができます。
次にOracle SQL Developerの作業に移ります。利用したバージョンは19.4.0です。データベース接続の作成からName、ユーザー名、パスワードを入力し、接続タイプからクラウド・ウォレット選択。構成ファイルの参照から先ほどダウンロードしたzipファイルを指定します。
設定した画面が以下です。サービスの欄では、tpurgent, tp, high, medium, lowの5つから選択できます。公式ドキュメントではtpが一般的なアプリケーション接続とあるので今回はtpを選択しました。入力したらテストをクリックし左下のステータスが”成功”となれば接続成功です。
接続が完了したので、少しクエリを送ってみましょう…
と言っても、私はSELECTとTRUNCATEくらいしか知りません。テストとしてこちらに紹介されているOracle バージョン/エディションの確認を行う文を書いてみましょう。
//Oracle Datbaseのバージョンとエディションを確認
SELECT * FROM v$version;
スクリプト出力で、Oracle Database 18cと出ましたね。OCIで作成したものと一致します。
SQLの学習
さて、Oracle Cloud上でAutonomous Databaseを作成し、Oracle SQL Developerに接続するところまで行いました。
今日はもう少しだけSQLを学びたいと思います。明日もSQLの記事にしようと思うので、今日は触りだけ書きます。
手元にORACLE MASTER Bronze SQL基礎Ⅰというテキストがあったので、この本に沿って学んでいこうと思います。
まずテーブルを作成し、データを入力してテキストにあるEMPLOYEESテーブルを作成したいと思います。EMPLOYEESテーブルは社員番号(empno)、名前(name)、給与(salary)、歩合給(comm)、入社日(hiredate)、上司の従業員番号(manager)、所属部門番号(dept_id)で構成されます。
CREATE TABLE employees(
empno NUMBER NOT NULL,
name VARCHAR(10) NOT NULL,
salary NUMBER NOT NULL,
comm NUMBER,
hiredate DATE NOT NULL,
manager NUMBER,
dept_id NUMBER NOT NULL
);
Table EMPLOYEESは作成されました。
こんな感じで、作成しました、歩合給と上司の従業員番号は該当しない場合があるのでNULLを受け付けます。次にテキストにあるデータを挿入していきます。
データを挿入しようとしたら下のようなエラーが出てしまいました。date型の部分で’87-11-17’とだけ入力したのですが、to_dateで年月日の指定をする必要があるのですね。
エラー・レポート -
ORA-01847: 月単位の日付は1から月末日の間で指定する必要があります
dateの箇所を修正したら、挿入できました!
INSERT INTO employees(
empno, name, salary, comm, hiredate, manager, dept_id
) VALUES(
'100','King','4500','200',to_date('17-11-87', 'YY-MM-DD'),NULL,'10'
);
1行挿入しました。
ここで一度、SELECT分を利用して挿入したデータを見てみましょう。
SELECT * FROM employees;
スクリプト出力をすると、テーブルが表示され、データの挿入を確認できました!HIREDATEは特に指定していなくても11月と”月”とはいるんですね。あれ?’YY-MM-DD’、年-月-日と書きましたが、HIREDATEは日-月-年と表示されましたね。組み合わせは正しいので良いですが。
このまま他のデータも挿入していきます。INSERT ALL INTOで複数レコードを挿入できるようです。また全カラム(列)にデータを入れる場合はカラム名を省略できるようです。
INSERT ALL
INTO employees VALUES('101','John','1800','150',to_date('89-04-07', 'YY-MM-DD'),'100','20')
INTO employees VALUES('102','David','2400',NULL,to_date('91-08-31', 'YY-MM-DD'),'100','30')
INTO employees VALUES('103','Paul','1800','120',to_date('94-06-01', 'YY-MM-DD'),'101','20')
INTO employees VALUES('104','Jones','2500','120',to_date('98-11-21', 'YY-MM-DD'),'102','30')
INTO employees VALUES('105','Steven','2500',NULL,to_date('98-07-11', 'YY-MM-DD'),'102','30')
INTO employees VALUES('106','Denver','2600',NULL,to_date('98-11-08', 'YY-MM-DD'),'101','20')
SELECT * FROM DUAL;
6行挿入しました。
無事6行挿入されました。改めてテーブルを見てみます。
全て表示されました。SELECTとINSERTはよく使うそうなので覚えておきます。MySQLと少々異なるのでこんがらがりそうですが、気をつけましょう。今日はこの辺にしておきます。
おわりに
本日はOracle CloudでOracle Autonomous Databaseを作成して、Oracle SQL Developerに接続するまで行いました。作成したデータベースを使用して、SQLをちょろっと学習しました。
Autonomous Databaseはパッチ適用、チューニングなどDB管理の自動化がすごい!と言われていますが、正直よく理解できていませんので、今後の理解を深めていきたいと思います。
明日は今日作成したデータベースを使用してSQLの学習を進めたいと思います。最後まで見ていただきありがとうございました。
*余談ですが、今朝OCIコンソール確認した際に、ヘルスダッシュボードアイコンが黄色くなっていました。Tokyoリージョン含め複数リージョンのObject Storageで何かあったみたいですね。さらっと見ただけなので記憶が曖昧ですが。
コメント