2016年02月07日

SQLServer の .dacpac と .bacpac の使い分け

SQLServer を使っていると、DAC (データ層アプリケーション)という用語が出てきます。あまり意識したことはないのですが、要するに、テーブルや、ビューなど、データベースに関連づけられたデータ以外の論理的な仕組みのことだと思います。DAC という用語を使う場合は、テーブル内のデータであるレコードは含まないようで、DAC をファイルに出力した .dacpac を見ても、レコードは入っておらず、空のテーブル構造が保存されるだけでした。

実際のデータ、レコードも保存したければ、.bacpac という拡張子のファイルにエクスポートする必要があります。

Azure SQL と、ローカルの SQLServer の間では、.bacpac ファイルによってやり取りが可能です。その場合、直接 AzureSQL に接続しても、大きなファイルの場合は転送中に失敗することがあるので、一度、ストレージを経由した方が安心して作業を進められます。

posted by 開発G at 17:46| Comment(0) | TrackBack(0) | SQL

2016年01月26日

SQLServer フェイルオーバクラスタ作成手順

SQLServer でフェイルオーバクラスタを作成する場合は、次のステップで実現します。

  • まず、2つ以上の Window Server マシン(ノードと呼ぶ)からなる クラスタを作ります。クラスタを作成するには、ActiveDirectory が必要です。
    そのうち1つ以上をアクティブとし、残りをスタンバイとする N+1 型を考えます。
    アクティブノードからの HeartBeat がなくなったら、自動的に、スタンバイ機に切り替わるような環境を、Hyper-V や、VMWare 等で作っておきます。

  • クラスタ全体に割り当てた仮想IP,ネットワーク名で参照するようにすれば、クラスタ内でアクティブサーバが変わっても、
    同じ名前で参照し続けられます。もちろん、各ノードには、それぞれ固有のIPアドレス、ネットワーク名が存在するわけですが、それらはメンテナンス時以外は使わないようにします。

  • アクティブ、スタンバイ、それぞれに SQLServer をインストールし、それらのSQLServer が共有できる 共有 DISK を用意します。
    共有 DISK の代わりにフォルダをマウントする機能も使うこともできます。
    共有DISK の冗長構成は別課題になるので、RAID や、バックアップ戦略を別途考える必要があります。

  • 共有ディスク上には、各データベースファイルと、トランザクションログを配置します。これで、ノードが切り替わったときでも、同じデータベースを動かし続けることができます。
    temp などの同期をとる必要のないデータについては、各ノードに配置することも可能です。


SQLServer の高可用性には、ここで示したフォールト・トレラントの他にも、ログ配布、ミラーリングと呼ばれる手法があります。
posted by 開発G at 08:02| Comment(0) | TrackBack(0) | SQL

2015年12月22日

AzureSQL V12 の BACPAC が SQLServer Management Studio へインポートできない場合

AzureSQL がいつの間にか V12 になっていて、自動バックアップされている BACPAC ファイルが
SQLServer Management Studio にインポートする際に、エラーが出て取り込めなくなっていました。
いろいろ調べてみると、パソコン側の SQLServer データ層アプリケーションフレームワークというのをアップデイトする必要があるようです。データ層アプリケーションは、時々アップデイトされているようなのですが、自動アップデイトには入っていないみたいで、手動でアップデイトする必要があるようです。

ダウンロードしようと思ったら、いろいろなバージョンがありましたが、SQLServer データ層アプリケーションフレームワーク(2015年2月バージョン) をインストールしたら解決しました。
posted by 開発G at 10:09| Comment(0) | TrackBack(0) | SQL

2014年01月30日

SQL サンプル: テーブルへの項目値の設定


マスタから商品のコード番号により名前を取り出して、別のテーブルにその名前を埋め込みたい場合があるとします。

UPDATE TableA SET TableA.Name = MasterTable.Name FROM MasterTable
WHERE (TableA.Code=MasterTable.Code)

後で、テーブル項目を変更するなどして、新たなテーブルを作る過程で使えます。


posted by 開発G at 21:08| Comment(0) | TrackBack(0) | SQL