Olaの完全なSQL Serverメンテナンスソリューションまたは個々のデータベースバックアップスクリプトを実行すると、次のエラーが発生します。
MSG 207、レベル16、状態1、プロシージャDatabaseBackup、1545行目無効な列名 'schemaName'。
これは、スクリプトの先頭でこの変数が@databasesInParallel
に設定されていても、実行しようとしているように見える'N'
セクションの一部です。私は何も変更しておらず、このスクリプトは他のサーバーで完全に機能します。
dbo.Queue
テーブルは存在しますが、SchemaName
列がありません。これは、Olaのソリューションとは関係のないカスタムdbo.Queueテーブルが原因である可能性があります。メンテナンスプランでテーブルの名前を変更するか、既存のテーブルを削除することができます。
エラーの再現
ステップ1:メンテナンスソリューションを再作成する手順
ステップ2SchemaName
なしでdbo.Queue
テーブルを作成します
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Queue]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Queue](
[QueueID] [int] IDENTITY(1,1) NOT NULL,
-- [SchemaName] [sysname] NOT NULL,
[ObjectName] [sysname] NOT NULL,
[Parameters] [nvarchar](max) NOT NULL,
[QueueStartTime] [datetime] NULL,
[SessionID] [smallint] NULL,
[RequestID] [int] NULL,
[RequestStartTime] [datetime] NULL,
CONSTRAINT [PK_Queue] PRIMARY KEY CLUSTERED
(
[QueueID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
END
GO
ステップ3:dbo.QueueDatabase
テーブルを作成します
ステップ4:バックアップを取るようにする
USE [MNGDB]
GO
EXEC [dbo].[DatabaseBackup]
@Databases = N'MNGDB',
@Directory = N'G:\Data',
@BackupType = N'FULL'
エラー:
メッセージ207、レベル16、状態1、プロシージャdbo.DatabaseBackup、行1545 [バッチ開始行5]無効な列名 'SchemaName'。メッセージ207、レベル16、状態1、プロシージャdbo.DatabaseBackup、1555行目[バッチ開始行5]無効な列名 'SchemaName'。メッセージ207、レベル16、状態1、プロシージャdbo.DatabaseBackup、行1561 [バッチ開始行5]無効な列名 'SchemaName'。
なぜ
テーブルは存在するが、schemaname
列は存在しないため、クエリは失敗します。テーブルが存在しない場合は成功します。
エラーの原因となった部分のテストと解決
DECLARE @DatabasesInParallel char(1) = 'N', @SchemaName varchar(255) = 'test', @ErrorMessage nvarchar(max)
IF @DatabasesInParallel = 'Y'
BEGIN
BEGIN TRY
SELECT QueueID
FROM dbo.[Queue]
WHERE SchemaName = @SchemaName
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0
BEGIN
ROLLBACK TRANSACTION
END
SET @ErrorMessage = 'Msg ' + CAST(ERROR_NUMBER() AS nvarchar) + ', ' + ISNULL(ERROR_MESSAGE(),'') + CHAR(13) + CHAR(10) + ' '
RAISERROR(@ErrorMessage,16,1) WITH NOWAIT
END CATCH
END
エラーメッセージ
Msg 207, Level 16, State 1, Line 1892
Invalid column name 'SchemaName'.
以前に作成した2つのテーブルを削除する
drop table dbo.[QueueDatabase];
drop table dbo.[Queue];
ステートメントを再実行してもエラーは発生しません。
コマンドは正常に完了しました。