web-dev-qa-db-ja.com

SQL Server 2014 SP1のインストールの失敗-SSIS_hotfix_install.sqlのバグ

サーバーにSSISカタログがある場合、 SQL Server 2014 SP1 のインストールは失敗します。その後、サーバーは起動しません。システムデータベースの再構築は役に立ちませんでした(確かに、おそらくシステムデータベースが実際に破損していないため、実際には再構築されなかった可能性があります)。

3188行目のSP1に同梱されているスクリプトSSIS_hotfix_install.sqlにバグがあります。

CREATE NONCLUSTERED INDEX [IX_internal_object_parameters_inc] ON [internal].[object_parameters]

SSISDBをアップグレードすることになっているスクリプトがマスターデータベースで実行されている間、彼らはテーブルに2部構成の名前を使用しました。

スクリプトはデフォルトでC:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Installにありますが、サーバーの起動時に実行するためにそこから取得することはないようです。
おそらくsqlscriptupgrade.dllにあるC:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Binnから取得します。そのスクリプトの実行をバイパスしてサーバーを起動する方法を誰かが知っていますか?

5
vaso

トレースフラグ902 を使用してSQL Serverを起動します。これにより、アップグレードスクリプトの実行がバイパスされます。

  1. スタート->すべてのプログラム-> Microsoft SQL Server 2008 R2またはインストールされている最も高いバージョン->構成ツール-> SQL Server構成マネージャー

  2. SQL Server構成マネージャーで、[SQL Serverサービス]をクリックします。

  3. 右側のウィンドウで、[SQL Server()]を右クリックし、[プロパティ]をクリックします。

  4. [起動パラメーター]タブの[起動パラメーターの指定]ボックスにパラメーター(この場合はトレースフラグ-T902)を入力し、[追加]をクリックします。これで、以下のようなSQL Server Istance起動パラメーターが表示されます。SQL Server Istance起動パラメーター

  5. OKをクリックします。

  6. データベースエンジンを再起動します。
  7. SQL Server Management StudioからSQL Serverインスタンスに接続し、修正アクションを実行して、スクリプトのアップグレードが失敗する原因となっているエラーを解決します。
  8. 最後に、SQL Server構成マネージャーから-T902トレースフラグを削除します。
  9. SQL Serverインスタンスを再起動します
  10. エラーログを確認して、スクリプトのアップグレードが正常に完了したことを確認します

次に、SSIS_hotfix_install.sqlスクリプトを手動で実行します(3188行目にSSISDB.を追加した後)。

10
Michael Barrett

私は提案された手順を試してみました-それはうまくいくことができませんでした。その後の起動時に、-T902トレースフラグを削除した後、サーバーはdllにコンパイルされた同じスクリプト(上記を参照)を実行しようとしますが、変更できません。スクリプトは、それに含まれる変更がすでに適用されていることを検出しないので、馬鹿げています。私が考えることができる汚い回避策は、スクリプトがそれにインデックスを構築して成功させるためにマスターデータベースにそのテーブルを作成することです。私はこれをテストし、それは働いた。手順全体:

  1. インストールが失敗した後、-T902起動パラメーターを設定します。
  2. サーバーで次のコードを実行します。

USE master; GO create schema internal; go CREATE TABLE [internal].[object_parameters]( [parameter_id] [bigint] IDENTITY(1,1) NOT NULL, [project_id] [bigint] NOT NULL, [project_version_lsn] [bigint] NOT NULL, [object_type] [smallint] NOT NULL, [object_name] nvarchar NOT NULL, [parameter_name] [sysname] NOT NULL, [parameter_data_type] nvarchar NOT NULL, [required] [bit] NOT NULL, [sensitive] [bit] NOT NULL, [description] nvarchar NULL, [design_default_value] [sql_variant] NULL, [default_value] [sql_variant] NULL, [sensitive_default_value] varbinary NULL, [base_data_type] nvarchar NULL, [value_type] char NOT NULL, [value_set] [bit] NOT NULL, [referenced_variable_name] nvarchar NULL, [validation_status] char NOT NULL, [last_validation_time] datetimeoffset NULL, CONSTRAINT [PK_Object_Parameters] PRIMARY KEY CLUSTERED ( [parameter_id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

  1. -T902起動パラメーターを削除し、サーバーを再起動します

  2. 実行してマスターデータベースをクリーンアップする

use master; drop table [internal].[object_parameters]; drop schema internal;

  1. 上記のように3188行目を修正した後、SSIS_hotfix_install.sqlを手動で実行します。

  2. サーバーを再起動します。

手順の最後に修正されたSSIS_hotfix_install.sqlを実行する理由は、SQL Serverがアップグレードが正常に完了したと見なす前に、dllに埋め込まれたバグのあるスクリプトがその後の起動時にインデックスを削除しないようにするためです。

4
vaso