今天早上发现在 Win2012 上运行的 SQL Server 2012 服务已经关闭。当我以服务器管理员身份登录并尝试访问 SSMS 时,在输入我的凭据后,我收到了“传输”错误。在检查 Windows 服务时,SQL Server 和代理均已停止。我试图启动它们,但出现超时错误。
SQL 事件日志包含以下条目:
服务器无法加载启动 SSL 连接所需的证书。它返回以下错误:0x8009030d。检查证书以确保它们有效。
Windows 事件日志包含以下条目:
日志名称:应用程序
来源:MSSQLSERVER
日期:14/03/2013 09:01:40
说明:无法加载用户指定的证书 [Cert Hash(sha1) "A1CF6EE1C352B7A185950EB400013269759C24BD"]。服务器将不接受连接。您应该验证证书是否已正确安装。请参阅联机丛书中的“配置 SSL 使用的证书”。
说明:TDSSNIClient 初始化失败,错误为 0x80092004,状态代码为 0x80。原因:无法初始化 SSL 支持。找不到对象或属性。
说明:TDSSNIClient 初始化失败,错误为 0x80092004,状态代码为 0x1。原因:初始化因基础结构错误而失败。检查以前的错误。找不到对象或属性。
描述:由于网络库中的内部错误,无法启动网络库。要确定原因,请查看错误日志中紧接此错误之前的错误。
说明:SQL Server 无法生成 FRunCommunicationsManager 线程。检查 SQL Server 错误日志和 Windows 事件日志以获取有关可能的相关问题的信息。
以下过程解决了该问题:
以上仅解决了问题,直到下次重新启动,再次发生。显然,SSL 证书需要 SQL2012 读取的权限,但我不敢一直重启,直到这个问题得到解决,所以我现在通过 RDC 而不是通过 …
抱歉,如果之前有人问过这个问题,建议的“相关”问题不相关,而且我自己的搜索结果很少。
我需要列出所有存储过程的定义(代码),以便我可以开始处理所有 450 个并添加分号以实现 v2014 标准。
我在这里找到了以下代码并稍微修改了它:
SELECT
obj.Name AS SPName,
REPLACE(modu.definition, 'CREATE PROC', 'ALTER PROC') + 'GO' AS SPDefinition
FROM
sys.sql_modules modu INNER JOIN
sys.objects obj ON modu.object_id = obj.object_id
WHERE
(obj.type = 'P')
ORDER BY
obj.name;
Run Code Online (Sandbox Code Playgroud)
上面的代码是使用 SA 帐户运行的。
我认为这正是我需要的,但是,我刚刚注意到 MSDN 上有人声称它没有按预期显示全文。
将结果粘贴到 SSMS 编辑器中时,我有 46,000 行代码需要处理,因此如果缺少任何内容,对我来说并不明显。我想确保在编辑器中浪费一天之前我已经正确地开始了这个过程。
因此,我正在联系您的专业人士,询问这是否是这种方法的真正缺点,或者是否有替代方法而不是一个一个?
这个问题可能读起来像是重复的,但是是基于情况的,并且是从应用其他答案中的知识的混淆中发布的。
我已经阅读了数十篇文章(在1、2、3、4 中),但我发现了相互矛盾的观点(根据我的理解,现在信息过载,或者我的其他问题中可能没有包含足够的信息)。因此,我创建这个问题是为了根据我的情况获得明确的答案。
鉴于以下备份场景,我需要知道第三方备份软件是否会阻止我执行完整恢复到最新备份点(18:00)?
Time | Action | Device
------|----------------------------------------------|----------------------------
12:00 | Full backup (non copy_only) | D:\MyBackupDevice
13:00 | Tran log backup (non copy_only) | D:\MyBackupDevice
14:00 | Tran log backup (non copy_only) | D:\MyBackupDevice
15:00 | Tran log backup (non copy_only) | D:\MyBackupDevice
16:00 | Full backup (non copy_only) VSS snapshot | Third-party off-site device
17:00 | Tran log backup (non copy_only) | D:\MyBackupDevice
18:00 | Tran log backup …Run Code Online (Sandbox Code Playgroud) 我们有一种情况,使用TRIPLE_DES. 这用于加密密码列,并由大约十个存储过程使用(使用这些与OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE MyCertificate01;)
我想用AES_192. 但是,如果可能,我宁愿避免编辑存储过程。
我写了以下例程:
我的问题是,对于训练有素的眼睛,这里是否有任何事情会引起警钟,特别是因为旧名称和新名称相同,并且这些名称是在存储过程中使用的?
我已经测试了代码并且它有效,但是我缺乏加密经验和今天的信息过载剂量让我非常紧张,因此请求专业知识......
-- Decrypt data
ALTER TABLE [dbo].[tbl_Users] ADD PasswordClear nvarchar(250) NULL;
GO
OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE MyCertificate01;
UPDATE [tbl_Users] SET PasswordClear = CONVERT(nvarchar(250), DECRYPTBYKEY(PasswordEnc))
CLOSE SYMMETRIC KEY SSN_Key_01;
GO
-- Drop old encryption
ALTER TABLE [dbo].[tbl_Users] DROP COLUMN PasswordEnc;
GO
DROP SYMMETRIC KEY SSN_Key_01;
GO
DROP CERTIFICATE [MyCertificate01];
GO
-- Create new certificate …Run Code Online (Sandbox Code Playgroud) sql-server encryption sql-server-2012 certificate symmetric-key
我们有一个每 24 小时运行一次的第三方服务器备份工具,它备份所有内容(文件和数据库,为裸机恢复做准备)。经过大量调查,发现该工具使用了非copy_only备份,从而破坏了系统数据库和我们自己的日志链。
(我一直在研究是否应该备份系统数据库,由于他们持有的关于 SQL Server 一般的数据(例如用户、代理作业等),共识通常是肯定的。这不是关于他们的内容,但如果由于我描述的情况而在恢复后丢失会发生什么)。
为了阻止这种犯罪,我禁用了执行数据库备份的工具,所以现在它只执行文件备份(MDF/LDF 文件除外)。然后我安排 SQL 代理每小时运行一次备份,然后将它们发送到我的私有云。
如果服务器完全故障,并且需要裸机备份,我希望在 SQL 开始备份时数据库不会在那里,因为它们没有被工具备份/恢复(尽管我安全地拥有它们备份)。
此时实际发生了什么?SQL Server 是否会重新创建系统数据库,然后我可以将其还原?或者,它是否只是拒绝启动而我会遇到麻烦?
在 SSMS 代码编辑器(对于 SQL Server 2012)中,我在编辑器中编写了这段代码,应用了深色主题。当您单击一个变量时,SSMS 会突出显示该变量在范围内的所有其他出现。请注意,变量突出显示的颜色在背景中非常暗。

在“工具”>“选项”>“字体和颜色”菜单中,谁能告诉我哪个是Display items编辑此颜色的正确选择?我已经经历了所有可以看到大致匹配相同颜色的颜色,但没有一个实际上影响代码。
我知道之前已经问过同样的问题,但情况略有不同,我想更多地解释为什么它在我的上下文中失败,当(AFAIK)返回类型相同时。
过去,在我的数据库中,我使用基于 CLR 的表值函数将逗号分隔值拆分为包含整数列的表。
因为 SQL2016 引入了STRING_SPLIT,我需要换掉这个函数的 CLR 部分,并替换为原生的 TSQL 函数(因为我有数百个依赖这个函数的存储过程)。
如果我在 SSMS 中修改这个函数,我会看到:
ALTER FUNCTION [dbo].[e4fn_CreateIdTable](
@Ids [nvarchar](max),
@separator [nchar](1))
RETURNS TABLE (
[IdVal] [int] NULL
) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [ValueSplitter].[MyCompany.ValueSplitter].[SplitToIntegers]
Run Code Online (Sandbox Code Playgroud)
我希望我能够像这样改变它:
ALTER FUNCTION [dbo].[e4fn_CreateIdTable] (
@Ids [nvarchar](max),
@separator [nchar](1)
)
RETURNS TABLE
AS RETURN
(
SELECT
CAST(NULLIF(LTRIM(RTRIM(value)), '') AS int) AS IdVal
FROM
STRING_SPLIT(@Ids, @separator)
)
GO
Run Code Online (Sandbox Code Playgroud)
这返回了错误:
无法对“dbo.e4fn_CreateIdTable”执行更改,因为它是不兼容的对象类型。
我认为这是因为没有明确定义输出参数的表定义。所以,我这样重试:
ALTER FUNCTION [dbo].[e4fn_CreateIdTable] (
@Ids [nvarchar](max),
@separator [nchar](1)
)
RETURNS …Run Code Online (Sandbox Code Playgroud) 我有一个 SQL 数据库服务器,它使用R1Soft 备份备份每 24 小时在 02:00 进行一次服务器备份。这是一个完整的文件系统备份(裸机加上每日差异,因此包括操作系统等)。
我想增加一些数据库的备份频率,以便在发生故障时,我可以恢复到15分钟的时间窗口,例如
我无法找到任何关于清晰度是否R1Soft备份(通过完成VSS写入),会引起我的做法任何问题(particuarly打破日志链)。我对 VSS 知之甚少,而且我读得越多,它就越令人困惑。
我联系了 R1Soft 澄清,他们的回应是:
我们正在使用 VSS 进行 SQL 备份。您可以使用这两种解决方案,只要它不会同时运行。我们使用 VSS 编写器将日志刷新到数据中,然后完全备份数据库。
这对我来说毫无意义,因为我不知道他们所说的"data"是什么意思,并且它没有澄清日志链问题。因此,任何有 VSS 经验的人都可以澄清 VSS 备份是否“干扰”本机完整/传输日志备份?从我的研究中,我看到了相互矛盾的消息,因为 Microsoft 站点指出:
SQL Writer 不支持...日志备份
我不知道我是否应该按照我的建议去做,还是应该改为
任何输入,即使只是为了突出我应该问他们的问题,也将不胜感激。我读得越多,我就越困惑。
database_name backup_start_date backup_finish_date expiration_date backup_type backup_size MB logical_device_name physical_device_name backupset_name description is_copy_only is_snapshot checkpoint_lsn database_backup_lsn differential_base_lsn first_lsn fork_point_lsn last_lsn
--------------- ----------------------- ----------------------- ----------------- ----------- ------------------ ----------------------- --------------------------------------------------- --------------- …Run Code Online (Sandbox Code Playgroud)