SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

ISA でリバプロの参考資料

leave a comment

ISA でリバースプロプロキシを構築する際に参考となりそうな資料をメモとして。

TechNet バーチャル ラボ: ISA Server 2006 と Forefront Server Security による Exchange、SharePoint の安全な利用
セキュリティ バーチャル ラボ
TS ゲートウェイの ISA Server シナリオを構成する
Outlook Web Access のプロキシ サーバーを構成する方法

基本的な作業としては

  1. Web リスナを作成
  2. ファイアウォールポリシーで内部 URL と関連付け

の手順となりそうです。

ISA の日本語の書籍ってほとんどないんですね~。
研修のカタログを見ても実施されていないようです。

洋書は何冊か出ているみたいですね。
いい加減、英語嫌いも克服しないとこの先 SE としてお先真っ暗な気がしてきました・・・。

Written by Masayuki.Ozawa

9月 23rd, 2009 at 12:53 pm

Posted in ISA

Exchange 2010 でエッジトランスポートを構築

3 comments

検証環境の Exchange はメールのリレーサーバとしてエッジトランスポートを DMZ に配置しています。

Exchange 2010 も少し触っておこうと思い、まずは既存の環境への影響が少ない、エッジトランスポートを
2010 で構築してみました。
エッジトランスポートはワークグループ環境かつ既存の Exchange 組織内の役割とも競合しないので
手軽に入れ替えることができます。

今回はせっかくなので Windows Server 2008 R2 にインストールをしてみました。

  1. 必要な役割 / 機能の追加
    まずはエッジトランスポートに必要な役割 / 機能の追加です。

    以下のコマンドを実行して、[.NET Framework 3.5.1] と [Active Directory Lightweight Directory Service] を
    インストールします。
    Windows Server 2008 R2 なので Dism コマンドを使用して追加してみました。

    dism /Online /Enable-Feature /FeatureName:NetFx3
    dism /Online /Enable-Feature /FeatureName:DirectoryServices-ADAM
  2. インストール言語の選択
    インストールメディアを挿入し、セットアップを起動後にインストールする言語オプションを選択します。
    言語の選択は [言語バンドルからすべての言語をインストールする] と [DVD に含まれる言語のみをインストールする] の
    2 種類から選べます。
    今回は [言語バンドル~] を選択してみました。
    この方法ではインターネットから言語バンドルがダウンロードされます。
    ?image
  3. エッジトランスポートの役割のインストール
    [Microsoft Exchange のインストール] でカスタムインストールを選択し、エッジトランスポートをインストールします。
    image image
    image image

エッジトランスポートのインストールは Exchange 2007 のときと変わりませんね。
管理コンソールの基本的な構成も Exchange 2007 と同じですね。
image

軽く、インターネット経由のメール送受信ができるか試したところ正常に動作しました。
製品版が出たらスムーズに置き換えができそうです。

Written by Masayuki.Ozawa

9月 21st, 2009 at 2:20 pm

Posted in Exchange

1 台で App-V サーバーを構築した場合に、Application Virtualization Management Server が起動していないことがある

leave a comment

忘れないようにメモ。

App-V サーバーでは SQL Server が必要となるため、1 台で完結させたサーバーを構築する場合には
App-V と SQL Server を共存させる構成になります。

この構成の場合、稀に [Application Virtualization Management Server] サービスが起動していないことがあります。

image

上記サービスは SQL Serve への接続が必要であるため、SQL Server のサービスが起動していない状態で、
Application Virtualization Management Server サービスが起動すると起動に失敗することがあります。

SQL Server を別のサーバーに構築することも考えられるので依存関係の設定はされていないんですよね。

image

SQL Server と依存関係を設定するためにはコマンドプロンプトで以下のコマンドを実行します。
# SQL Server の既定のインスタンスと依存関係を設定しています。
  Express Edition を使用している場合は [MSSQL$SQLEXPRESS] と依存関係を設定します。

sc config AppVirtServer depend= MSSQLSERVER

# depend= の後ろに半角スペースが必要です。

これで SQL Server と依存関係が設定されます。

image?

依存関係を削除する場合は

sc config AppVirtServer depend= “”

で依存関係を解除することができます。

これで SQL Server と依存関係が設定されます。

この状態で SQL Server のサービスを停止しようとすると依存関係が設定されているため、App-V の
サービスも停止されます。

image

App-V のサービスを開始すると依存関係により、SQL Server のサービスも開始されます。

いざ、サービスを手動で開始しようとしてみると依存関係で SQL Server のサービス開始後に App-V の
サービスが起動するのですがエラーとなってしまうんですよね。

image?
SQL Server のスタートアップが終わる前に接続しようとして、エラーとなっている感じがします。
# 一度エラーになったあとに、再度手動で起動すると正常にサービスが起動できるんですよね。
?
ひとまず、依存関係を設定して、サービスの起動を [自動 (遅延開始)] にし、回復でエラー発生時に
[サービスを再起動する] にして回避しています。

遅延開始は Vista 以降でしか使用できないので Windows Server 2003 で構築する場合は別の方法を
考える必要がありますね。

サービスの遅延開始もコマンドで設定ができます。

sc config AppVirtServer start= delayed-auto

?

App-V 関連では、ステップバイステップからの抜粋になりますが、RTSPS を使用する場合の
設定箇所もメモとしてどこかで投稿しておきたいです。
数ヶ月前、少し調べたのですが投稿しようと思ってずっと手付かずのままです・・・。

Written by Masayuki.Ozawa

9月 20th, 2009 at 6:35 am

Posted in MDOP

コンピュータアカウントのパスワード、変更されたのは何時?

leave a comment

クライアントのコンピュータアカウントのパスワード格納場所

の続きとして投稿しようと思っていたのですが本日まで手付かずでした。
記憶も薄れつつあるのでここでまとめておきたいと思います。

以前の投稿で記載しましたがコンピュータアカウントのパスワードは

– [HKEY_LOCAL_MACHINESECURITYPolicySecrets$MACHINE.ACC]

に格納されているようです。

この中には [CupdTime] / [OupdTime] という 2 種類のキーがあり、この値に変更された日付が入っていそうです。
# 具体的なドキュメントは見つかっていないので [ここかな~] というレベルです。違っているかも・・・。

image

上記の画像が、キーの値を表示したものになります。

4a 30 31 af 44 30 ca 01

という値が入っていますがこのままでは何のことやらさっぱりです。

この値を日付に変換するためには [nltest.exe] を使用します。
[nltest.exe] は Windows 2000 Server / Windows Server 2003 のサポートツールに含まれています。

Windows 2000 SP4 サポート ツール
Windows Server 2003 Service Pack 2 32-bit Support Tools

Windows 7 / Windows Server 2008 R2 では標準で含まれていそうです。

このコマンドとレジストリの値を使用すると日付に変換することができます。
以下がコマンドの実行結果です。

nltest /time:af31304a 01ca3044
af31304a 01ca3044 = 9/8/2009 14:24:48
コマンドは正常に完了しました

レジストリに設定されている値を以下の順で変換します。

  1. 値を 8 桁 + 8 桁にします。
    4a 30 31 af 44 30 ca 01
  2. 値を 2 桁一組として逆から並べ替えます
    af31304a 01ca3044

この値を使用して nltest を実行すると日付が取得できます。
# 最初のブロックと最後のブロックの間には半角スペースを入れます。
今回の値だと [2009/9/8 14:24:48] になりますね。

このタイミングでドメインに参加をさせていますので、コンピュータアカウントのパスワード変更日付の
設定値としては有効かなと思います。

ADSI エディットを使用して、コンピュータアカウントの [pwdLastSet] を確認すると以下の値が設定されています。

[2009/9/8 14:24:49]

image

コンピュータのレジストリの値とほぼ同一の時刻が設定されています。

上記画像は Windows Server 2008 の ADSI エディットで表示したものですが、残念ながら 2008 より前の
ADSI エディットでは日付で表示されません。
下の画像は Windows 2000 Server の ADSI エディットを使用して [pwdLastSet] を取得したものです。

image

[128968610899088750]

このままだと何の値かわからないですよね・・・。
これも日付に変換することが可能です。

  1. 16 進数に変換できる電卓を実行します。
    # 2008 までは関数電卓 / R2, 7 ではプログラマ電卓で変換できます。
    ?image
  2. 10 進数の状態で、[pwdLastSet] の値を貼り付けます。
    image
  3. 16 進数に変換します。
    image?

    そうすると

    1CA3044AFD0D56E

    という値に変換ができます。これを [nltest.exe] で実行できる形式に変換します。

  4. 最初に [0] をつけます。
    01CA3044AFD0D56E
  5. 8 桁 + 8 桁に分割します。
    01CA3044 AFD0D56E
  6. 最初のブロックと最後のブロックを入れ替えます。
    AFD0D56E 01CA3044

これで値の変換は完了です。
変換した値を使用して [nltest.exe] を実行してみます。

nltest /time:AFD0D56E 01CA3044
afd0d56e 01ca3044 = 9/8/2009 14:24:49
コマンドは正常に完了しました

< p>2008 の ADSI エディットと同じ値が取得できました。

Mechanics of User Identification and Authenication: Fundamentals of Identity Management

という書籍にこの辺の内容が書かれていそうなのですが英語なのとお値段がそれなりにするので買えていません・・・。
面白そうな本なのでどこかで読んでみたいとは思っているのですが。

AD 関連では備忘録としていくつか残しておきたいことがあるので時間を見て少しずつ投稿していきたいと思います。

Written by Masayuki.Ozawa

9月 15th, 2009 at 1:59 pm

Posted in Active Directory

Exchange 2007 SP2 をスリップストリームインストール

leave a comment

どうやるんだろうと思って昨日、帰宅してから調べていました。

SP2 のリリースノートを確認していたら以下の記述が。

Microsoft Exchange Server 2007 Service Pack 2 (SP2) リリース ノート

Exchange 2007 RTM または Exchange 2007 SP1 のインストールと同じ手順を使用して Exchange 2007 SP2 のクリーン インストールを実行できます。
これは、Exchange 2007 SP2 の更新プログラムが Exchange 2007 のオリジナル リリース版のファイル セットに直接組み込まれているためです。
全体的な展開手順も個別のインストール手順も同じです。
どのような手順を実行する必要があるかは、作成する Exchange 展開の複雑さによって異なります。

Exchange 2007 の SP2 は /extract オプションを使用して展開したモジュールが 1.6 GB 近くあり、
サイズが大きいなと思っていたのですが SP だけではなく RTM のファイルが含まれているんですね。

新規インストールの場合は SP2 のメディアを使用してインストールすると With SP2 としてインストールできます。

下の画像は Exchange の役割がインストールされていないサーバーでセットアップを起動した際の画面です。
Step 5 を実行すると Exchange 2007 With SP2 としてインストールが実行されます。

image?

ダウンロードした SP2 を使用すれば良いとなると、UPDATES フォルダにモジュールを置く必要もなく
簡単に With SP2 のメディアが作成できますね。

Written by Masayuki.Ozawa

9月 15th, 2009 at 11:04 am

Posted in Exchange

SCVMM で複数のスナップショットを戻す

leave a comment

SCVMM や Hyper-V Manager を使うと複数のゲスト OS に対して同時にスナップショットを取得することはできるのですが、
複数のゲスト OS の特定のスナップショットを一括で戻すという機能が見当たりません。

Try & Error で検証をしていると複数のゲスト OS のスナップショットをグループ化して戻したいときはありますよね。

SCVMM 2008 R2 (無印も) にはゲスト OS 用のコマンドレットが含まれているのでそちらを利用して複数のゲスト OS の
スナップショットを戻す PowerShell のスクリプトを勉強も兼ねて書いてみました。

PowerShell をはじめて使うのでものすごいおおざっぱなコードです…。。
もっと勉強しないとですね。

# 対象のゲスト OS 名とスナップショットを指定
$VM = @(
@("SERVER1", 1),
@("SERVER2", 1),
@("CLIENT1", 0)
);

$i = 0;
While ($i -lt $VM.count)
{
Write-Output $VM[$i][0];
$Checkpoints = Get-VMCheckpoint -VM $VM[$i][0];
Restore-VMCheckpoint -VMCheckPoint $Checkpoints[$VM[$i][1]]; $i++;
};

ゲスト OS 名とリストア対象のスナップショットの番号を二次元配列にいれてループしているだけの簡単なスクリプトですが、
複数のゲスト OS を特定の状態に戻す時には割と便利だなと感じてます。

アップグレードの検証をしているとかなりの台数でアップグレード前後の状態を一括で戻すことがあるのでその時のために作ってみました。

現在はシーケンシャルに実行のため、一つのスナップショットの復元が終わるまで次のスナップショットの復元は開始されません。
時間のあるときにバックグラウンドジョブ化したいと思います。
PowerShell 2.0 CTP のときはバックグラウンドジョブは [Start-PSJob] だったようなのですが RTM では [Start-Job] になっているみたいですね。
# [Get-Command] で [Start-PSJob] を探しても見つからず、なくなったのかと思ってしまいました。

Written by Masayuki.Ozawa

9月 9th, 2009 at 11:17 pm

Posted in System Center

TS: Windows 7, Configuring の英語版が受験可能になりました

leave a comment

試験関係の投稿をもうひとつ。

米国ではすでに試験が開始されていたようですが日本でも
TS: Windows 7, Configuring
がプロメトリックで受験できるようになりました。

英語版だけですが・・・。

試験一覧

日本語版が提供されたら Windows Server 2008 のときのように何かキャンペーンが始まったりするかもしれないですね。

マイクロソフト認定資格プログラム(MCP)において、Windows Server(R) 2008 対応新資格の日本語試験を提供開始

Written by Masayuki.Ozawa

9月 9th, 2009 at 2:10 pm

Posted in Windows Client

Hyper-V 導入コーディネーター資格

leave a comment

昨日、ニュースサイトに掲載されていた Hyper-V 導入コーディネーター資格ですが以下の URL から受験可能です。

Hyper-V 仮想化検定

リンクを開いて下にスクロールしていただくと、受験をすることができます。

以前、MCA プラットフォーム (Windows Server 2008) 保持者が受験でした、Hyper-V 導入アドバイザー検定と
どこが違うのだろうと思っていたのですが、今回発表されたものは R2 対応のものとなっていました。

MCA の有資格者以外も受験できますので興味がある方は受験されてみてはいかがでしょう?
無償で何度もチャレンジできます。

合格すると Hyper-V 導入コーディネーターという称号がいただけるようです。

以前の資格と同様に合格しても MCA の Transcript に表示はされないようです。
連携されていると資格証明書として提出する機会があるときに便利なんですけどね。

Written by Masayuki.Ozawa

9月 9th, 2009 at 1:54 pm

Posted in Hyper-V

Hyper-V Server 2008 R2 を直接 USB に展開

leave a comment

少しずつ検証をしている Hyper-V Server 2008 R2 の USB 起動ですが、VHD を使わずに直接展開することが
できましたので手順を投稿してみました。

この方法は、USB ブートの方法を調査していたときに参考にさせていただいたブログに記載されていた方法になります。
参考にさせていただいたリンクは以前に投稿した内容に載っておりますのでそちら参照いただければと思います。

Hyper-V Server 2008 R2 の Flash Media Boot について

[用意するもの]

  1. WAIK の imagex.exe
  2. Hyper-V Server 2008 R2 のインストールメディア
  3. USB メモリ (ブート可能な状態にしたもの)
  4. Hyper-V が動作する端末

DISM を使用して WIM ファイルの展開ができればよかったのですが、Hyper-V Server 2008 R2 の DISM では
Mount-Wim が実行できませんでした。
そのため、Wim ファイルの展開には WAIK の imagex.exe を使用します。
HYper-V Server 2008 R2 のインストールメディアに含めるか USB メモリに入れておくと便利だと思います。

ブート可能な USB の作成に関しては以前の手順と変わりません。
DISKPART でパーティションを Active にして、Bootsect で USB メモリにブートセクタを書き込みます。
今回は作成の手順は省略しています。

今回は直接 USB に Hyper-V Server 2008 R2 を展開しますので、ローカルディスクは不要になります。
検証中は HD を外した状態で作業をしていました。

[WIM の展開]

  1. Hyper-V Server 2008 R2 のメディアでブートします。
  2. [Shift + F10] を押してコマンドプロンプトを開きます。
  3. imagex で install.wim を USB に展開します。
    コマンドは以下になります。
    imagex /apply <インストールメディア>SOURCESINSTALL.wim 1 <USBメディア>

    これで WIM を直接展開することが可能です。
    ただし、USB への直接展開ですが私の環境では 4 時間以上かかっていました。

  4. BCDBOOT で USB に BCD を作成します。
    この辺は、VHD の場合と変わらないですね。今回は VHD ではなく USB に展開していますので、
    VHD 用の設定は不要になります。
    以下のコマンドでロケール設定を日本語にして BCD を作成できます。
    今まで勘違いしていたのですが、BCD で指定する Windows ディレクトリはシステムルートの指定なので、
    USB や VHD の Windows ディレクトリを指定すればよかったんですね。

    bcdboot <USB メモリのドライブ>:windows /s <USB メモリのドライブ> /v /l ja-jp

WAIK 実行できる環境があれば、Hyper-V Server 2008 R2 のメディアでブートしなくても、
USB に WIM を展開することができますね。
Windows 7 / Windows Server 2008 R2 の環境があれば、VHD をマウントして WIM を展開することも
できると思います。

INSTALL.WIM を展開した場合は英語環境で展開されています。
image 
これは INSTALL.WIM の既定の言語設定が英語になっているためのようです。
INSTALL.WIM は複数の言語パックを含んでいるのですが既定の設定は英語になっています。
この辺は展開サービスのスキルが必要になってくるようで詳しくはないのですが、調べてみたところ、
WIM ファイルに含まれている言語パックの情報は以下のコマンドで取得ができるようです。

imagex /info <インストールメディア>SOURCESINSTALL.WIM

~ 省略 ~

<LANGUAGES>
  <LANGUAGE>de-DE</LANGUAGE>
  <LANGUAGE>en-US</LANGUAGE>
  <LANGUAGE>es-ES</LANGUAGE>
  <LANGUAGE>fr-FR</LANGUAGE>
  <LANGUAGE>it-IT</LANGUAGE>
  <LANGUAGE>ja-JP</LANGUAGE>
  <LANGUAGE>ko-KR</LANGUAGE>
  <LANGUAGE>pt-BR</LANGUAGE>
  <LANGUAGE>ru-RU</LANGUAGE>
  <LANGUAGE>zh-CN</LANGUAGE>
  <LANGUAGE>zh-HK</LANGUAGE>
  <DEFAULT>en-US</DEFAULT>
</LANGUAGES>
~ 省略 ~

<DEFAULT></DEFAULT> が en-US となっているため、imagex で展開をすると英語版となります。

INSTALL.WIM を書き込み可能な場所に保存して、以下のコマンドを実行することで、
既定の言語を日本語に変更することができます。

imagex /mountrw <インストールメディア>SOURCESINSTALL_JP.WIM 1 c:tempmount
Intlcfg -ALL:ja-jp -IMAGE:c:tempmount
imagex /unmount /commit c:tempmount

imagex /info e:SOURCESINSTALL.WIM

~ 省略 ~
<LANGUAGES>
  <LANGUAGE>de-DE</LANGUAGE>
  <LANGUAGE>en-US</LANGUAGE>
  <LANGUAGE>es-ES</LANGUAGE>
  <LANGUAGE>fr-FR</LANGUAGE>
  <LANGUAGE>it-IT</LANGUAGE>
  <LANGUAGE>ja-JP</LANGUAGE>
  <LANGUAGE>ko-KR</LANGUAGE>
  <LANGUAGE>pt-BR</LANGUAGE>
  <LANGUAGE>ru-RU</LANGUAGE>
  <LANGUAGE>zh-CN</LANGUAGE>
  <LANGUAGE>zh-HK</LANGUAGE>
  <DEFAULT>ja-JP</DEFAULT>
</LANGUAGES>
~ 省略 ~

私は最近、インストールメディアは USB を使っているので、そのままコマンドを実行することができました。
DVD を使用されている方は一度ローカルディスク等に保存する必要があります。

イメージの展開で応答ファイルのようなものを使えば言語は指定できるとは思うのですが、imagex の
コマンドではそのようなオプションが見当たらなかったので、WIM ファイルの既定の言語を変更する
方法をとっています。

展開サービスの使い方を理解すればこの辺のスキルも取得できそうですね。
Intlcfg コマンドを使用することで複数の言語パックをインストールしている WIM ファイルの既定の言語を
変更することができます。
このコマンドを使用して既定の言語を変更しています。

[参考]
Intlcfg.exe でインターナショナル設定を構成する

既定の言語を日本語にした WIM を展開すると日本語環境で展開されます。
image

WIM を USB に直接展開、または、USB 内に作成した VHD に WIM を展開することで、ローカルディスクを使わずに
USB に Hyper-V Server 2008 R2 をインストールすることができますが、展開にかなりの時間がかかりますので、
一度ローカルディスクに VHD を作成してWIM を展開または、メディアブートしてインストールする方法が
一番時間かからずに環境を作れると思います。

あとは実運用でどれぐらい使用できるかを検討してみないといけないですね。
週末に、スキルチャージプログラムで貸与されている ML110 G5 の移行を考えてみたいと思います。

Written by Masayuki.Ozawa

9月 5th, 2009 at 9:17 am

Posted in Hyper-V

トランザクションログが壊れるとバックアップまで戻すしかない??

2 comments

いろいろと話題になっている [中堅企業向け オラクル都市伝説- シーズン2] ですが、記事の中に以下の記載があります。

ログファイルが壊れるとデータの復旧ができない。
毎日夜中にバックアップを取っていたが、データはバックアップした状態、すなわち昨日の夜の時点に戻ってしまう。
ユーザーがショッピングサイト上で行っていた直近の購入情報が損失してしまうのだ。ショッピングサイト運営会社は夜間に社員を緊急収集し、損失したデータを手作業で入力するはめになった。その他、クレーム対応のため、膨大な損失を被むる。
まさに地獄である。

?

ログファイルが壊れ、データの復旧ができなくなったため、バックアップまで戻したとあります。

トランザクションの整合性が保たれた状態に戻すということを考えるとこの対応は正しいと思いますが、
障害発生時では、それまでのデータを何とかして確認する方法がないかということも重要だと思います。

SQL Server はトランザクションログファイルが壊れてもデータファイルが生きていれば状況によってはある程度は復旧できます。

といことで実験してみました。

[トランザクションログを壊す]

まずは、トランザクションログを壊さないと話が始まりません。
とりあえず、バイナリエディタを使用してファイルの内容を 0 クリアしてみました。
データベースは SQL Server 2000 の Northwind を使用しています。
?

[データベースは障害状態になる?]

この状態のデータベースを SQL Server 2000 で開くとどうなるか確認してみました。
image

データベースが開けちゃうんですね・・・。
DBCC で確認してもエラーにはなりませんでした。

[トランザクションログのファイル自体を削除する]

続いては ldf を削除してデータファイルだけの状態にしてみました。
これもまた起動してきちゃうんですね。

image

SQL Server が起動時に新しいトランザクションログを作っていました。

image

[トランザクションログファイルを壊れた状態にするには?]

壊さないことには検証が始まらなさそうですので、ひとまず復旧間隔を 20 分に設定し、10,000 件のデータを挿入して、
サーバーを強制シャットダウンして、トランザクションログを FF でクリアしてみました。

どうやらトランザクションログを壊すことに成功したようです。
# SQL Server 2000 / 2008 でこの方法でログを壊すことができました。
?image

さて、これで都市伝説と同じ状態に持っていくことができました。
ここから、データを復旧したいと思います。

[ログの再構築でデータを復旧]

SQL Server 2000 と 2005 以降ではログの復旧方法が異なります。

[SQL Server 2000]
SQL Server 2000 で復旧する場合は、システムテーブルを直接更新して、EMERGENCY モードに設定する必要があります。
SQL Server 2000 の DBCC にはログを再構築するコマンドがあります。
REBUILD_LOG コマンドで新しいログファイルが作成できます。このコマンドは Undocumented な DBCC なんですよね。

2000 では REPAIR_ALLOW_DATA_LOSS でログファイルを再構築することができないので、REBUILD_LOG コマンドを
使用してログファイルの再構築をする必要があります。

sp_configure ‘allow updates’,1
GO
RECONFIGURE WITH OVERRIDE
GO
UPDATE sysdatabases SET status = 32768 WHERE name = N’Northwind’
GO

ALTER DATABASE [Northwind] SET SINGLE_USER
GO
DBCC REBUILD_LOG(‘Northwind’,’C:Program Files (x86)Microsoft SQL ServerMSSQL$SQL2000DataNorthwind.LDF’)
GO
ALTER DATABASE [Northwind] SET MULTI_USER
GO
sp_configure ‘allow updates’,0
GO
RECONFIGURE WITH OVERRIDE
GO

設定オプション ‘allow updates’ が 0 から 1 に変更されました。RECONFIGURE ステートメントを実行して、インストールしてください。

(1 行処理されました)
警告 : データベース ‘Northwind’ のログが再構築されました。トランザクションの一貫性は失われます。DBCC CHECKDB を実行して物理的な一貫性を調べる必要があります。データベース オプションを再設定し、余分なログ ファイルを削除する必要があります。
DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。
設定オプション ‘allow updates’ が 1 から 0 に変更されました。RECONFIGURE ステートメントを実行して、インストールしてください。

[SQL Server 2005 以降]
SQL Server 2005 以降では ALTER DATABASE で EMERGENCY モードに設定することができます。
また、2005 以降では DBCC CHECKDB を REPAIR_ALLOW_DATA_LOSS で実行することとで
トランザクションログの再作成ができます。
# REBUILD_LOG は使えなくなっています。

AL
TER DATABASE [Northwind] SET EMERGENCY
GO
ALTER DATABASE [Northwind] SET SINGLE_USER
GO
DBCC CHECKDB (‘Northwind’, REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE [Northwind] SET MULTI_USER
GO

?

ファイル アクティブ化エラー。物理ファイル名 "C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATAnorthwnd.ldf" が正しくない可能性があります。
データベースのシャットダウン時に開いているトランザクション/ユーザーがあったか、データベースにチェックポイントが発生していないか、またはデータベースが読み取り専用のため、ログを再構築できません。このエラーは、トランザクション ログ ファイルが手動で削除されたか、ハードウェアまたは環境の障害により失われた場合に発生する可能性があります。
警告: データベース ‘Northwind’ のログが再構築されました。トランザクションの一貫性は失われました。RESTORE チェーンが壊れ、サーバーが以前のログ ファイルのコンテキストを保持しなくなったので、以前のログ ファイルについて把握しておく必要があります。DBCC CHECKDB を実行して物理的な一貫性を検証してください。データベースは dbo 専用モードに設定されました。データベースが使用可能な状態になったら、データベース オプションを再設定し、余分なログ ファイルを削除してください。
‘Northwind’ の DBCC 結果。
Service Broker メッセージ 9675、状態 1: 分析されるメッセージ型: 14。
Service Broker メッセージ 9676、状態 1: 分析されるサービス コントラクト: 6。
Service Broker メッセージ 9667、状態 1: 分析されるサービス: 3。
Service Broker メッセージ 9668、状態 1: 分析されるサービス キュー: 3。
Service Broker メッセージ 9669、状態 1: 分析されたメッセージ交換のエンドポイント: 0。
Service Broker メッセージ 9674、状態 1: 分析されたメッセージ交換グループ: 0。
Service Broker メッセージ 9670、状態 1: 分析されるリモート サービス バインド: 0。
Service Broker メッセージ 9605、状態 1: 分析されたメッセージ交換の優先度: 0。
‘sys.sysrscols’ の DBCC 結果。
オブジェクト "sys.sysrscols" の 10 ページには 785 行あります。

~ 省略 ~

‘Suppliers’ の DBCC 結果。
オブジェクト "Suppliers" の 1 ページには 29 行あります。
CHECKDB により、データベース ‘Northwind’ に 0 個のアロケーション エラーと 0 個の一貫性エラーが見つかりました。
DBCC の実行が完了しました。DBCC がエラー メッセージを出力した場合は、システム管理者に相談してください。
メッセージ 824、レベル 24、状態 2、行 1
SQL Server で、一貫性に基づいた論理 I/O エラーが検出されました: 無効な保護オプション。このエラーは、ファイル ‘C:Program FilesMicrosoft SQL ServerMSSQL10.SQL2008MSSQLDATAnorthwnd.ldf’ のオフセット 0000000000000000 にあるデータベース ID が 7 のページ (2:0) の 読み取り 中に発生しました。SQL Server エラー ログまたはシステム イベント ログ内の別のメッセージで詳細情報が報告されることもあります。このエラー状態は深刻で、データベースの整合性を損なう可能性があるので、すぐに解決する必要があります。完全なデータベース一貫性確認 (DBCC CHECKDB) を実行してください。このエラーには多くの要因があります。詳細については、SQL Server オンライン ブックを参照してください。

このような形でログファイルが破損していても、データファイルのデータは復旧することが可能です。

SQL Server 2000 / 2005 / 2008 ではログの再構築により、トランザクションログが破損していても
データファイル上のデータを復旧することができます。

ただし、ダーティーページに関してはデータファイル上に書き込みがされていませんので、このようなデータは
トランザクションログだけに書き込まれており、データファイル上には存在しません。

この辺はチェックポイントの発生タイミングに依存しますので、復旧間隔の設定によってどの程度の
データがデータファイルに書き込まれているかが変わっていきます。

[データファイルだけをアタッチ]

SQL Server 2000 以降では sp_attach_singile_file_db というデータファイルだけをアタッチする
ストアドプロシージャがあります。
ログファイルが破損した状態のデータファイルだけをアタッチしようとしたところこの方法は
うまくいきませんでした。

CREATE DATABASE でアタッチする方法も同様でエラーとなってしまいました。

SQL Server 2005 以降では復旧中になっているデータベースはデタッチできないようになっているので、
間違ってエントリをはずすことはないかとは思いますが。

SQL Server 2000 では sp_attach_single_file_db による、単一のデータファイルによるアタッチしか、
データファイルをアタッチする方法がありませんが、状況によってはデータファイルのアタッチによる
復旧ができる可能性もあるかと思います。
# 今回、私は失敗しましたが・・・。

ログファイルが二重化できないのである程度の復旧となってしまいますので、トランザクションログの構成については
Oracle に優位性があるのは確かだと思います。

ただし、SQL Server ではバックアップ取得時点でなくても途中までは復元できる可能性は残っています。
# DBCC でログを再構築した場合はログチェーンも切れてしまうと思いますので、トランザクションログの
? バックアップ運用をしていても直前までは復元できないと思います。

よい機会だったので、復元のメモ書きとして投稿しておきます。

Written by Masayuki.Ozawa

9月 4th, 2009 at 4:26 pm

Posted in SQL Server