当前位置:Gxlcms > 数据库问题 > 写代码创建数据库,设置位置后比对用可视化界面创建数据库的区别

写代码创建数据库,设置位置后比对用可视化界面创建数据库的区别

时间:2021-07-01 10:21:17 帮助过:2人阅读


on PRIMARY
(  
    NAME = test1,  
    FILENAME=‘F:\test\test1.mdf‘,   --此路径必须存在才能建成功
    SIZE = 10,  
    MAXSIZE = UNLIMITED,  --不限制增长
    FILEGROWTH = 5  
)  
LOG ON
(  
    NAME=‘test1_dat‘,  
    FILENAME=‘F:\test\test1.ldf‘,  --此路径必须存在才能建成功
    SIZE =5MB,  
    MAXSIZE = 25MB,  
    FILEGROWTH =5MB  
)  
GO     二、用这种方法创建的数据库 跟用可视化界面创建的发现有差异 技术分享右键 新建数据库 技术分享 将两种的建表脚本生成以后对比有区别的是下面项   区别     技术分享   然后逐一找这这些差异所代表的含义    1)ENABLE_BROKER与SET  DISABLE_BROKER的区别,转自http://www.cnblogs.com/wanghk/archive/2012/05/12/2497170.html 未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker

昨晚遇到的这个问题,也知道Notifications service依赖底层的Service broker的。本以为只需要执行以下脚本对数据库启用Service broker即可。

alter database DBNAME set enable_broker

但是,执行后,脚本一直处于执行状态,不以为然,正好在忙其它事情就没有查看运行结果,结果到今早一看,居然运行还没有结束。虽然是在一个生产数据库上执行的,数据库也只有30G的样子,但也不至于执行一个晚上也未结束,只好终止执行,使用

SELECT is_broker_enabled FROM sys.databases WHERE name = ‘DBNAME‘

查看is_broker-enabled为0,依然未启用Service broker

后google下,在一个国外论坛里面找到了解决办法:

ALTER DATABASE DatabaseName SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE Databasename SET ENABLE_BROKER;

执行以上2条语句,未做任何等待,就提示命令执行完成。

SELECT is_broker_enabled FROM sys.databases WHERE name = ‘DBNAME‘

查看is_broker-enabled为1

NEW_BROKER选项,SQL SERVER联机丛书上的解释:

每个数据库都包含一个 Service Broker 标识符。sys.databases 目录视图的 service_broker_guid 列显示该实例中每个数据库的 Service Broker 标识符。Service Broker 路由使用 Service Broker 标识符来保证一个会话的所有消息都传递到同一个数据库。因此,Service Broker 标识符在同一网络上的所有实例中应是唯一的。否则,消息可能被误传。

SQL Server 为每个新数据库生成新的 Service Broker 标识符。由于标识符是新的,因此 SQL Server 可以安全地激活新数据库中的 Service Broker 消息传递。网络上的其他数据库应该不会有与之相同的 Service Broker 标识符。

NEW_BROKER。此选项用于激活 Service Broker 消息传递,同时为数据库创建新的 Service Broker 标识符。由于该数据库中所有的现有会话都未使用新的实例标识符,因此,此选项将结束这些会话并返回一个错误。

ROLLBACK IMMEDIATE将立即回滚未完成的事务。

有四个选项用于管理标识符和消息传递:

  • ENABLE_BROKER。此选项用于激活 Service Broker 消息传递,并且保留数据库的现有 Service Broker 标识符。

    技术分享注意

    在任何数据库中启用 SQL Server Service Broker 都需要数据库锁。若要在 msdb 数据库中启用 Service Broker,请首先停止 SQL Server 代理。然后,Service Broker 才可获得必要的锁。

  • DISABLE_BROKER。此选项用于停用 Service Broker 消息传递,并且保留数据库的现有 Service Broker 标识符。

  • NEW_BROKER。 此选项用于激活 Service Broker 消息传递,并为数据库创建一个新的 Service Broker 标识符。选择此选项将结束数据库中的所有现有会话,并对每个会话返回一个错误。这是因为这些会话不使用新的标识符。必须使用新标识符重新创建任何引用旧 Service Broker 标识符的路由。

  • ERROR_BROKER_CONVERSATIONS。此选项用于激活 Service Broker 消息传递,并且保留数据库的现有 Service Broker 标识符。Service Broker 将结束数据库中的所有会话,并对每个会话返回一个错误。通常,如果某个数据库与其他数据库之间具有打开的会话,并且您要将该数据库还原到一个不同于与之对 话的数据库的时间点,则需要使用此选项。还原的数据库中的所有会话必须以错误结束,因为这些会话现在与其他数据库已不同步。Service Broker 标识符保留,以便引用该标识符的所有路由仍有效。

无论选择指定选项中的哪一个,SQL Server 都不允许具有相同 Service Broker 标识符的两个数据库在 SQL Server 的同一实例中都激活消息传递。如果附加一个数据库,该数据库的 Service Broker 标识符与现有数据库的标识符相同,SQL Server 将停用所附加数据库中的 Service Broker 消息传递。

2)手写脚本创建的数据库未指定PRIMARY  

PRIMARY

指定关联的 <filespec> 列表定义主文件。  在主文件组的 <filespec> 项中指定的第一个文件将成为主文件。  一个数据库只能有一个主文件。  有关详细信息,请参阅数据库文件和文件组。  

如果没有指定 PRIMARY,那么 CREATE DATABASE 语句中列出的第一个文件将成为主文件。

IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N‘PRIMARY‘) ALTER DATABASE [tttt1] MODIFY FILEGROUP [PRIMARY] DEFAULT
GO

3)手动创建的生成脚本里面有TRUSTWORTHY OFF 但是自动的没有这个选项

默认情况下,此设置为“OFF”

写代码创建数据库,设置位置后比对用可视化界面创建数据库的区别

标签:

人气教程排行