イントロダクション
最近は、統計学が流行っているようです。そんなわけでちょっと勉強しました。
勉強したら、今度は実践してみたくなるのが人情。。。大量のデータを保存取り出し をするならデータベース を使用できます。そして、オラクルのデータベースが無料で使用できます。なのでオラクルのデータベースをインストールします。
今回ダウンロードするデータベースはOracle Database Express Edition (Oracle Database XE) です。
ついでなので、オラクルDBの学習もしてしまおうということになりました。
データベースとは
データベースは略して「DB(デービー)」と書きます。日本字は「ディー」と「ビー」をよく聞き違えるので、古い人(自分)は「デー」と発音します。
データベースに関して、明確に言うならば、データベースサーバー というのが正しい言い方になります。こちら のページにも記載しましたが、「サーバー」は「常駐アプリ 」のことを言います。特定のPCを指す言葉ではありません。「サーバーマシン」つまり「サーバーアプリを起動(する)しているPC」のことを「サーバー」と呼んだりしますが、正しくは「サーバーマシン」です。
同じ言葉で別なものを指すことが多いので、とても間違えやすいので、注意しましょう。
余談ですが、「サーバー(アプリケーション)」には下のように、いくつかの種類があります。
ファイルサーバー
メールサーバー
DBサーバー
ウェブサーバー
ストリーミングサーバー
などのものがあります。どれもサーバーですし、常駐アプリケーションです。これらの「サーバーアプリケーション」を動かしているPC、つまり「マシン」、は「サーバーマシン」です。
全て「サーバー」と呼ばれることがあります。注意しましょう 。
明確に言うならば、『本来は「サーバー」というのは常駐アプリケーション の事を言っていたけど、サーバーを動かすマシンも、アプリケーションもサーバー というようになった。』ということです。
Oraccle(オラクル)のデータベース
無料でダウンロード、インストールできる、オラクルのDBは「Oracle Database Express Edition (Oracle Database XE) 」という名前です。
このデータベース をインストールします。左のリンクからダウンロードページに移動できます。
ダウンロードしたら、Windowsではインストーラーでインストールできます。
リレーショナルデータベースとは
下のようなテーブル表にデータを保存・管理してSQLというプログラミング言語 でデータの取得、操作を行えるサーバーです。
ちょっと見ずらいですが、横の黄色が「行(ROW) 」で、縦の緑が「列(COLUMN) 」です。
SQLのサンプル
SQLは下のような構文を持っています。大まかにの処理があり、古い言い方かもしれませんがCRUD(クラッド) といい、以下の処理のことを言います。
Create : INSERT文を使用してデータを作成する
Read : SELECT文を使用してデータを読み取る、取得する
Update : UPDATE文を使用してデータを更新する
Delete :DELETE分を使用してデータを削除する
この4つの文が使えれば、SQLは大体使えることになります。ここから条件(WHERE句)や、並び替え(ORDER BY)や、集計のためにグループ分け(GROUP BY)などを行います。
注意点
インストールするときに、配置するフォルダや構成など、重要なところですので、インストール時には次のことを注意しましょう。
インストールするときに、パスワードを入力します。このパスワードは忘れないようにしておきましょう。
接続するときのユーザー「SYSTEM」のパスワードになります 。
オラクルのインストール先ORACLE_HOME を決めておきましょう。この場所にオラクルのインストーラーなどを配置します。
つまり、ダウンロードしたインストールファイルなどの展開先がORACLE_HOMEになる ということです。
データベースをインストール
これから、オラクルのデータベース(DB)をインストールします。注意してほしいのは、データベース=サーバー ということです。
明確に言うならば、クライアントアプリケーションなどを使わないと、中にあるデータなどを閲覧できません。
なので、クライアントアプリケーションの紹介もしておきます。
ちなみに、オラクルは「マルチテナント・アーキテクチャ」を使用しているようです。早い話が「DBを複数保持する形」をとっています。
この複数のDBを管理するDBのことを「コンテナーデータベース(CDB)」と呼びます。それに対して、通常使用するデータベースのことを「プラガブルデータベース(PDB)」と呼びます。
Sql*Plusの紹介
オラクル・データベースをインストールしたら一緒についてくるアプリケーションです。この記事では、このアプリケーションを使用します。
SqlDeveloperの紹介
データベース・サーバーにアクセスして、データを見やすいGUIで操作できる、ソフトウェアもあります。
下にこちらのページ にある内容を記載しておきます。
Oracle SQL Developerのスタートアップ。
ツールの左側にある接続ナビゲーター内の接続の上で右クリックします。
新しいデータベース接続を選択します。
次の情報を入力します:
接続名: XE
ユーザー名: 作成したユーザー、またはSYSまたはSYSTEM(まだユーザーを作成していない場合)
パスワード: ユーザーのパスワード、またはSYSおよびSYSTEMに入力したデフォルトのパスワード
ホスト名: 127.0.0.1 XEがインストールされているのと同じマシンでSQL Developerを実行している場合、これはホスト名にすぎません。
ポート: 1521
SID: XE
あと環境変数などの設定もいるようです。こちらのページを参考 にしました。
VIDEO
VIDEO
インストールの手順
ダウンロードした、インストールファイルを展開したら、そこがORACLE_HOME になります。
明確に言うならば、ORACLE_HOME を自分で決めて、そこにインストールファイルを展開します。すると、そこがORACLE_HOME になります。
どちらも極端な言い方だったかもしれません。。。
はじめの画面
上記で作成(展開)したORACLE_HOME にあるセットアップファイル(setup.exe)を「管理者として実行する」で実行します。
使用許諾
使うためには、「同意」するほかありません。。。
イストールフォルダの指定
パスワードの設定
パスワードは忘れないようにしましょう。
設定内容の確認<重要>
ここで、ORACLE_HOME とORACLE_BASE の確認ができます。
インストール完了
ここでも、重要な情報が表示されるので、忘れないようにしましょう。
内訳としては、以下の通りです。ブラウザで参照できるようです。「https」がついていないのはプログラム(Java言語やPHP言語からアクセスするのに使用するURI)です。
URI(URL)
マルチテナント・コンテナデータベース:localhost:1521
プラガブル・データベース:localhost:1521/XEPDB1
EM Express URL:https:localhost:5500/em
Javaでアクセスる場合
URIの設定が上記の場合です。デフォルトがポート番号「1521」なんでしょうね~。
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:ORCL"// 接続URI
, "ユーザー名" // ユーザー名を指定する
, "パスワード");// パスワードを指定する
接続した後に、Statmentクラス、PreparedStatementクラスを使用してSQLを実行します。
VIDEO
<thinドライバーを使用する場合>
俗に言うデータソースを使用するってことです。最近はこの「データソース」を使用する方が多いのかな?
PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
pds.setURL("jdbc:oracle:thin:@//localhost:1521/XE");
pds.setUser("<user>");
pds.setPassword("<password>");
Connection conn = pds.getConnection();
アクセスした後
Java言語では「Connectionクラス」を取得してしまえば、あとはSQLで操作ができます。
基本的には「Statmentクラス」でデータをSELECT, INSERT, UPDATE, DELETEができます。
しかし、たくさんのデータを操作したい場合は「PreparedStatement」を使用します。
VIDEO
conn.createStatement();
or
conn.conn.prepareStatement(sql);
上記の「sql」には実行するSQLをセットします。例えば下のようにSQLをセットします。
String sql = "SELECT * FROM MY_TABLE WHERE ID = ?";
PreparedStatement pstmt = conn.conn.prepareStatement(sql);
pstmt.setInt(1, 12);// IDがNUMBER型の場合
pstmt.setString(1, "0012");// IDがCHAR、VARCHAR型の場合
VIDEO
EM Expressを使う
Enterorise Manager Database Expressはブラウザでアクセスできるウェブサーバーです。なので「"https://localhost:5500/em"」にアクセスし手表示します 。
「https 」なので注意しましょう。
コンテナデータベース(CDB)にアクセス
ユーザー名:SYSTEM
パスワード:登録したパスワード
コンテナ:未入力
プラガブルデータベース(PDB)にアクセス
PDBは自動で作成してくれるようです。
ユーザー名:SYSTEM
パスワード:登録したパスワード
コンテナ:XEPDB1
SqlPlusで操作
コマンドでSqlPlusを実行してみます。
まずは、管理用のDB=CDBへアクセスします。元々いるユーザーの「SYSTEM」を使用しました。
sqlplus system/パスワード as sysdba
SQL*Plus: Release 21.0.0.0.0 - Production on 火 10月 17 16:44:21 2023
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
に接続されました。
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
「CDB$ROOT」が管理用のDBであることを示します。
そして、デフォルトであるPDB=名前は「XEPDB1」に移動します。
SQL> alter session set container = XEPDB1;
セッションが変更されました。
SQL> show con_name
CON_NAME
------------------------------
XEPDB1
テーブルの作成
前提として、PDBでの操作になります。CSBだとユーザーが作成でき内容です。
表領域の作成
「パス指定」の部分は、インストールした「ルート」にしてもよいかもしれません。
とにかくデータファイルを置くのに適した場所にするのが良いということです。
下のコードは「TESTSPACE」というテーブルスペースを作成しています。
###スペース作成
CREATE TABLESPACE TESTSPACE
DATAFILE 'パス指定\TEST.dbf' SIZE 100M
SEGMENT SPACE MANAGEMENT AUTO;
テンポラリーテーブルスペースの作成
同様に「TESTTEMP」というテンポラリーテーブルスペースを作成しています。
###テンポラリスペース作成
CREATE TEMPORARY TABLESPACE TESTTEMP
TEMPFILE 'パス指定\TESTTEMP.dbf' SIZE 100M
AUTOEXTEND ON;
ユーザーの作成
###ユーザー作成
CREATE USER ユーザー名
identified by パスワード
default tablespace TESTSPACE
temporary tablespace TESTTEMP;
パスワードの部分は「"(ダブルクォーテーション)」で囲わないとエラーになる。
権限の付与
「connect」「resource」「dba」の権限をセットしています。
###権限付与
grant connect to ユーザー名;
grant resource to ユーザー名;
grant dba to ユーザー名;
ユーザー名の確認をするのには下記のSQLを実行します。
select username from dba_users;
or
select username from user_users;
パスワードの変更方法は以下の通り、「'(シングルクォーテーション)」ではパスワードに使用可能な文字の為エラーになる。
alter user takunoji identified by "パスワード";
ユーザーが作成出来たら、テーブルを作成していきます。
県マスタテーブルの作成
テーブルの作成は、CREATE TABLE文で作成します。イメージとしては下のようなものです。
主キーとして使用するのは「県ID(数値型」です。
県ID
県名
1
北海道
2
青森
3
宮城
4
岩手
・
・
・
・
・
・
SQL> create table pref_mst (pref_id number not null, pref_name varchar(20), primary key (pref_id));
表が作成されました。
テーブルを作成したら、コミットしましょう。
commit;
これをやらないと、ログアウトしたらテーブルが残っていません。。。
SQL Developper
SQL Developperをインストールするために、オラクルのアカウントが必要です。ちなみにJava言語で作成されています。おそらくJava Swing で作られています。
SQL Developper をインストールする
如何せん、SqlDeveloperの使用方法がイマイチなのでSqlPlusを 使用しています。
SQL Developperについて
「SQL*Plus」というコマンドベースのアプリケーションをGUI(グラフィカルユーザーインターフェース)を使用して動かせるようにしたもので、「参照、作成、編集と削除」=CRUD(クラッド)操作を行うことができます。
また、MySQLと、Microsoft SQL Server、Sybase Adaptive Server、IBM DB2など特定の(Oracle以外の)サード・パーティ・データベースにもアクセス することができます。
上記にあるように、DBサーバーへアクセスするクライアントアプリケーションであるSQL Developperは、当たり前ですが、DBサーバーへアクセスする必要があります。
ドキュメントはユーザーガイド を見ながら学習します。
SQL Developperを使う
ダウンロードしたSQL Developperを起動します。ユーザーガイドはこちらのページ にあります。
DBサーバーである「Oracle Database Express Edition (Oracle Database XE)」をインストール済みであることを前提としています。
SQL Developperの起動
上記の「こちらのページ 」からZIPファイルをダウンロードしたら任意のフォルダで展開します。
すると、下のようにファイルがありますので「sqldeveloper.exe」をダブルクリックして実行します。
そして、実行すると下のような「ようこそ」画面が見れます。
DBへの接続
SQL DevelopperはDBに接続するためのクライアントアプリケーションです。これでDBに接続して、テーブル(表)を作成したり、データを登録したりします。参考にしたページはこちらのページ です。
上のボタンを押下すると下のようなダイアログが開きます。ここに下のような入力を行います。
接続情報の入力部分
DBサーバーへの接続情報
2の「DBサーバーへの接続情報」は
ユーザー名:SYSTEM
パスワード:Oracle Database XEをインストールしたときのパスワードです。
接続すると下のように、すでに作成されているテーブル(DBサーバー管理用のテーブル)を一覧できます。
VIDEO
ちょっと注意
この状態では、管理テーブルになるので操作するため、もともとの目的に使用することに使えません。
なので、下のようにユーザー追加を含めDB作成を行います。
操作するためのDB作成
引き続き、SQL Developperを起動した状態で、次はユーザー登録を行います。デフォルトでは「SYSTEM」というユーザーが使用できますが、Linuxでいうスーパーユーザーなので、通常のユーザーを作成して使用するのが良い方法なので、そのようにします。
スーパーユーザーは何でもできるので間違ってもそれが動く
通常のユーザーは権限が絞られるので、ほかに影響のある捜査はできないので安全
ユーザーロールについて
DBのユーザーを追加するのに下のようなSQLを使用します。
CREATE USER "ユーザー名" IDENTIFIED BY "パスワード"
これを実行するのが下のような操作です。
// TODO[ユーザーの追加操作動画を追加する]
ロール指定時のエラー
ユーザー登録時に、下のようなエラーメッセージが出ました。
権限のエラー
ORA-65096: 共通ユーザーまたはロール名が無効です
これは、SQL Developperを起動するときに、管理者で実行するを選択して実行すればOKです。
ORA-01935: ユーザー名またはロール名がありません。
設定のエラー
次は、こちらです。
ORA-65016: FILE_NAME_CONVERTを指定する必要があります
これは、上のように「カスタム名」を選択してやればOKでした。
操作用のDBを表示する
上記のエラーを乗り越えると、下のような画面が見れます。
PDB(プラガブルデータベース)、オラクルの使用で、DBサーバーを管理するためのDBと操作するためのDBと分けているようです。
コンテナDBとその上にのるプラガブルDBの2種類があるということです。
イメージは下のような感じです。
ORA-65024: プラガブル・データベースSTATISTICSはオープンしていません。
SP2-0382: SHOW PDBSコマンドは使用できません。
プラガブルデータベースのオープンと、SHOW PDBSコマンドの実行はロールの指定が悪かったようです。
上記のようにロールをDBAなどにしてやる必要があります。つまり、操作可能なロールを指定しないと動かせないということです。
PDB(プラガブルデータベース)を開く
DBにSYSTEMなどのユーザーでアクセスしたときには、CDBという管理ようのDBにアクセスします。
ここに自前のテーブルなどを作るのは、セキュリティ的によくないのでPDBを作成します。
<SqlDeveloperで実行するとき>
アクセスするときに、DBAのロールを付けたユーザーでログイン。
SQLワークシートを開く(ツール→SQLワークシート)
PDBが見れない状態
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 XEPDB1 READ WRITE NO
4 NEW_PDB MOUNTED
5 STATISTICS MOUNTED
6 SAMPPLE MOUNTED
PDBが見れる状態
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 XEPDB1 READ WRITE NO
4 NEW_PDB READ WRITE NO
5 STATISTICS READ WRITE NO
6 SAMPPLE READ WRITE NO
おわりに。。。
色々やってきたけど、データベースをインストールしたときに一緒にインストールした「Database Configuration Asistant」でDBのセットアップができるようです。
そのほかのエラー
操作をしていて、いろいろなエラーが出ています。忘れないように追記していきます。
でわでわ。。。