【DBウィーク1日目】OracleでCREATE DATABASEしてみる | 若手エンジニアのブログ

若手エンジニアのブログ

文系出身の若手女子エンジニアによる技術ブログ。
日々の経験や学びをアウトプットするためにブログを書いています。
バックエンド(Java+SpringFramework)を経てインフラエンジニアになりました。
今は育休中につき、本で勉強したことを中心にアウトプットしています。

ゴールデンウィークですね!
職場が明日もお休みなので、私は本日4月29日から7連休( *´艸`)♪

さて、私は4月、設計業務をしていたのですが、
新しいことが多すぎて頭が飽和状態でした(>_<)
特にDB…、知らないことが出てきすぎて、一度調べたこともすぐに分からなくなってしまうくらいにおなかいっぱい。。。(;´Д`)

ということで、ゴールデンウィークは、データベース・ウィークとして、
DB(主にOarcle)とSQLを毎日頑張って勉強&頭の中を整理していきたいと思います!


初日の今日は、DB勉強の準備も兼ねて、OracleでDBを作成していきます。

が、以前はGUIで作成したので、今回はCUI(SQL)での作成にチャレンジしてみますー!

もくじ

1.環境&前提

2.準備①環境変数の定義

3.準備②初期化パラメータファイルの作成

4.準備③リスナー生成とサービス登録

5.準備④SQL*Plusで接続

6.CREATE DATABASE!

 

1.環境&前提

■環境

 ・CentOS7(いつも8でやってましたが、今回は7を入れてみました)
 ・Oracle Database 19c

CentOS7に、OracleDBを作成していくのをやっていきます。

 

■前提

・Oracle Databaseのソフトウェアのインストールまでは終わっていること。
  (インストールがまだの方は以前の記事の前半を見てください。(最後DB生成までしてますが…))

・Oracle用のOSユーザを定義していること。

  (以降、全ての操作はoracleユーザにて実行します)

 

2.準備① 環境変数の定義

以下2点のため、oracleユーザのプロファイルを設定する。
 ・環境変数として、ORACLE_HOME、ORACLE_SID、ORACLE_BASEを定義する
 ・ORACLEコマンドのパスを通す

今回は、以下のような環境変数を定義した。

$ vi ~/.bash_profile
(前略)

# User specific environment and startup programs


#ここから追加
ORACLE_HOME=/opt/app/oracle/19.3/oradb
ORACLE_BASE=/opt/app/oracle
ORACLE_SID=oradb

#ここまで追加

# $ORACLE_HOME/binを追加してパスを通す
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$ORACLE_HOME/bin

umask 022

export PATH

#ここから追加
export ORACLE_HOME
export ORACLE_BASE
export ORACLE_SID

#ここまで追加

 

設定出来たら、変更を反映。

source ~/.bash_profile

 

変更を確認。

$ echo $ORACLE_HOME
/opt/app/oracle/19.3/oradb

$ echo $ORACLE_BASE
/opt/app/oracle

$ echo $ORACLE_SID
oradb

 

 

3.準備② 初期化パラメータファイルの作成

Oracle Databaseの挙動を制御するための、初期化パラメータファイルを用意する。

※パラメータは400個以上あり、ここではとても書ききれないので、公式ドキュメントをご参照ください

 

 

今回は、Oracle Databaseから特に基本とされているパラメータについて、以下のように設定し、

$ORACLE_HOME/dbs/initoradb.ora に配置した。

(初期化パラメータファイルは2種類(PFILE、SPFILE)あるが、今回はPFILEという種類で、テキストベースで作成した)

CLUSTER_DATABASE=false
COMPATIBLE='19.0.0'
CONTROL_FILES='/opt/app/oracle/oradata/oradb'
DB_BLOCK_SIZE=8192
DB_NAME='oradb'
DB_UNIQUE_NAME='oradb'
NLS_DATE_LANGUAGE='JAPANESE'
NLS_TERRITORY='JAPAN'
OPEN_CURSORS=25
REMOTE_LISTENER='ORADBNET'
REMOTE_LOGIN_PASSWORDFILE='exclusive'
SGA_TARGET=500M
SPFILE='/opt/app/oracle/19.3/oradb/dbs/spfile.ora'
SHARED_SERVERS=0
STAR_TRANSFORMATION_ENABLED=FALSE
UNDO_TABLESPACE='undo_ts'

 

4.準備③ リスナーとネーミング・メソッドの作成

リスナーは、Oracle DBにおいて、データベース(サーバ)と、クライアントの接続を担う機能となる。

また、ネーミング・メソッドの登録により、クライアントは自分が接続したいデータベース・インスタンスの情報を知ることが出来る。

 

リスナー、ネーミング・メソッドの詳細と、生成・登録の仕方の詳細は、別途記事にする予定。

今回はGUI環境でリスナーやサービスの設定を行える、Oracle Net Service Managerを利用する。

 

以下コマンドで、Oracle Net Service Managerを起動する。(※GUI環境にて実行)

netmgr

 

するとこのような画面が出てくる。

 

リスナー、サービスの設定をそれぞれ行い、保存する。

リスナー:

 

サービス:

 

保存:

 

設定保存後、$ORACLE_HOME/network/adminディレクトリ配下を確認すると、

今作成したリスナーの設定ファイル(listener.ora)と、ネーミング・メソッド設定ファイル(tnsnames.ora)ができているのが分かる。

 

$ pwd
/opt/app/oracle/19.3/oradb/network/admin


$ ll

total 12

-rw-r--r--. 1 oracle oinstall  452 Apr 29 15:34 listener.ora  ←作成された
drwxr-xr-x. 2 oracle oinstall   64 Apr 17  2019 samples
-rw-r--r--. 1 oracle oinstall 1536 Feb 13  2018 shrept.lst
-rw-r--r--. 1 oracle oinstall  328 Apr 29 15:36 tnsnames.ora  ←作成された

 

リスナーの設定ファイル(listener.ora)の中身はこんなかんじ。

$ cat listener.ora
# listener.ora Network Configuration File: /opt/app/oracle/19.3/oradb/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = oradb)
      (ORACLE_HOME = /opt/app/oracle/19.3/oradb)
      (SID_NAME = oradb)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
  )

ADR_BASE_LISTENER = /opt/app/oracle

 

ネーミング・メソッドの設定ファイルの中身。

$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /opt/app/oracle/19.3/oradb/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

ORADBNET =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORADBSERVICE)
    )
  )

 

リスナーとネーミング・メソッドの設定ファイルを作成したら、さっそく、作成したリスナーを起動する。

lsnrctl start

 

ちなみにリスナーの状態を確認したい場合は、以下のコマンドを実行すれば確認できる。

lsnrctl status

 

 

5.準備④ SQL*Plusで接続

DBをCUIで生成するには、CREATE DATABASEというSQLを発行する必要がある。
SQLを発行するため、SQL*Plusという接続ツールを使って、Oracle Databaseソフトウェアに接続する。

$ sqlplus / as SYSDBA

SQL*Plus: Release 19.0.0.0.0 - Production on Wed Apr 28 20:58:41 2021
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Connected to an idle instance.

SQL>

 


接続したら、DBインスタンスを起動する。

インスタンスは、通常、データベースにマウントして、当該データベースを操作するのだが、

今回はそもそもデータベースを作る前なのでマウント先がない。NOMOUNTオプションを付けて起動が必要となる。

SQL> STARTUP NOMOUNT
ORACLE instance started.

Total System Global Area  524285856 bytes
Fixed Size                  8898464 bytes
Variable Size             155189248 bytes
Database Buffers          356515840 bytes
Redo Buffers                3682304 bytes

 

 

6.CREATE DATABASE

いよいよSQLの実行!! CREATE DATABASEする。

データベースを作るということで、構文自体がかなり長い。
ので、事前に下書きを作っておくことをお勧めする。
※CREATE DATABASE構文で設定する項目(オプション含む)は、Oracle Databaseのドキュメントに載っている。

 

ここでは、以下のようなコマンドを実行した。

SQL>CREATE DATABASE oradb
  USER SYS IDENTIFIED BY Passw0rd
  USER SYSTEM IDENTIFIED BY Passw0rd
  MAXDATAFILES 1
  MAXINSTANCES 1
  CHARACTER SET AL32UTF8
  NATIONAL CHARACTER SET AL16UTF16
  SET DEFAULT
    SMALLFILE TABLESPACE
  LOGFILE
    GROUP 1 ('log1.log') SIZE 100M, 
    GROUP 2 ('log2.log') SIZE 100M
  MAXLOGFILES 2
  MAXLOGMEMBERS 2
  NOARCHIVELOG
  EXTENT MANAGEMENT LOCAL
  DATAFILE 'data1.dbf' SIZE 500M
  SYSAUX DATAFILE 'sysaux_data1.dbf' SIZE 500M AUTOEXTEND ON
  DEFAULT TEMPORARY TABLESPACE temp_ts
    TEMPFILE '/opt/app/oracle/oradata/oradb/temp01.dbf' SIZE 200M
  UNDO TABLESPACE undo_ts 
    DATAFILE '/opt/app/oracle/oradata/oradb/undotbs01.dbf' SIZE 200M
  SET TIME_ZONE = '+09:00';


Database created.   
←DBができた!\( 'ω')/

 

 

 

無事にできてよかった…!

明日は今日出てきた準備のうち、リスナーとサービスについてもう少し掘り下げて書きたいと思います!