数据库脚本未在SQL Server 2008中执行

时间:2013-01-22 14:38:36

标签: sql-server sql-server-2008 sql-server-2008-r2

在我的SQL Server 2008 R2中,我有一个成功生成的数据库脚本,但是当我尝试执行该脚本时,它只显示执行查询消息而没有任何反应。 我已经等了至少10分钟才能获得结果,但我必须完全停止执行该查询。

  

注意:所有其他查询都正常工作,但只有数据库脚本没有执行,如上所述

我不知道发生了什么......

  

更多细节:在特定的DataBase上没有发生这种情况,这是我的SQL Server的所有数据库上的一个问题。

让我们举例来看 在SQL Server 2008 R2中,我有以下类型的脚本。

USE [master]
GO
/****** Object:  Database [BillingApplication]    Script Date: 01/22/2013 17:42:04 ******/
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'BillingApplication')
BEGIN
CREATE DATABASE [BillingApplication] ON  PRIMARY 
( NAME = N'BillingApplication', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\BillingApplication.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'BillingApplication_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\BillingApplication_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
END
GO
ALTER DATABASE [BillingApplication] SET COMPATIBILITY_LEVEL = 100
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [BillingApplication].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [BillingApplication] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [BillingApplication] SET ANSI_NULLS OFF
GO
ALTER DATABASE [BillingApplication] SET ANSI_PADDING OFF
GO
ALTER DATABASE [BillingApplication] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [BillingApplication] SET ARITHABORT OFF
GO
ALTER DATABASE [BillingApplication] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [BillingApplication] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [BillingApplication] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [BillingApplication] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [BillingApplication] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [BillingApplication] SET CURSOR_DEFAULT  GLOBAL
GO
ALTER DATABASE [BillingApplication] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [BillingApplication] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [BillingApplication] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [BillingApplication] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [BillingApplication] SET  DISABLE_BROKER
GO
ALTER DATABASE [BillingApplication] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [BillingApplication] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [BillingApplication] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [BillingApplication] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [BillingApplication] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [BillingApplication] SET READ_COMMITTED_SNAPSHOT OFF
GO
ALTER DATABASE [BillingApplication] SET HONOR_BROKER_PRIORITY OFF
GO
ALTER DATABASE [BillingApplication] SET  READ_WRITE
GO
ALTER DATABASE [BillingApplication] SET RECOVERY FULL
GO
ALTER DATABASE [BillingApplication] SET  MULTI_USER
GO
ALTER DATABASE [BillingApplication] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [BillingApplication] SET DB_CHAINING OFF
GO
EXEC sys.sp_db_vardecimal_storage_format N'BillingApplication', N'ON'
GO
USE [BillingApplication]
GO
/****** Object:  Table [dbo].[tbCustBill]    Script Date: 01/22/2013 17:42:07 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tbCustBill]') AND type in (N'U'))
BEGIN
                    -- And continue the entire script

正如我在 SQL Server Profiler 中看到的那样,直到下面的代码完美地执行为止。

    ALTER DATABASE [BillingApplication] SET RECURSIVE_TRIGGERS OFF
        GO

在下一行执行停止。
我不知道发生了什么...... 强制完全停止执行,生成错误如下

  

Msg 5069,Level 16,State 1,Line 1   ALTER DATABASE语句失败。

所以,这可能是一些SQL Sever配置问题...

2 个答案:

答案 0 :(得分:4)

我认为您需要确保可以对数据库进行独占锁定以更改此设置。即使您刚刚创建了数据库,也可能已建立了多个连接。确保在Management Studio中禁用IntelliSense,没有其他窗口连接到此数据库,并且您将上下文切换到另一个数据库。然后将数据库设置为单个用户,进行更改并将其设置回来:

USE master;
GO

ALTER DATABASE BillingApplication SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

ALTER DATABASE BillingApplication SET RECURSIVE_TRIGGERS OFF;
GO

ALTER DATABASE BillingApplication SET DISABLE_BROKER;    
GO

... other changes ...

ALTER DATABASE BillingApplication SET MULTI_USER;
GO

如果仍然等待,那么您可能正在等待某个非常大的事务回滚,并且您可以通过查看sys.dm_exec_requests和/或sys.dm_os_waiting_tasks在另一个窗口中查看您正在等待的内容。

但是,如果您正在创建数据库,为什么您认为需要显式禁用代理?它默认没有启用...

答案 1 :(得分:0)

你有

  

ALTER DATABASE [BillingApplication] SET DISABLE_BROKER

没有ONOFF。设置它,它应该工作。


不,那不是。我猜它与Service Broker子系统有关,但这不是我熟悉的。希望知道该系统的其他人可以回答这个...... \