2012年2月9日木曜日

既存のDBをコピーして別DBを作る

既存のDBファイル(MDF,LDF)を元に、同一サーバ内にDBのコピーを別名で作成する為のSQL。
たまに使うし、忘れるしメモ。
MS SQL Server 2005, MS SQL Server 2008 で動作確認。

SQLとエクスプローラー上での操作が必要
1.SQL:@Action=1 で実行。移動元DBをデタッチ
2.エクスプローラ:MDF,LDFファイルをコピーして、移動先DB名でリネーム
3.SQL:@Action=2 で実行。移動元DBをアタッチ(元に戻す)
4.SQL:@Action=3 で実行。移動先DBを作成および、2で作成したファイルにアタッチ。
以上で作業完了。

その他メモ:
Windows2008で40GB弱のファイルをエクスプローラーのコピーでコピーすると30分以上かかる(14.4MB/秒)。
バックアップファイルがあるならバックアップファイルからリストアしたほうが早いかも。

:参考
SQL Server のデタッチとアタッチ機能を使用して SQL Server データベースを新しい場所に移動する方法

デタッチとアタッチを使用してデータベースを移動する方法 (Transact-SQL)

/*

#1. 移動元DB:デタッチ
#2. 移動元DB:アタッチ
#3. 移動先DBの作成
*/
DECLARE @Save_dir       VARCHAR(MAX)
    ,   @From_DBName    SYSNAME
    ,   @From_mdf       VARCHAR(MAX)
    ,   @From_ldf       VARCHAR(MAX)
    ,   @To_DBName      SYSNAME
    ,   @To_mdf         VARCHAR(MAX)
    ,   @To_ldf         VARCHAR(MAX)
    ,   @Action int;
/* 
設定値
 @Save_dir :データ領域(MDF,LDF)が置かれるフォルダの絶対パスを指定
 @From_DBName :移動元DBのカタログ名
 @To_DBName :移動先DBのカタログ名
 */
SET @Save_dir = 'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\';
SET @From_DBName = '';
SET @To_DBName = '';
--SET @Action = 0;   --DB情報の参照
SET @Action = 1 --#1. 移動元DB:デタッチ
--SET @Action = 2 --#2. 移動元DB:アタッチ
--SET @Action = 3 --#3. 移動先DBの作成


SELECT CASE @Action WHEN 1 THEN '#1.移動元DB:デタッチ'
                    WHEN 2 THEN '#2.移動元、移動先DB:アタッチ'
                    WHEN 3 THEN '#3. 移動先DBの作成'
                    ELSE 'DB情報の参照' END

use master;
  
SET @From_mdf = @Save_dir + @From_DBName + '.mdf';
SET @From_ldf = @Save_dir + @From_DBName + '_log.ldf';
SET @To_mdf = @Save_dir + @To_DBName + '.mdf';
SET @To_ldf = @Save_dir + @To_DBName + '_log.ldf';

BEGIN TRY
    IF @Action = 1
    BEGIN
        EXEC sp_detach_db @From_DBName;
    END
    IF @Action = 2
    BEGIN
        EXEC sp_attach_db @From_DBName, @From_mdf, @From_ldf;
    END
    IF @Action = 3
    BEGIN
        EXEC ('CREATE DATABASE ' + @To_DBName + ' ON (FILENAME = [' + @To_mdf + ']),(FILENAME = [' + @To_ldf + '])
            FOR ATTACH' );
        -- 移動先の論理ファイル名を設定
        EXEC ( 'ALTER DATABASE ' + @To_DBName + ' MODIFY FILE (NAME = ' + @From_DBName + ', NEWNAME = ' + @To_DBName + ');' )
        EXEC ( 'ALTER DATABASE ' + @To_DBName + ' MODIFY FILE (NAME = ' + @From_DBName + '_log, NEWNAME = ' + @To_DBName + '_log);' )
    END

    DECLARE @SQLString NVARCHAR(max)
        ,   @DBName NVARCHAR(max);

    SET @DBName = @From_DBName;
    SET @SQLString = N'USE ' + @DBName + '
                       exec sp_helpfile';
    EXEC sp_executesql @SQLString;

    SET @DBName = @To_DBName;
    SET @SQLString = N'USE ' + @DBName + '
                       exec sp_helpfile';
    EXEC sp_executesql @SQLString;
END TRY
BEGIN CATCH
    SELECT  '### ERROR ####' ,
            ERROR_NUMBER() AS ErrorNumber,
            ERROR_SEVERITY() AS ErrorSeverity,
            ERROR_STATE() as ErrorState,
            ERROR_PROCEDURE() as ErrorProcedure,
            ERROR_LINE() as ErrorLine,
            ERROR_MESSAGE() as ErrorMessage;
END CATCH
go

2012年2月6日月曜日

gzとかbzip2とか試してみる

原状はRARで圧縮してるが、他の一般的なファイル形式で色々試す
gzとかbz2とか

まずはtarコマンドをWindowsで使う為のWin32用DLLを以下よりダウンロード
Common Archivers Library: TAR32.DLL
http://www.csdinc.co.jp/archiver/lib/tar32.html


SQL Server 2005のDBバックアップファイルの圧縮
対象ファイル:
 .bak 16,691MB (17,501,881,856 byte)
比較対象RARの実績:
 .rar 1,703MB (1,785,825,937 byte)
 圧縮率 10.2%
 所要時間 ?←TODO:あとで調べて更新する大体3,40分だったはず(あいまい)

1. tar.gzに圧縮
tar.gz 1,851MB (1,940,914,176 byte)
圧縮率 11%
所要時間 8分41秒
 rarより早いけど、圧縮率はrarに劣る。

2. tar.bz2に圧縮
tar.gz 1,839MB (1,927,925,760 byte)
圧縮率(%)11%
所要時間 1時間22分15秒
 rarより遅く、圧縮率もrarに劣る。てかgzと12MBしか変わらないし。orz
 やり方間違えたかな。

結論:とりあえず現状通りrarのままでいいや。しばらくは。

こんなページもあったよっと。
窓の杜 - ファイル圧縮対決6番勝負!
http://www.forest.impress.co.jp/article/1998/11/16/compress.html

2012年2月2日木曜日

IIS/ASP.NETの負荷テストをどうやるか?(一時メモ)

IIS/ASP.NETの負荷テストをどうやるか?
ちょっとぐぐった
・WAST(Web Application Stress Tool)
・ACT(Visual Studio に付属のApplication Center Test)
・WCAT(Web Capacity Analysis Tool)
  →WASTの後継
などがある。

どれが適しているかわからないので、概要資料に目を通す。

▼参考情報
#WAST関連
Microsoft TechNet: IT Pro 道場 自主トレシリーズ - 負荷テストの実施
http://technet.microsoft.com/ja-jp/events/dd696124
http://technet.microsoft.com/ja-jp/dd696125

#WCAT関連
[HOW TO] 無償の簡易 Web 負荷ツール WCATの使い方
http://social.technet.microsoft.com/forums/ja-JP/iis7ja/thread/c49f277a-f9e3-4e96-8634-72259edf2730/

#ACT関連
How To 情報: Web サービス パフォーマンス テストのための ACT の使用方法
http://msdn.microsoft.com/ja-jp/library/ff650684.aspx
FAQ: Visual Studio Team Edition for Software Tester
http://msdn.microsoft.com/ja-jp/vstudio/aa718931
MSDN テストの種類
http://msdn.microsoft.com/ja-jp/library/ms182514(v=vs.90).aspx

#途中まとめ
どれもIISの負荷テストはできる。
 ・やりたい負荷テストを行うまでの導入し簡易さ
 ・使う上での情報が多い/少ない
 ・有償/無償
 →シンプルなWCATがよさそう

IIS/ASP.NETでSOAPでWebmethodに対してXMLをやり取りする部分をどうやるかが分からない。

#SOAP
@IT:連載 Webサービスのキホン(2) SOAPという封筒の内部構造
http://www.atmarkit.co.jp/fxml/tanpatsu/21websvc/websvc02.html

▼メモ

 クライアントPCから検証用サーバーへの接続
・IIS6のスタートページへの接続 → OK
・IIS7のスタートページへの接続 → OK
・つくったWEBサイトのwebmethodへのリクエスト →OK
よしよし

▼実用参考
使う上で目を通したページ

#WCAT
WCATのコマンドラインオプション
http://blogs.wankuma.com/esten/archive/2009/07/09/177290.aspx
Developer @ ADJUST : 一筋縄ではいかなかった Microsoft WCat(Web Capacity Analysis Tool) 6.3(x86)
http://devadjust.exblog.jp/11875416/
【IIS7】 MSC2008 セッションより (おまけ) - Hiroshi Okunushi's Blog ☆ミ| IIS PHP etc. - Site Home - TechNet Blogs
http://blogs.technet.com/b/hirookun/archive/2008/04/22/_1030_iis7_1130_-msc2008-_bb30c330b730e730f33088308a30_-_08ff4a307e30513009ff_.aspx
IT Misc Tips Microsoft WCat(Web Capacity Analysis Tool)
http://arapeeeittips.blog28.fc2.com/blog-entry-3.html
WCat 6.3 postdata in an external file : The Official Microsoft IIS Site
http://forums.iis.net/t/1151478.aspx
 →SOAP x XML をWcat6.3で使用する為の実装例。この参考情報がなかったら実装できなかった

#SOAPメッセージのトレース
Microsoft SOAP Toolkit 2.0 SP2 ダウンロード
http://www.microsoft.com/japan/msdn/vstudio/downloads/soaptoolkit/
 →実動プログラム(スキャン対象)でIISへSOAPで送信するXMLをトレースする為のツール
@IT:.NET TIPS SOAPメッセージをトレースするには? - C# VS.NET
http://www.atmarkit.co.jp/fdotnet/dotnettips/049mssoapt/mssoapt.html
 →MSSoapTの解説。記事内URLはリンク切れ。