オーロラさんの勉強帳

SESの客先常駐勤務。データベース、Excel、Excel VBA、ネットワーク、LinuxなどIT関連のことを主に書いていきます。

【Oracle DB】試験対策 用語集 (ORACLE DATABASE DBA Bronze 2019)

ORACLE DATABASE DBA Bronze 2019の試験対策として
用語をまとめてみました。
自分用の側面が強く、追記予定です。


目次

Oracle Database 管理ツール

名称 略称 説明
Oracle Universal Installer OUI Oracleソフトウェアのインストール、アンインストールを行う
インストールされているOracle製品の一覧表示
インストール前の前提条件のチェック
runInstaller起動
Oracle Database Configuration Assistant DBCA データベースの作成、削除およびテンプレートの管理を行う
dbcaコマンドで起動
Database Upgrade Assistant DBUA 新しいリリースへのアップグレードを行う
Oracle Net Manager NETMGR Oracleをネットワーク環境で使用するための設定を行う
Oracle Netの構成・管理ができる
Oracle Net Configuration Assistant NetCA Oracleをネットワーク環境で使用するための設定を行う
Oracle Netの構成・管理ができる
Oracle Secure Backup テーブルバックアップ管理を提供するツール
Recovery Manager RMAN データベースのバックアップ、障害発生時のメディアリカバリを行う。
Oracleソフトウェアに含まれている。
lsnrctl
(リスナー制御ユーティリティ)
ターミナル、コマンドプロンプトで使用するコマンドラインベースのツール。
リスナーの起動・停止、稼働状態、リスナーが認識しているデータベースサービスの確認ができる。

Oracle Database 管理ツール WebブラウザからGUI操作で管理

名称 略称 説明
Oracle Enterprise Manager Database Express EM Express WebブラウザからGUI操作でOracleデータベースの管理を行える

複数のOracleデータベースを統合的に管理はできない
Oracleデータベース・インスタンスの起動・停止、バックアップ・リカバリ
スキーマ(表/索引など)の管理、ジョブの管理・実行などはできない
Oracle Enterprise Manager Cloud Control Cloud Control WebブラウザからGUI操作でOracleデータベースの管理を行える

管理対象のサーバにはOracle Management Agent(管理エージェント)という
プログラムを配置する必要がある。
EM Expressでできないデータベース・インスタンスの起動停止など、ほぼすべての
Oracle Databaseの管理作業ができる。
※Oracle Netの構成、Listnerの起動等もできる。


その他管理ツール

名称 説明
SQL*Loader CSVファイルのようなOS上のファイルに記載されたデータをOracle Databaseにロードするツール。
データをろーづするには、ロード対象となるファイルと、ロードするために必要な情報を記載した制御ファイルが必要。
Oracleソフトウェアに含まれている。
Data Pump Oracle Database間でデータを移動するツール。
expdpコマンドでデータをエクスポート、impdpコマンドでデータをインポートする。
異なるOSで動作するDB間、異なるリリース(バージョン)のDB間でデータの移動が可能。
表単位、スキーマ単位、表領域単位をエクスポート・インポートできる。
データベース全体を全体エクスポートモードでエクスポートできる。
Oracleソフトウェアに含まれている
SQL*Plus ターミナルやコマンドプロンプト上で使用するコマンドラインベースのデータベース管理ツール。
直接コマンドを入力する対話モード、コマンドをファイルに記載しておきまとめて実行するバッチモードがある。
Oracleソフトウェアに含まれている。


RAC関連の用語

名称 略称 説明
Oracle Real Application Clusters RAC Oracle Real Application Clusters(RAC)は、複数インスタンスで1つのデータベースを管理する仕組みです。
RACは、複数のデータベースサーバそれぞれにインスタンスを起動し、すべてのデータベースファイルを共有ストレージ上に配置します。すべてのデータベースサーバのインスタンスがこの共有ストレージ上の1つのデータベースにアクセスします。

スケールアウト データベースを停止することなくデータベースサーバを追加し、性能を向上できる。
キャッシュフュージョン データベースバッファキャッシュにキャッシュされたブロックをデータベースサーバ間で共有し、高い性能を実現できる。
Oracle Clusterware Oracle Clusterwareとは、RAC(Oracle Real Application Clusters)の複数のデータベースサーバを連続して動作するために必要なソフトウェア。

Oracle Clusterwareは、Oracle Databaseには含まれておらず、別製品のOracle Grid Infrastructureに含まれている。
フェイルオーバー 障害発生時に待機システムに切り替えることです。
Oracle Automatic Storage Management ASM ASM(Oracle Automatic Storage Management)は、RAC使用時のクラスタファイルシステムとして利用されます。

ASMには、クラスタファイルシステム機能以外の特徴
・複数のストレージを統合し、ストレージ管理を簡素化できる
・ストライピング
・ミラーリング
Oracle Data Guard 比較的規模の大きい災害を想定した機能。
通常使用のデータベースをプライマリデータベース、遠隔地に予備用のスタンバイデータベースを作成し、プライマリデータベースを使用できない災害が発生した際に、スタンバイデータベースを使用する。


Oracleのメモリーサイズの自動調整機能



名称 略称 説明
Automatic Memory Management
(自動メモリー管理)
AMM SGAとインスタンスPGAのサイズを自動調整する機能。
※REDOログバッファは調整の対象外

自動メモリー管理(AMM)の無効化は、『MEMORY_TARGET』に何も値を設定しないか、0を設定する。
Automatic Shared MemoryManagement
(自動共有メモリー管理)
ASMM REDOログバッファ以外のSGAの各コンポーネント(共有プール、データベースバッファキャッシュなど)に割り当てるメモリーサイズを自動調整します。
自動共有メモリー管理(ASMM)では、SGA全体のメモリーサイズは『SGA_TARGET』初期化パラメータの設定値固定となります。

自動共有メモリー管理(ASMM)の無効化は、自動メモリー管理を無効化した上で、SGA_TARGETに何も値を設定しないか、0を設定する。(この状態を手動共有メモリー管理と呼ぶこともある)
自動PGAメモリー管理 インスタンスPGAがPGA_AGGREGATE_TARGET初期化パラメータの値を超えないよう、各プロセスのPGAを自動調整する機能。
自動PGAメモリー管理は、PGA全体の合計サイズがPGA_AGGREGATE_TARGETの値を超えないように、各プロセスのサイズが自動調整される。


Oracle Databaseの自己監視・診断機能




名称 略称 説明
Automatic Workload Repository
(自動ワークロードリポジトリ)
AWR AWR(自動ワークロードリポジトリ)は、Oracle Databaseの問題検出、自己チューニングを目的として、統計情報とワークロード(負荷処理)情報を自動的に収集・管理する機能。
AWRスナップショット AWRスナップショットは、AWR(自動ワークロードリポジトリ)で収集したある時点の統計情報とワークロード情報のことです。
AWRスナップショットは、ADDM(自動データベース診断モニター)やアドバイザなどの機能によってデータベースの稼働状況を分析し、改善策を提示するための基礎データとなります。
Automatic Database Diagnostic Monitor
(自動データベース診断モニター)
ADDM ADDM(自動データベース診断モニター)は、Oracle Databaseに搭載された自己診断エンジンです。
ADDMを使用すると、Oracle Databaseによってデータベース自身のパフォーマンスが診断されて問題解決法を数値化した効果とともに管理者に推奨します。

【Excel VBA 練習】VBAで計算ドリルを作成する

VBAの練習として、計算ドリルを作ってみました。

【目次】

計算ドリルの使い方の説明

以下のような計算ドリル用のExcelのシートになっています。
f:id:auroralights:20211016005102p:plain

■問題の種類選択
問題の種類選択のセルE2が「加算、減算、乗算、除算」のリストになっていて、問題の種類を選択できます。
f:id:auroralights:20211016005158p:plain

■回答開始
「回答開始」をクリックすると問題が作成されます。
メッセージボックスで「OK」を選択すると、セルH2に開始時間が入力されます。
この状態でG列に回答を入力していきます。
※「回答開始」ボタンを押すと、前回の問題、回答、正解、得点、開始時間、終了時間、かかった時間がクリアされて、新しい問題が作成されます。
※「回答開始」ボタンは四角形の図形にマクロ(calculationDrill)を登録しています。
f:id:auroralights:20211016092844p:plain

■回答終了・採点
回答が終わったら、「採点」ボタンを押します。採点ボタンを押すとセルH9:H28までに正解なら「○」、不正解なら正しい値が入力されます。
セルH29に得点が入力されます。
セルH3:H4には「採点」ボタンを押した時間と、開始時間から終了時間までの時間が入力されます。
※「採点」ボタンは四角形の図形にマクロ(calculationDrill)が登録されています。
f:id:auroralights:20211016094107p:plain

■注意点
除算の場合は割り切れない問題があります。
その場合は、小数点第2位以下を切り捨てた、小数点第1位までの値を正解とします。

■「クリア」ボタン
「クリア」ボタンは、問題、回答、得点、開始時間、終了時間、かかった時間をクリアするボタンです。
「クリア」ボタンは四角形の図形にマクロ(dataClear)というマクロが登録されています。

計算ドリルのVBAのコード

以下のようなコードを書きました。

Sub calculationDrill()
    
    Call dataClear
    
    '最終行の取得
    Dim maxCol As Long: maxCol = Cells(Rows.Count, 2).End(xlUp).Row
    
    '問題の種類、演算子の入力
    Dim strKind As String: strKind = Cells(2, 5)
    Dim strBuff As String
    
    Select Case strKind
        Case "加算"
            strBuff = "+"
        Case "減算"
            strBuff = "-"
        Case "乗算"
            strBuff = "×"
        Case "除算"
            strBuff = "÷"
    End Select
    
    '問題の種類に応じた演算子を入力
    Dim i As Long
    
    For i = 9 To maxCol
        Cells(i, 3) = Int(Rnd() * 10) + 1
        Cells(i, 4) = strBuff
        Cells(i, 5) = Int(Rnd() * 10) + 1
        Cells(i, 6) = "="
    Next i

    MsgBox "Start", vbOKOnly, "計算問題"
    Cells(2, 8) = Now()
       
End Sub


Sub pickingPoints()
    
    '終了時間、かかった時間の取得
    Cells(3, 8) = Now()
    Cells(4, 8) = Cells(3, 8) - Cells(2, 8)

    '最終行の取得
    Dim maxCol As Long: maxCol = Cells(Rows.Count, 2).End(xlUp).Row
      
    Dim i As Long
    Dim lScore As Long
    
    For i = 9 To maxCol
        Cells(i, 8) = "=" & Cells(i, 3) & Cells(i, 4) & Cells(i, 5)
        Cells(i, 8).Value = Application.WorksheetFunction.RoundDown(Cells(i, 8).Value, 1)
        
        If Cells(i, 8) = Cells(i, 7) Then
            Cells(i, 8) = "○"
            lScore = lScore + 5
        Else
            Cells(i, 8).Font.Color = RGB(255, 0, 0)
        End If
    Next i

    Cells(29, 8) = lScore
    If Cells(29, 8) < 70 Then
        Cells(29, 8).Font.Color = RGB(255, 0, 0)
        MsgBox lScore & "点です。頑張りましょう!"
    Else
        MsgBox lScore & "点です。よくできました!"
    End If

End Sub


Sub dataClear()
    Range("C9:H28").ClearContents
    Range("H2:H4").ClearContents
    Range("H29").ClearContents
    Range("H9:H29").Font.Color = RGB(0, 0, 0)
End Sub


もしよければ試してみてください。
以上、お読みいただきありがとうございました。

【Excel VBA 練習】必要な列が重複なく存在することを確認するマクロ ~動的配列の練習~

以下の記事では、静的配列を使ってデータに必要な列が重複なく存在することを確認するマクロを作成しました。
auroralights.jp
ただし、上記の記事のマクロではチェックする『必要な列』をVBAのコードに直接記載しているため、チェックする列名が変わったり、チェックする列数が増えたりする都度コードを変更する必要がありました。
今回は動的配列を使って『必要な列』を別シートから取得するようにして、コードを変更せずにチェックする列名・列数の変更に対応するマクロを作成します。



【目次】

目的

シートに必要な列が重複せずに存在するかどうかを確認できるマクロを作成することが目的です。
以下のように「data」シートと「check」シートがあり、「data」シートにはチェックするデータがあります。
「check」シートのA列には「data」シートに存在していることを確認する必須の列名を入力します。
マクロを実行すると「check」シートのA列の列名が「data」シートにあることを確認します。
f:id:auroralights:20211014002025p:plain


<データの定義>

  • dataシートには、チェックするデータが入力されている
  • checkシートのA列2行目以降にdataシートに存在するかどうかを確認する必須の列名が入力されている
  • checkシートのA列の必須列名の数は可変である

必要な列が重複せずに存在するかどうかを確認するVBAのコード

以下のようなコードを書きました。

Sub checkCol2()

    'dataシート、checkシートをオブジェクト変数に格納
    Dim wsData As Worksheet
    Dim wsCheck As Worksheet
    Set wsData = ThisWorkbook.Worksheets("data")
    Set wsCheck = ThisWorkbook.Worksheets("check")

    '配列に格納する必須列名の要素番号を取得する
    'checkシートの見出し行を除く、配列は0から始まるため、A列の最終行-2で求める
    Dim checkCol As Long
    checkCol = wsCheck.Cells(Rows.Count, 1).End(xlUp).Row - 2
    

    '動的配列の宣言と必須列名の格納
    Dim arrCheckCol() As String
    ReDim arrCheckCol(checkCol)
    
    'For文用の変数宣言
    Dim i As Long
    Dim j As Long: j = 0
    
    '配列に必須列名を格納する
    For i = 2 To wsCheck.Cells(Rows.Count, 1).End(xlUp).Row
        arrCheckCol(j) = wsCheck.Cells(i, 1)
        j = j + 1
    Next i

    'dataシートの最終列の取得
    Dim maxCol As Long: maxCol = wsData.Cells(1, Columns.Count).End(xlToLeft).Column

    'dataシートに必須列名が重複なく存在するかどうかチェック
    Dim x As Long
    Dim y As Long
    Dim z As Long
    Dim msg As String
    
    '配列の要素数だけループ
    For x = LBound(arrCheckCol) To UBound(arrCheckCol)
        'A列から最終列までループ
        For y = 1 To maxCol
            If wsData.Cells(1, y) = arrCheckCol(x) Then
                z = z + 1
            End If
        Next y
        
       '重複・存在結果を格納
        If z < 1 Then
            msg = msg & arrCheckCol(x) & "列がありません" & vbCr
        ElseIf z > 1 Then
            msg = msg & arrCheckCol(x) & "列が" & z & "列存在。重複しています" & vbCr
        Else
            msg = msg & arrCheckCol(x) & "列:OK" & vbCr
        End If
        z = 0
    Next x

    MsgBox msg
    
End Sub

考え方

■オブジェクト変数wsData、wsCheckの宣言
「wsData」、「wsCheck」にマクロを記述しているブックの「data」シート、「check」シートを格納します。

    Dim wsData As Worksheet
    Dim wsCheck As Worksheet
    Set wsData = ThisWorkbook.Worksheets("data")
    Set wsCheck = ThisWorkbook.Worksheets("check")


■配列に格納する必須列名の要素数の取得、動的配列の宣言
「check」シートのA列に必須列名が記載されています。
最初の1行は列見出しのため不要。さらに配列は0から始まるので、「check」シートの最終行数-2で配列に指定する最大要素数を取得しました。

arrCheckCol()という動的配列を宣言し、ReDimでarrCheckColの要素数を指定します。
要素数には、checkシートの最終行数-2の値を格納している変数checkColを使います。

    '配列に格納する必須列名の要素番号を取得する
    'checkシートの見出し行を除く、配列は0から始まるため、A列の最終行-2で求める
    Dim checkCol As Long
    checkCol = wsCheck.Cells(Rows.Count, 1).End(xlUp).Row - 2
    

    '動的配列の宣言と必須列名の格納
    Dim arrCheckCol() As String
    ReDim arrCheckCol(checkCol)


■配列に必須列名を格納する
配列「arrCheckCol」に「check」シートのA列2行目以降の必須列名を格納します。

    'For文用の変数宣言
    Dim i As Long
    Dim j As Long: j = 0
    
    '配列に必須列名を格納する
    For i = 2 To wsCheck.Cells(Rows.Count, 1).End(xlUp).Row
        arrCheckCol(j) = wsCheck.Cells(i, 1)
        j = j + 1
    Next i


■dataシートの最終列の取得
変数maxColに「data」シートの最終列数を格納します。

    'dataシートの最終列の取得
    Dim maxCol As Long: maxCol = wsData.Cells(1, Columns.Count).End(xlToLeft).Column


■dataシートの最終列の取得
配列に格納した必須列名の数だけ、dataシートの1行目のA列~最終列までに必須列名が重複なく存在するかどうかをチェックします。
チェックした結果を変数msgに格納します。

    'dataシートに必須列名が重複なく存在するかどうかチェック
    Dim x As Long
    Dim y As Long
    Dim z As Long
    Dim msg As String
    
    '配列の要素数だけループ
    For x = LBound(arrCheckCol) To UBound(arrCheckCol)
        'A列から最終列までループ
        For y = 1 To maxCol
            If wsData.Cells(1, y) = arrCheckCol(x) Then
                z = z + 1
            End If
        Next y
        
       '重複・存在結果を格納
        If z < 1 Then
            msg = msg & arrCheckCol(x) & "列がありません" & vbCr
        ElseIf z > 1 Then
            msg = msg & arrCheckCol(x) & "列が" & z & "列存在。重複しています" & vbCr
        Else
            msg = msg & arrCheckCol(x) & "列:OK" & vbCr
        End If
        z = 0
    Next x


■Msgboxで結果を出力
メッセージボックスで必須列名が重複なく存在するかどうかを表示します。

    MsgBox msg


以下のようなメッセージを表示します。
f:id:auroralights:20211014192355p:plain

あとがき

今回は動的配列の練習もかねて、あえて配列を使ってVBAを書きました。
よくよく考えると、わざわざ配列に調べる必須列を格納しなくても、checkシートのA列の値とdataシートの列名を照らし合わせた方がシンプルで可読性もよくなると思いました。


以上、お読みいただきありがとうございました。