レベルエンター山本大のブログ

面白いプログラミング教育を若い人たちに

BLOCKVROCKリファレンス目次はこちら

DB

データベースのアジャイル開発を実現する8のプラクティス

アジャイルな開発に欠かせない割りに、あまり言及されていなかったのが データベースのアジャイル開発です。 今、私の参画しているプロジェクトで、データベースに関するアジャイルな開発の方法を模索していました。 現在実践していて効果のあるプラクティス…

アンチ型付DataSet派の自作ORマッピング

C# DB

VisualStudio2005を使ってるが、「型付DataSet」にはいろいろ不満がある。 自動的に作られるのはいいけど、接続文字列まで内部に持ってたり、時々壊れて、XSDビューで開けなかったり、TableAdapterに書き込んだクエリのメンテナンスをしようと思うと、いちい…

SQLクエリだけでバイナリ列にファイルからデータを登録する裏技

バイナリカラムを持つテーブルにファイルからデータをInsertしたい場合、いちいちプログラムを作る必要があって面倒です。 何かいい方法はないかと調べていて、SQLクエリだけでバイナリ列にファイルからデータを登録する裏技を見つけました。SQLServerの特殊…

DB関連のあとでよむ。

DB

■ミックさんのリレーショナル・データベースの世界(SQLのパフォーマンスチューニングとかすごい良い) http://www.geocities.jp/mickindex/■SQL Server 2005 Tips and Tips 第 2 回 排他ロックにブロックされない読み取りの実現 http://www.microsoft.com/j…

ロックヒントとトランザクション分離レベルの組み合わせによる読み取りのWaitパターン

Sqlserverでは、Select文でロックヒントを記述することができる。■ロックヒント http://msdn.microsoft.com/ja-jp/library/ms177634.aspxトランザクション分離レベルとヒントの組み合わせによって、クエリのブロック状況が異なるので、注意が必要。とくに、…

SQLServer2005から新しく追加された「スナップショット分離レベル」の動作

スナップショット分離レベル(Snapshot)は、リードコミッテッド分離レベル(Read Committed)と同じロックの動作をします。 つまり、読み取りの操作時に、データに対して共有ロックをかけません。 スナップショットとリードコミッテッドの違うところは、反…

SQLクエリでのみ照合順序を変更する。

DB

SQLServer2005で、SQLクエリのみで照合順序を変える方法 ■準備 「#」付きテーブルは同一セッション上でのみ有効な一時テーブル create table #tbl ( data varchar(2) ) insert into #tbl select 'a' as data union ALL select 'b' as data union ALL select …

SQLServerProfilerでデッドロックの図示

DB

現場で、デッドロックが発生してその対処をしている。 RDBMSによって分析・対処の方法は異なるが、今回はSQLServer2005で行った。 SQLServer2005およびSQLServerProfilerの強力さを改めて思い知った。 デッドロックの検知 デッドロックが発生したことは、ア…

SQLServer2005 のインデックス付きビューが微妙

DB

SQLServer2005では、ビューのパフォーマンス改善のためにインデックス付きビューが作成できるようになった。 鳴り物入りで導入されたインデックスビューで、Oracleのマテリアライズドビューにも対抗できるかと思いきや、制約が厳しすぎて微妙だ。たとえば、…

トランザクションファイルとログファイルを別ディスクに分ける理由

DB

RDBMSにおいて「トランザクションファイル」と「ログファイル」は、 別ディスクに分ける方が良い、と言うのはDBAの常識だが、 その理由については「慣習的に」とか「なんとなく」という程度の意識の人も多い。例のSQLServer最強本にもあるが、 これらのファ…

SQLで関数を使った絞込みはインデックスが使われない。

DB

SQLServerにて、非クラスタドインデックスを使ってるとき 以下の2つのクエリは、Likeを使った検索の方が高速だ。 select *from dbo.Expenses where studentcd like '%00' select *from dbo.Expenses where right(studentcd,2) = '00' これは、関数を使うと非…

「訂正」【SQLSERVER2005】Bit列で、行ロックしたはずがテーブルロックになる

DB

【訂正】 以下の文章が間違っていたことがわかったので、ここで訂正してお詫びします。SQLServer2005のSERIALIZABLEレベルでは、クエリによる「範囲ロック」を行うことが問題の真のメカニズムでした。新しいバージョンのSQLSERVERでは、クエリ範囲に該当する…

【SQLSERVER2005】Bit列で、行ロックしたはずがテーブルロックになる

DB

【訂正】 以下の文章が間違っていたことがわかったので、ここで訂正してお詫びします。SQLServer2005のSERIALIZABLEレベルでは、クエリによる範囲ロックを行うことが 問題の真のメカニズムでした。以下詳細。SQLServer 7.0ではSERIALIZABLEレベルでロックを…