我有一个 3 节点 Always On AG,它托管一个 5TB 数据库。由于业务需求,在每个月第一天的凌晨 12:01,我需要在附加上个月名称的第 3 个节点(副本)上创建该数据库的副本。例如,在 4 月 1 日,我创建了一个名为“mydatabase_march2021”的数据库,它是截至 4 月 1 日凌晨 12:01 的“mydatabase”的副本。
我当前的流程是在凌晨 12:01 从第 3 个节点上的 AG 中立即删除 DB,重命名它,然后开始将 5TB 的 DB 备份和恢复到第 3 个节点并将其添加到 AG 的缓慢过程。有没有其他方法可以做到这一点而不必完全重新初始化第三个节点上的数据库?我需要在凌晨 5 点之前将这个副本提供给商业用户。
我曾尝试从 AG 中删除 DB,使 SQL 脱机,制作 DB 文件的副本,但无法附加这些文件并使 DB 保持恢复状态(这是重新初始化所必需的)。
附加信息:
Windows Server 2016 Standard
SQL Server 2012 SP4 Enterprise(将在明年的某个时间升级到 SQL 2016 或 2019)
节点 1 位于数据中心 A
节点 2 和节点 3 位于数据中心 B
我希望这个问题不会太主观以至于它已经结束,因为我认为它可以帮助新的 DBA,他们希望更好地全面了解如何成为一名有能力、知识渊博的 DBA,并且精通他们的行业。
谢谢你。
在sql server中,当我们扩展安全性,扩展登录名时,有登录名列表。
所有这些都存储在主数据库中吗?
如果是这样,那么在迁移到另一台服务器时,如果我们备份这个主数据库并恢复到新服务器,那么登录名是否会迁移到新服务器?
同样,SQL 服务器作业、计划等存储在 msdb 中?这可以备份/恢复以将作业迁移到新服务器吗?
如果没有,那么备份这些系统数据库的目的是什么?
我不小心更改了 Microsoft 2016 SQL 数据库上的存储过程。然后我注意到报告方投诉后的变化。做了一些更改并运行但没有工作。不是我需要恢复两周前存储的过程。谁能解释一下这个过程。
将带有前导零的数字保存到字符串变量或列中时,前导零将被截断。
当我运行此查询时:
declare @varchar as nvarchar(50)
set @varchar = 011
print @varchar
Run Code Online (Sandbox Code Playgroud)
我得到的结果是 11。
有没有办法得到011?
是否有 DMV 或其他机制可以返回执行 session_id 的命令超时?
声明默认列值时不允许使用列名。有没有解决方法来实现这样的目标?
CREATE TABLE [dbo].[Tasks]
(
[TaskId] INT IDENTITY(1,1) NOT NULL,
[TaskName] NVARCHAR(255) NULL,
[Priority] INT NOT NULL UNIQUE DEFAULT Max(Priority)+1, -- not allowed
)
Run Code Online (Sandbox Code Playgroud)
要求是默认情况下最新的任务获得最低优先级(最高 int 值)。在任务在表中之后,它可以被优先化/去优先化,例如优先级值与表中的任何其他任务交换。
我正在使用SQL Server 2014并且我需要修改我现有的T-SQL查询,以便它适用于链接服务器。
我现有的代码如下:
USE [MyDatabase]
SELECT name
FROM sysobjects
WHERE id IN ( SELECT id
FROM syscolumns
WHERE name like '%SPA%' )
Run Code Online (Sandbox Code Playgroud)
我通常使用以下方法连接到链接服务器:
Use [MyDatabase]
Select * from [xxx.xx.0.20].[LinkedDatabaseName].dbo.[TableName]
Run Code Online (Sandbox Code Playgroud)
我已经尝试了这里给出的答案(但它仍然不起作用):无法通过链接服务器查询 SQL 服务器元数据
这是我的尝试(尽管与上面显示的现有代码相比,我不太明白为什么我需要将该点 (.) 放在 sysobjects 中):
USE [MyDatabase]
SELECT name
FROM [xxx.xx.0.20].[LinkedDatabaseName].sys.objects
WHERE id IN ( SELECT id
FROM syscolumns
WHERE name like '%SPA%' )
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:“无效的列名 'id'。”
是否有我可以运行的查询来显示所有带有标识列的表?试图找出是否有任何基于身份的表,其当前身份接近 int32 或 int64 的上限。
我们将 SQL Server 数据库移至 Azure 中的虚拟机。
由于数据库只包含历史数据并且不再有事务,我们希望按计划关闭和打开 VM 以降低成本。
据我所知,如果机器在事务中间重新启动,可能会发生数据库损坏,所以我对此有三个问题:
当机器关闭时,在没有事务的数据库中会发生数据库损坏吗?
是否有正确的方法来关闭机器并避免损坏情况?
我们应该让这台机器 7 x 24 运行吗?