SE の雑記

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

クラスター環境の SQL Server 2008 R2 のアクティブノードにパッチ適用した際に発生したエラーについて

leave a comment

前回はローリング アップグレードということで、パッシブ ノードからパッチを適用していました。
アクティブ ノードからパッチを適用したらどうなるのだろうと思って試してみました。

アクティブ ノードでパッチを適用すると、SQL Server のサービスが停止することになります。
そのため、更新プログラムの前提条件のチェックで [ローカル コンピューターが所有するクラスター グループ] で警告が発生します。
image
image

これは、アクティブ ノードでパッチを適用しているので、想定される動作ですね。パッチの適用を継続していきます。

今回使用している環境では、以下のタイミングでエラーが発生してしまいました。
[サービス対象のキャッシュ フォルダーを作成しています。]
image
image

Setup Bootstrap のログには以下のエラーが出力されていました。

2010-12-29 13:08:28 Slp: Error: Action "Microsoft.SqlServer.Configuration.SetupExtension.RunPatchAllInstanceAction" threw an exception during execution.
2010-12-29 13:08:28 Slp: Microsoft.SqlServer.Setup.Chainer.Workflow.ActionExecutionException: スレッドを中止しようとしました。 —> System.Threading.ThreadAbortException: スレッドを中止しようとしました。
2010-12-29 13:08:28 Slp:    場所 System.Threading.WaitHandle.WaitOneNative(SafeHandle waitableSafeHandle, UInt32 millisecondsTimeout, Boolean hasThreadAffinity, Boolean exitContext)
2010-12-29 13:08:28 Slp:    場所 System.Threading.WaitHandle.InternalWaitOne(SafeHandle waitableSafeHandle, Int64 millisecondsTimeout, Boolean hasThreadAffinity, Boolean exitContext)
2010-12-29 13:08:28 Slp:    場所 System.Windows.Forms.Control.WaitForWaitHandle(WaitHandle waitHandle)
2010-12-29 13:08:28 Slp:    場所 System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
2010-12-29 13:08:28 Slp:    場所 System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
2010-12-29 13:08:28 Slp:    場所 Microsoft.SqlServer.Chainer.Infrastructure.NotificationService.OnNotify(Object eventKey, Object notification, Object[] objectArray)
2010-12-29 13:08:28 Slp:    場所 Microsoft.SqlServer.Configuration.SetupExtension.RunPatchAllInstanceAction.ExecuteAction(String actionId)
2010-12-29 13:08:28 Slp:    場所 Microsoft.SqlServer.Chainer.Infrastructure.Action.Execute(String actionId, TextWriter errorStream)
2010-12-29 13:08:28 Slp:    場所 Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.ExecuteActionHelper(TextWriter statusStream, ISequencedAction actionToRun)
2010-12-29 13:08:28 Slp:    — 内部例外スタック トレースの終わり —
2010-12-29 13:08:28 Slp:    場所 Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.ExecuteActionHelper(TextWriter statusStream, ISequencedAction actionToRun)
2010-12-29 13:08:28 Slp:    場所 Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.ExecuteActionWithRetryHelper(WorkflowObject metaDb, ActionKey action, ActionMetadata actionMetadata, TextWriter statusStream)
2010-12-29 13:08:28 Slp:    場所 Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.InvokeAction(WorkflowObject metabase, TextWriter statusStream)
2010-12-29 13:08:28 Slp:    場所 Microsoft.SqlServer.Setup.Chainer.Workflow.PendingActions.InvokeActions(WorkflowObject metaDb, TextWriter loggingStream)
2010-12-29 13:08:29 Slp: Received request to add the following file to Watson reporting: C:UsersClusterAdminAppDataLocalTemptmp7C6.tmp
2010-12-29 13:08:29 Slp: The following is an exception stack listing the exceptions in outermost to innermost order
2010-12-29 13:08:29 Slp: Inner exceptions are being indented
2010-12-29 13:08:29 Slp:
2010-12-29 13:08:29 Slp: Exception type: System.Reflection.TargetInvocationException
2010-12-29 13:08:29 Slp:     Message:
2010-12-29 13:08:29 Slp:         呼び出しのターゲットが例外をスローしました。
2010-12-29 13:08:29 Slp:     Stack:
2010-12-29 13:08:29 Slp:         場所 System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
2010-12-29 13:08:29 Slp:         場所 System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
2010-12-29 13:08:29 Slp:         場所 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
2010-12-29 13:08:29 Slp:         場所 System.Delegate.DynamicInvokeImpl(Object[] args)
2010-12-29 13:08:29 Slp:         場所 System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)
2010-12-29 13:08:29 Slp:         場所 System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)
2010-12-29 13:08:29 Slp:         場所 System.Threading.ExecutionContext.runTryCode(Object userData)
2010-12-29 13:08:29 Slp:         場所 System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
2010-12-29 13:08:29 Slp:         場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
2010-12-29 13:08:29 Slp:         場所 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
2010-12-29 13:08:29 Slp:         場所 System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)
2010-12-29 13:08:29 Slp:         場所 System.Windows.Forms.Control.InvokeMarshaledCallbacks()
2010-12-29 13:08:29 Slp:         場所 System.Windows.Forms.Control.WndProc(Message& m)
2010-12-29 13:08:29 Slp:         場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
2010-12-29 13:08:29 Slp:         場所 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
2010-12-29 13:08:29 Slp:         場所 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
2010-12-29 13:08:29 Slp:         場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
2010-12-29 13:08:29 Slp:         場所 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
2010-12-29 13:08:29 Slp:         場所 System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
2010-12-29 13:08:29 Slp:         場所 Microsoft.SqlServer.Configuration.UIExtension.ShowWizard.ShowUserInterface()
2010-12-29 13:08:29 Slp:         場所 Microsoft.SqlServer.Configuration.UIExtension.ShowActiveObjectTemplate.ThreadStart(Object obj)
2010-12-29 13:08:29 Slp:     Inner exception type: System.Runtime.InteropServices.SEHException
2010-12-29 13:08:29 Slp:         Message:
2010-12-29 13:08:29 Slp:                 外部コンポーネントが例外をスローしました。
2010-12-29 13:08:29 Slp:         Stack:
2010-12-29 13:08:29 Slp:                 場所 System.IO.UnmanagedMemoryStream.ReadByte()
2010-12-29 13:08:29 Slp:                 場所 System.IO.BinaryReader.ReadByte()
2010-12-29 13:08:29 Slp:                 場所 System.IO.BinaryReader.Read7BitEncodedInt()
2010-12-29 13:08:29 Slp:                 場所 System.Resources.ResourceReader._LoadObjectV2(Int32 pos, ResourceTypeCode& typeCode)
2010-12-29 13:08:29 Slp:                 場所 System.Resources.ResourceReader.LoadObjectV2(Int32 pos, ResourceTypeCode& typeCode)
2010-12-29 13:08:29 Slp:                 場所 System.Resources.RuntimeResourceSet.GetObject(String key, Boolean ignoreCase, Boolean isString)
2010-12-29 13:08:29 Slp:                 場所 System.Resources.ResourceManager.GetObject(String name, CultureInfo culture, Boolean wrapUnmanagedMemStream)
2010-12-29 13:08:29 Slp:                 場所 Microsoft.SqlServer.Configuration.InstallWizard.Resources.get_ProgressError()
2010-12-29 13:08:29 Slp:                 場所 Microsoft.SqlServer.Configuration.InstallWizard.ExecutionProgress.UISetFinalInstancePatchingStatus()
2010-12-29 13:08:36 Slp: Watson Bucket 1
Original Parameter Values

2010-12-29 13:08:36 Slp: Parameter 0 : SQL2008@RTM@KB2438347

2010-12-29 13:08:36 Slp: Parameter 3 : System.Reflection.TargetInvocationException@-2146232828

2010-12-29 13:08:36 Slp: Parameter 4 : System.Runtime.InteropServices.SEHException@-2147467259

2010-12-29 13:08:36 Slp: Parameter 5 : RunPatchAllInstanceAction

2010-12-29 13:08:36 Slp:
Final Parameter Values

2010-12-29 13:08:36 Slp: Parameter 0 : SQL2008@RTM@KB2438347

2010-12-29 13:08:36 Slp: Parameter 3 : 0xCF353DCD

2010-12-29 13:08:36 Slp: Parameter 4 : 0xE8A9805D

2010-12-29 13:08:36 Slp: Parameter 5 : RunPatchAllInstanceAction

2010-12-29 13:08:36 Slp: The following exception occurred while preparing status logs during Watson failure processing: 外部コンポーネントが例外をスローしました。
2010-12-29 13:08:36 Slp: Sco: Attempting to write hklm registry key SOFTWAREMicrosoftMicrosoft SQL Server to file C:Program FilesMicrosoft SQL Server100Setup BootstrapLog20101229_130421Registry_SOFTWARE_Microsoft_Microsoft SQL Server.reg_
2010-12-29 13:08:36 Slp: Sco: Attempting to write hklm registry key SOFTWAREMicrosoftWindowsCurrentVersionUninstall to file C:Program FilesMicrosoft SQL Server100Setup BootstrapLog20101229_130421Registry_SOFTWARE_Microsoft_Windows_CurrentVersion_Uninstall.reg_
2010-12-29 13:08:36 Slp: Sco: Attempting to write hklm registry key SOFTWAREMicrosoftMSSQLServer to file C:Program FilesMicrosoft SQL Server100Setup BootstrapLog20101229_130421Registry_SOFTWARE_Microsoft_MSSQLServer.reg_
2010-12-29 13:08:36 Slp: Sco: Attempting to write hklm registry key SOFTWAREWow6432NodeMicrosoftMicrosoft SQL Server to file C:Program FilesMicrosoft SQL Server100Setup BootstrapLog20101229_130421Registry_SOFTWARE_Wow6432Node_Microsoft_Microsoft SQL Server.reg_
2010-12-29 13:08:36 Slp: Sco: Attempting to write hklm registry key SOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionUninstall to file C:Program FilesMicrosoft SQL Server100Setup BootstrapLog20101229_130421Registry_SOFTWARE_Wow6432Node_Microsoft_Windows_CurrentVersion_Uninstall.reg_
2010-12-29 13:08:36 Slp: Sco: Attempting to write hklm registry key SOFTWAREWow6432NodeMicrosoftMSSQLServer to file C:Program FilesMicrosoft SQL Server100Setup BootstrapLog20101229_130421Registry_SOFTWARE_Wow6432Node_Microsoft_MSSQLServer.reg_

 

このエラーですが、ダウンロードしたパッチを事前展開しないで直接実行していたことが原因で発生していたようです。

今回は以下のディスク構成となっています。
image

F ドライブに SQL Server のデータベースが格納されてます。

C ドライブの空き領域より、F ドライブの空き領域の方が大きいのですよね。
インストールが失敗した後の F ドライブを確認してみたいと思います。
image

一つテンポラリのディレクトリが作成されていることが確認できます。
ディレクトリの中身を確認してみると以下のファイルが格納されています。

image

このファイルですが CU5 のインストールファイルになります。
CU5 のダウンロードファイルを実行すると以下のように展開がされていました。
image

F ドライブに入っている SQL Server の更新を行うためのファイルが F ドライブに展開されてしまっているのですよね…。

SQL Server 2008 R2 のパッチ適用時ですが、SQL Server のリソースが含まれるグループが [オフライン] になります。
image
そのため、F ドライブに展開されているパッチのプログラムにアクセスができずにエラーとなってしまいました。
# F ドライブはクラスター ディスク 3 になります。

コマンドで CU5 を手動でクラスターの共有ディスク以外の場所に展開して、展開したモジュールからパッチを適用すると今回のエラーは回避することができます。
ダウンロードしたファイルを [/extract] のオプションを設定して実行することで、モジュールを展開することができます。
image
image

後は展開したモジュールから [setup.exe] を実行すればパッチを適用することが可能です。
手動で展開したモジュールを実行した場合、表示は英語になっているのですがそのままインストールできます。image

SQL Server の言語設定は日本語として認識されており、
image

メッセージも途中から日本語が表示されます。
image

インストールが正常に完了しました。
image

 

SQL Server 2005 まではセットアップをするとアクティブ ノードだけでなく、パッシブ ノードにもパッチが適用されていましたが、SQL Server 2008 R2 では、セットアップを実行したノードにしかパッチは適用されませんので、パッシブ ノードにも明示的にパッチを適用する必要があります。
image

SQL Server 2008 以降のクラスタ環境を構築する際は、スリップストリームセットアップで初期構築時にパッチ適用済みの状態で展開をしていましたので、この辺の動作を今日まで認識できていませんでした…。

Written by masayuki.ozawa

12月 29th, 2010 at 1:57 pm

Leave a Reply

*