我正在使用 SQL Server Express 2008 R2。新创建的数据库的自动关闭属性将设置为与模型 db 相同的值。在我的例子中,我已经将模型的 autoclose 设置为 false,这样当我创建一个新数据库时,它也会将 autoclose 设置为 false。
如果我将自动关闭设置为 false 的数据库分离然后附加它,则自动关闭设置为 true。我期待 autoclose 是假的,因为它会从模型数据库继承它的属性。在我的情况下,分离和附加数据库会导致 autoclose 属性设置为 true。
为什么会这样?这个问题有什么解决办法吗?
附加数据库根本不涉及模型,因此没有自动方法强制将模型数据库设置应用于以后附加的任何数据库。这仅用于您创建的
CREATE
数据库,甚至更严格,您创建的数据库没有FOR ATTACH
orFOR ATTACH_REBUILD_LOG
。在 Express 中,附加的数据库会自动附加为
AutoClose = true
,因此您无法对模型或附加过程本身进行任何操作来将其设置为 false。您需要在附加后手动将其设置为 false,或者我想您可以设置一个定期作业,检查自上次作业运行以来创建的任何数据库是否启用了此设置(或在all),并为您将其设置为 false。为什么 Express 会这样工作?因为 Express 主要是为本地开发而设计的,并且为了节省开发人员工作站上的资源(与生产服务器相比,它通常没有大量可用资源),它只保存正在使用的开放数据库。联机丛书中的这个主题有助于解释,尽管它没有明确说明附加到 Express 的任何数据库都将此属性设置为 true。
如果您不想处理此问题(以及其他 Express 限制),您始终可以使用 Developer Edition。