OracleDBの環境構築

イントロダクション

オラクルのデータベース(アプリケーション)を使用するのに無償で扱うことができます。細かいところはこちらに記述しました。

色々と調べてみるとOracleEnterprizeManagerがとても便利なのでそちらを使うと良いということがわかりました。

そして下の動画で学習しました。

OracleDB環境構築

まずは、コマンド名ですべてをやるととても面倒だということがあります。かといってGUIのみでやるのも大変。。。

早い話が、敵視ツールを使用するのがベストということでした。
次の作業は、SqlPlusを使用して行いました。

作成したDBの確認

インストールが終わると、初期状態で作成されるDBがあります。それが下のようなものになります。

select name from v$pdbs;

DBへ接続する

ここでいう「DB」とはPDB(プラガブルデータベース)のことです。

ユーザー作成

下のSQLを実行します。「create user XXX identified by パスワード」という形の文章です。そのあとの文章は、テーブルスペースなどのメモリ使用量とか、権限の範囲などを指定しています。細かいところはわからないので上記のチュートリアルに従います。

create user demouser identified by demouser default tablespace users quota unlimited on users;

改めてログインするのには、
下のようにコマンドを入力

connect demouser/demouser@localhost:1521/XEPDB1 as sysdba

しかし、「as sysdba」をつけないとログインができませんでした。とエラーが出ました。

Listener refused the connection with the flloing error ORA-12514 ...

調べてみるとリスナーの状態を確認するのが初手のようです。

コマンドプロンプトを開き「lsnrctl status」で確認...

色々やったけど、「sys」ユーザーでログインするのが手っ取り早いと思い下のようにログインしました。

次は、作成したユーザー(スキーマ)でログインしたいと思います。

Oracle DBを使ってみる~DBをインストール~

イントロダクション

最近は、統計学が流行っているようです。そんなわけでちょっと勉強しました。

勉強したら、今度は実践してみたくなるのが人情。。。大量のデータを保存取り出しをするならデータベースを使用できます。そして、オラクルのデータベースが無料で使用できます。なのでオラクルのデータベースをインストールします。

今回ダウンロードするデータベースはOracle Database Express Edition (Oracle Database XE)です。

ついでなので、オラクルDBの学習もしてしまおうということになりました。

データベースとは

データベースは略して「DB(デービー)」と書きます。日本字は「ディー」と「ビー」をよく聞き違えるので、古い人(自分)は「デー」と発音します。
データベースに関して、明確に言うならば、データベースサーバーというのが正しい言い方になります。こちらのページにも記載しましたが、「サーバー」は「常駐アプリ」のことを言います。特定のPCを指す言葉ではありません。「サーバーマシン」つまり「サーバーアプリを起動(する)しているPC」のことを「サーバー」と呼んだりしますが、正しくは「サーバーマシン」です。

同じ言葉で別なものを指すことが多いので、とても間違えやすいので、注意しましょう。

余談ですが、「サーバー(アプリケーション)」には下のように、いくつかの種類があります。

  1. ファイルサーバー
  2. メールサーバー
  3. DBサーバー
  4. ウェブサーバー
  5. ストリーミングサーバー

などのものがあります。どれもサーバーですし、常駐アプリケーションです。これらの「サーバーアプリケーション」を動かしている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)などを行います。

注意点

インストールするときに、配置するフォルダや構成など、重要なところですので、インストール時には次のことを注意しましょう。

  1. インストールするときに、パスワードを入力します。このパスワードは忘れないようにしておきましょう。
    接続するときのユーザー「SYSTEM」のパスワードになります
  2. オラクルのインストール先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

    あと環境変数などの設定もいるようです。こちらのページを参考にしました。


インストールの手順

ダウンロードした、インストールファイルを展開したら、そこがORACLE_HOMEになります。
明確に言うならば、ORACLE_HOMEを自分で決めて、そこにインストールファイルを展開します。すると、そこがORACLE_HOMEになります。

どちらも極端な言い方だったかもしれません。。。

はじめの画面

上記で作成(展開)したORACLE_HOMEにあるセットアップファイル(setup.exe)を「管理者として実行する」で実行します。

使用許諾

使うためには、「同意」するほかありません。。。

イストールフォルダの指定

パスワードの設定

パスワードは忘れないようにしましょう。

設定内容の確認<重要>

ここで、ORACLE_HOMEORACLE_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を実行します。

<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」を使用します。

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型の場合

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に接続して、テーブル(表)を作成したり、データを登録したりします。参考にしたページはこちらのページです。

上のボタンを押下すると下のようなダイアログが開きます。ここに下のような入力を行います。

  1. 接続情報の入力部分
  2. DBサーバーへの接続情報

2の「DBサーバーへの接続情報」は

  • ユーザー名:SYSTEM
  • パスワード:Oracle Database XEをインストールしたときのパスワードです。

接続すると下のように、すでに作成されているテーブル(DBサーバー管理用のテーブル)を一覧できます。

ちょっと注意

この状態では、管理テーブルになるので操作するため、もともとの目的に使用することに使えません。
なので、下のようにユーザー追加を含め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で実行するとき>

  1. アクセスするときに、DBAのロールを付けたユーザーでログイン。
  2. 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のセットアップができるようです。

そのほかのエラー

操作をしていて、いろいろなエラーが出ています。忘れないように追記していきます。

でわでわ。。。