一括操作
SQL Serverにはさまざまな機能があるが、今回は一括操作について整理してみる。
【一括操作コマンド】
・bcpコマンド : テーブルデータとテキストファイル間のインポート、エクスポート
bcp テーブル名 out テキストファイルパス -T -t; -c
bcp "SELECT文" queryout テキストファイルパス -T -t; -c
bcp テーブル名 in テキストファイルパス -T -t; -c
・BULK INSERT : bcpコマンドと同様(エクスポートはできない)
BULK INSERT テーブル名 FROM テキストファイルパス WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n',)
・SELECT INTO : 検索結果をそのままテーブルへ書き込む。(テーブルがなければ作成する)
SELECT INTO テーブル名 FROM 元テーブル名 WHERE 条件句
簡単なようでいざというときに覚えていなさそうな気がする。
SQL Server 2005の冗長化構成(その2)
前回に引き続き、SQL Server 2005の冗長化構成を整理する。
3.ミラーリング
・プリンシパル(本番)サーバからミラー(待機)サーバへコピーされる。
・SP1からの実装
・ミラー(待機)サーバは1台のみ
・監視サーバを構成すれば、自動フェールオーバーが行われる。
A.同期型:2フェーズコミットにより完全一致を保証する。
B.非同期型:パフォーマンス優先、自動フェールオーバーしない。
※ミラーリングを構成するためには、
データベースの復旧モデルを「完全」、互換性レベルを「90」に設定する必要がある。
SQL Server 2005の冗長化構成
SQL Server 2005では、多くの冗長化構成がある。
ややこしいので整理してみようと思う。
1.レプリケーション
2.ログ配布
3.ミラーリング
1.レプリケーション
・複数のサーバ間でデータをコピーする。
・厳密には冗長化ではなく、負荷分散である。
例えば、分析用途では複製されたデータを参照するなど。
・コピー元サーバ(パブリッシャ:出版社)から、
コピー先サーバ(サブスクライバ:購読者)へ、
必要なデータ(パブリケーション:出版物)を配布する。
※パブリケーション = アーティクル:記事の集合
・レプリケーションの種類
A.スナップショットレプリケーション:ある時点のデータの一括コピー
B.トランザクションレプリケーション:定期的にトランザクションログで同期を取る。
C.マージレプリケーション:サブスクライバ側で更新された内容も反映される。(競合の可能性あり)
2.ログ配布
・プライマリ(本番)サーバーのトランザクションログを、定期的にセカンダリ(待機)サーバに配布する。
・セカンダリサーバでトランザクションログを復元する。
・複数のセカンダリサーバを設定できる。
・監視機能はあるが、自動フェールオーバーは行われないので、
待機サーバを手動でプライマリサーバに昇格させる必要がある。
ミラーリング以降はまた次回。
Service Broker
Service Broker:
分散環境で非同期のメッセージベースのストアドプロシージャを呼び出す。
メッセージの型を作成してみる。
ちなみにTransactSQLでしか作成できないらしい。(ツールなし)
--メッセージタイプの定義
CREATE MESSAGE TYPE
--コントラクトの定義
CREATE CONTRACT
--キューの作成
CREATE QUEUE
--サービスの定義
CREATE SERVICE
ちょっと難しい。
名前を指定して実行(その1)
Windowsにはいろいろな管理ツールがあるが、起動するのが面倒くさい。
この際だからショートカットを覚えていこう。
【名前を指定して実行】
Windowsキー + R
【リモートデスクトップ】
mstsc
【IIS】
inetmgr
【サービス】
services.msc
PC交替
メインPCを交換していたらすっかりご無沙汰していた。
新PCはAthlon3000+と新統合チップGeForce6100搭載のGA-K8N51GMF-9だ。
どの程度のパフォーマンスを示すかは、まだこれからだ。
セレロン2Gからの乗り換えなので、体感的にも違うはずだが・・・。
PocketPCでインターネット2
我が家の眠れるrx3715君が暗号化状態でようやく無線LAN接続に成功!!!
1.WPA-PSK+TKIPで設定
→失敗(本当にサポートしているのか?)
2.再びWEPに戻して、暗号化キーを数字26桁をやめて文字13桁に変更
→成功!
あんまし、原因はよく分からなかった。(あまり参考にならないな)
ルータ側(WHR2-G54)の問題なのだろうか?
ま、とりあえず目標達成ということで、バンザーイ!!
これからはやっと活躍してもらえそうだ。
(布団の中でインターネット、トイレでメールを読むなど・・・まあたいした活躍ではない)
PocketPCでインターネット
長い間はまっていたPocketPCでのインターネット接続がようやくかなった。
皆が簡単に接続できるという中、長い道のりだった。
愛機iPaqのrx3715は情報が少ないのだ。
1.まず家庭の無線LANに接続できない。
散々設定をいじった結果、これはハードリセットをすることで解決した。
2.無線LANに接続できたが、インターネットが見れない。
結局のところ暗号化を使っているとうまく動かない。
WEPを解除することですんなり接続できた。
ノートPCからは問題なくつながるのに、WEP対応が完全ではないということか。
そんなわけで半年ほど放置していた問題がようやく前進したわけで、気持ちよく眠れそうだ。
とはいえ、暗号化なしで動かすわけにもいかないので、さらに奮闘が必要である。
無線LANルータとの相性悪い・・・のかなあ?
データグリッドに出力
データベースとテーブルを作成できたので、
今回はDataGridにデータを出力する。
なんでも通常の.NETとは少し使い方が違うらしい。
SqlCeConnection→SqlCeDataAdapter→DataSetの順に生成して、
DataGridにBINDする。
意外と面倒くさいけど、動いたからよしとするか・・・。
-------------------------------------------------------------------------------------------
DataSet sqlDS;
String myConnectionString = "Data Source = \\My
Documents\\test.sdf;";
SqlCeConnection sqlConn = new SqlCeConnection(myConnectionString);
//SqlCeConnection sqlConn の People という名前のデータベースからすべてを選択します
SqlCeDataAdapter sqlDA = new SqlCeDataAdapter("SELECT * FROM BuyList", sqlConn);
sqlDS = new DataSet("dataset");
//DataSet sqlDS 内に DataTable People を格納します
sqlDA.Fill(sqlDS, "BuyList");
//DataSource を DataSetの People テーブルとして設定します
GrdList.DataSource = sqlDS.Tables["BuyList"];
return;
-------------------------------------------------------------------------------------------
次回は画面を作ってみる予定。
DateTimePicker(日付入力)はCEにはないらしい。なじぇ?
・2005では標準になる。
・2003ではカスタムコントロールを使うとのこと。
PDAアプリ開発開始
お盆休みでようやく時間が取れたので、
延び延びになっていたPocketPCのアプリ開発に着手した。
うーん、情報が少ないのか、うまく見つけられないのか、
eMbedded開発の情報ならあるんだけれど、違いが分からない・・・。
C#の勉強を兼ねているので、開発環境は.NETで行う。
まずは開発環境をインストール
・VS.NET2003
・PocketPC2003SDK
・PocketPC2003SEエミュレータ
アプリケーションの形態はとりあえずちゃちでもいいから、
データベースアプリケーションをつくりたい。
DBはどれがいいんだろ?
・PocketAccess
・プロパティデータベース
どれもよくわからないので、SQL Server CE2.0をインストールした。
(もしかすると一番難しい?)
デバイス単体ならライセンスは要らないようだ。
MSのチュートリアル には、
アプリケーションからデータベースとテーブルを作成するサンプルが載っていた。
開発環境でテーブル造ってからインストールできないのかな?
と訳の分からないままとりあえず作成。
・・・
・・・
・・・
データベース作成箇所
-----------------------------------------------------------------------------------------------------------
String dbPath = "\\My
Documents\\test.sdf";
if(System.IO.File.Exists(dbPath))
{
System.IO.File.Delete(dbPath);
}
// データベース作成
SqlCeEngine engine = new SqlCeEngine("Data Source = " + dbPath);
engine.CreateDatabase();
// データベース接続
SqlCeConnection ssceconn = new SqlCeConnection("Data Source = " + dbPath);
ssceconn.Open();
// テーブル作成
SqlCeCommand sqlCreateTable = ssceconn.CreateCommand();
sqlCreateTable.CommandText = "CREATE TABLE test(buy_id int IDENTITY(0,1) PRIMARY KEY, item ntext, type ntext, price int, date datetime)";
sqlCreateTable.ExecuteNonQuery();
// 行挿入
SqlCeCommand sqlInsertRow = ssceconn.CreateCommand();
sqlInsertRow.CommandText = "INSERT INTO test(item, price, date) VALUES('書籍', 1, 2600, '2005/08/10')";
sqlInsertRow.ExecuteNonQuery();
// データベース切断
ssceconn.Close();
-----------------------------------------------------------------------------------------------------------
エミュレータ上でデバッグ実行すると、データベースファイル(.sdf)が作成され、
SQL Analyzerがインストールされた。
しかし、エミュレータが重いので非常に時間がかかってしまった。
次はテーブルのデータ表示に挑戦します。