IT業界で仕事をしている技術者でデータベースエンジニアに興味がある人もいるでしょう。
また、データベースエンジニアにキャリアチェンジしたい人や、未経験でデータベース技術者へ挑戦してみたい人もいると思います。
しかし、データベースエンジニアというのは非常に狭い領域で、サーバエンジニアやネットワークエンジニアほどチャレンジがしやすい領域でなかったりします。
少し敷居が高く感じるのがデータベースです。
データベース自体が苦手な人もいれば、データベースに怖さを感じる人もいます。
確かにデータベースは言ってしまえばアプリケーションよりも重要で、データベースでの作業ミスはシステム影響や損害に直結しやすいです。
しかしデータベースのないシステムもまた少ないのでデータベースを扱えるのは大きなメリットです。
データベースはミドルウェアなので、アプリ寄りの仕事もインフラ寄りの仕事も出来ます。
また、中間層だからこそ両方の知識も身に着きます。
そこで今回は独学でデータベースエンジニアになるための勉強方法について個人的な価値観で紹介したいと思います。
独学でデータベースエンジニアになるには
まずは出来そうな製品から学ぶ
データベースに関して知識がゼロであれば、一番有名な「Oracle DB」を推奨します。
このサイトでもOracleに関する技術的な検証を載せていたりしますが、データベース業界で最も有名な製品です。
しかし、Oracle DBよりも出来そうなデータベース製品があればそちらから入る方が勉強がしやすいと思います。
- Windows環境が良いならSQL Server
- AIXの知識があるならDB2
- OSSに興味があるならPostgres
- 全く知識がないならOracle
このような考え方が良いと思います。
なぜOracleを推奨するかは、覚える知識が多いのでデータベースというものの扱い方が多岐に渡って身に着くからです。
SQL Serverは最新の2017からLinuxでも使えるようになりましたが、Linux版は機能面に制約が多いので、使うなら従来通り親和性の高いWindows環境が良いでしょう。
また、OracleもWindowsで動作可能ですがプライオリティの高い案件ではLinuxと組み合わせる方が多いので、同時にLinuxの知識も身につけていく方が良いです。
SQLを書けるようにする
データベースを担当する立場としては、データベースそのものを管理するDBAがメインですが、業務系アプリケーションで使用するSQL文も書けないと仕事になりません。
もちろん、システム関連情報を取得するのにもSQLの知識が必要です。
なのでSQLの知識なしにデータベースを扱う事は不可能です。
厳密に言えば、NoSQLのように直接データを参照できるRDB以外の製品はSQLが不要です。
しかし、今回はRDBを前提として話を進めていきたいと思います。
SQLに関しては基本的な「SELECT」「UPDATE」「INSERT」「DELETE」を覚えれば最低限は操作が出来ます。
追加で言えば以下を使いこなせると便利、というよりは業務で現実的に力を発揮する事が出来ます。
- count
- distinct
- order by
- group by
- inner join
- having
さらにテクニックになりますが以下を覚えるとよりDBAや業務アプリのSQLも理解できるようになります。
- 副問い合わせ
- カラムの文字数調整
- バインド変数
- インデックスの明示
- パラレル実行
データベースによってお作法が違う部分もあるので、製品ごとにやり方を覚える必要があります。
また、SQLを書くうえでSQL ServerのようにnvarcharをN文字としてSELECT時に明示しないといけないなどもあります。
細かい仕様の違いで戸惑う事もあるのがデータベースです。
どの技術も手を動かすのが一番
机上の学習で知識が身についても実際に知識を使って業務で発揮できるか分かりません。
なので検証環境を用意して実際にインストールからデータベースの作成とSQLによる操作をすることが大切です。
特にDBAを目指すならバックアップ・リカバリの知識は最も重要です。
データベースには顧客情報や社員情報などセキュリティレベルの高い情報が格納されることが多いです。
そのデータに不整合があった場合などを想定して「いつまでデータベースを戻せるか」を必ず定義します。
ただし、あまり重要ではないシステムではそこまで定義せずに単純にバックアップだけを取る事もあります。
データベースのバックアップ方法は多岐に渡るので少なくともデータベース製品単体でのバックアップ・リカバリはやってみると良いでしょう。
SAN Bootしているシステムではストレージ側でバックアップを取る事もあり、必ずしもデータベースでバックアップを取るわけではありませんがまず最初に重要な知識はバックアップです。
データベース固有の知識を抑える
データベース技術者として仕事をした経験からですが、データベースの領域はインフラやアプリと同じ言葉があっても定義が全く違う事も多いです。
なので、データベース固有の知識を身につけることが大切だと言えます。
また製品ごとでも呼び方が違ったりしますので、その辺も何を学ぶかで知識が変わってきます。
基本的なデータベース固有の知識は以下になります。
- 実行計画
- ロック動作(行や表やデッドロックなど多岐にわたる)
- データベースインスタンスとデータベースの関係(製品によって異なります)
- フェッチやカーソル
一部はアプリケーションを開発上では、固有の動作として把握しておかないとトラブルの原因になります。
上記はあくまでも一部なので他に覚えることは多いです。
効いたとこがないフレーズも多いデータベース製品ですが慣れればどんどんロジックが分かっていくと思います。
最後に
独学でデータベースエンジニアになるための勉強について紹介しました。
データベース製品は多機能が多いのですべてを理解しようとするとかなり難易度が高いです。
それこそOracleの機能に関しては、全て把握できている人はいないでしょう。
当たり前の内容を書いてきましたが、データベースエンジニアになる、キャリアチェンジするには最低限以下を取得しましょう。
- SQLでデータ加工・抽出が出来る
- データベース固有の特徴を把握する
この二つが出来れば最低限やっていけると思います。
データベース固有の特徴については、SQL Serverではトランザクションログの肥大化やロックエスカレーションに注意したり、Oracle DBであれば読み取り一貫性のためのUNDO肥大化や初期化パラメータなど様々です。
とりあえずは興味のある製品かなじみのある環境から触れていくと良いでしょう。