尝试将数据库(来自2014年)附加到我的2016实例。问题是DB还包含Hekaton InMemory功能。我已经复制了所有内容(数据文件,日志文件和Hekaton Filestream文件夹)并确认服务帐户可以完全访问uqestion中的文件夹(非Hekaton数据库附加就好了)但是我不能为我的生活似乎说服允许我使用Hekaton文件流文件夹附加数据库的SQL。
实例完全启用了文件流,我可以创建一个带有Hekaton文件流的数据库,但是附加似乎是一个不同的故事。
这是我的示例代码
CREATE TRIGGER [dbo].[CountryDivisions_Audit]
ON [dbo].[CountryDivisions]
AFTER INSERT, UPDATE
AS
BEGIN
SET NoCount ON
-- prevent recursion
If TRIGGER_NESTLEVEL() > 1 RETURN
UPDATE cdan
SET
[LastUpdatedBy] = USER_NAME()
, [LastUpdatedDateTime] = GETUTCDATE()
FROM
[dbo].[CountryDivisions] AS cdan
JOIN inserted AS i
LEFT JOIN deleted AS d
ON d.[CountryDivisionID] = i.[CountryDivisionID]
ON i.[CountryDivisionID] = cdan.[CountryDivisionID]
WHERE
-- only update records that have actually been updated.
ISNULL(i.[CountryDivisionID], -1) <> ISNULL(d.[CountryDivisionID], -1)
OR ISNULL(i.[ParentDivisionID], -1) <> ISNULL(d.[ParentDivisionID], -1)
OR ISNULL(i.[DivisionCodeISO], '') <> ISNULL(d.[DivisionCodeISO], '')
OR ISNULL(i.[DivisionCodeShort], '') <> ISNULL(d.[DivisionCodeShort], '')
OR ISNULL(i.[DivisionType], '') <> ISNULL(d.[DivisionType], '')
OR (
ISNULL(i.LastUpdatedBy, '') <> ISNULL(d.LastUpdatedBy, '')
AND UPDATE(LastUpdatedBy)
)
OR (
ISNULL(i.LastUpdatedDateTime, '1900-01-01') <> ISNULL(d.LastUpdatedDateTime, '1900-01-01')
AND UPDATE(LastUpdatedDateTime)
)
END
这是我得到的错误:
消息33402,级别16,状态1,行6 指定了无效的目录名称'F:\ MSSQL13.SS \ MSSQL \ UserData \ MyDb-Hekaton'。使用有效的Windows目录名称。
GUI没有任何帮助,因为当文件夹位于不同的位置时,它没有帮助附加Hekton文件流。我复制的文件流文件夹的权限允许服务帐户和NT Service \ MSSQL $$ SS用户完全控制。
如果我取消附加的 With Filestream 部分,那么Sql会尝试从原始位置打开它。
该文件夹已被三重确认为正确(从Windows资源管理器中复制并粘贴到\等),我也尝试从传递的文件夹中删除 \ MyDb-Hekaton 并添加和删除关闭\符号。不管我做了什么,Sql都很冒犯。
(注意:2014年到2016年的方面不是问题 - 如果我移动Hekaton文件夹,如果我在同一个实例上分离并重新连接一个新创建的Hekaton数据库,我也会得到同样的错误)。
答案 0 :(得分:1)
该文件夹本身就是文件组。这样的事情在我的案例中有用:
Create Database MyDb On
( FileName = 'F:\MSSQL13.SS\MSSQL\UserData\MyDb.mdf' ),
( FileName = 'F:\MSSQL13.SS\MSSQL\UserLogs\MyDb_log.ldf' )
( FileName = 'F:\MSSQL13.SS\MSSQL\UserData\MyDb-Hekaton' )
For Attach