web-dev-qa-db-ja.com

OlaHallengren-バックアップデータベースタスク

Olaの完全なSQL Serverメンテナンスソリューションまたは個々のデータベースバックアップスクリプトを実行すると、次のエラーが発生します。

MSG 207、レベル16、状態1、プロシージャDatabaseBackup、1545行目無効な列名 'schemaName'。

これは、スクリプトの先頭でこの変数が@databasesInParallelに設定されていても、実行しようとしているように見える'N'セクションの一部です。私は何も変更しておらず、このスクリプトは他のサーバーで完全に機能します。

1
Stockburn

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];

ステートメントを再実行してもエラーは発生しません。

コマンドは正常に完了しました。

2
Randi Vertongen