我想从 SQL Server 2012 数据库中的表中删除分区。表有主键,但分区列不是主键。我还想保持数据结构和模式完好无损。
我试过:
select *
into [dbo].[new_Non_partitioned_Table]
from [dbo].[partitioned_table]
Run Code Online (Sandbox Code Playgroud)
然后我删除了分区表并重命名了新表。但是,它导致我丢失了数据结构和一些迫使我放弃约束的依赖项 (FK)。这是用于生产和数据丢失不是一种选择。
有没有更好的方法从现有表中删除分区?
如果所有表都在同一个文件中,是否可以找出哪些表对读/写操作的贡献最大?
我一直在看以下 DMV
SELECT *
FROM sys.dm_io_virtual_file_stats
Run Code Online (Sandbox Code Playgroud)
但它只显示整个文件的统计信息,不知道如何拆分成单个表。尝试这样做是为了识别应该放在不同磁盘上自己文件中的表。
给定两个级联的、独立的(没有真正的表)递归 CTE:
create view NumberSequence_0_100_View
as
with NumberSequence as
(
select 0 as Number
union all
select Number + 1
from NumberSequence
where Number < 100
)
select Number
from NumberSequence;
go
create view NumberSequence_0_10000_View
as
select top 10001
v100.Number * 100 + v1.Number as Number
from Common.NumberSequence_0_100_View v100
cross join Common.NumberSequence_0_100_View v1
where v1.Number < 100
and v100.Number * 100 + v1.Number <= 10000
-- please resist complaining about "order by in view" for this question
order by v100.Number …Run Code Online (Sandbox Code Playgroud) sql-server cte sql-server-2012 recursive cardinality-estimates
有没有办法找到作为阻止重用事务日志文件 VLF 的活动事务的一部分的 T-SQL 语句?
我每 15 分钟执行一次 tlog 备份,但有时会返回以下查询ACTIVE_TRANSACTION或LOG_BACKUP(甚至这样):
SELECT [name]
,[recovery_model_desc]
,[log_reuse_wait_desc]
FROM [sys].[databases]
Run Code Online (Sandbox Code Playgroud)
如果我运行,DBCC Loginfo我可以看到 firsts 和 lasts 行都有 status 0。
这是在 SSC 交叉发布的,但现在恢复需要 6 个小时。
你好,
一夜之间,我使用 NORECOVERY 对 5tb 数据库以及其他几个 250GB - 1.3tb 数据库进行了恢复。我这样做是因为有时我们的 3rd 方备份软件会在认为某些内容超时而实际上没有超时时抛出古怪的 LSN 错误。无论如何,恢复完成没有错误。今天早上,我开始运行 RESTORE WITH RECOVERY 命令,使它们联机以进行 DBCC 检查。
在第一个数据库上运行良好,在 5tb 数据库上卡住了大约一个小时,然后我在其余六个数据库上与 5tb 并行运行命令。他们都恢复得很快。5tb 的数据库现在已经恢复了大约 3 个小时。
任何想法:
为什么这会比两者都花费更长的时间:
a) 恢复通常需要多长时间,以及 b) 比其他数据库恢复所需的时间长得多?
如果我应该取消/终止交易并尝试重新开始
我可以看到它在 sp_WhoIsActive 中做了一些事情,即信息列正在增加,等待信息发生变化(尽管它似乎总是处于等待状态是 IO_COMPLETION),但状态似乎总是被挂起。
在研究时,我发现一篇文章表明高 VLF 计数可能导致此问题,并且日志文件中大约有 5k VLF,但我使用的是 2012 版本,已针对该问题进行了修补:
Microsoft SQL Server 2012 - 11.0.5532.0 (X64) 2014 年 7 月 14 日 15:00:27 版权所有 (c) Microsoft Corporation Developer Edition(64 位)在 Windows NT 6.3(Build 9600:)(Hypervisor)上
谢谢
编辑:
这是在我用于卸载 DBCC …
我正在尝试使用安装了 SQL Server 2012 的本地计算机中的复制向导将数据库从 SQL Server 2000 复制到 SQL Server 2012。但是,向导未检测到目标服务器。Source DB 在网络上,Destination 是我的本地机器本身。
当我选择目标服务器作为我的本地机器时,我收到以下错误:
标题:复制数据库向导
目标服务器不能是 SQL Server 2005 或更高版本的 Express 实例。
如果“源”早于 SQL Server 2005,是否不支持复制数据库向导?但错误消息仅说明“目的地”。这里我的目的地是 SQL Server 2012,源是 SQL Server 2000。
上下文:MS SQL Server 2012
在使用 Kendra Little 的强大工具 sp_BlitzIndex 时,许多表被诊断为“索引囤积者:沉迷于空值”。
我不是在寻找关于 NULL 及其位置的辩论。我知道在某些情况下 NULL 非常合适,甚至是必要的。这里的问题是 sp_BlitzIndex 提供的反馈,以及强制执行 not NULL 约束的值。
在 sp_BlitzIndex 被“诊断”为具有许多允许 NULL 的列的大多数表中,没有任何实际的 NULL 值。我们以编程方式不允许它们。我只是从未取消选中“允许空值”框以在数据库级别强制执行该约束。
强制执行此约束有什么好处,为什么它是她的脚本确定的问题之一?
谢谢!
我正在开发一个 ETL,其提取步骤必须从表中读取数据。
有时我的用户对该表的访问权限被撤销。因此,为了避免 ETL 失败,在阅读表之前,我必须验证我是否有权这样做。如果没有,我将跳过提取步骤并运行 ETL 的其余部分。
验证我的用户是否对表具有读取权限的正确方法是什么?
我有一个大的分区时间序列表,其中每个分区都存储在它自己的文件中。由于它是基于时间序列的分区按周划分,而且我只存储新数据,因此我一次积极写入的分区不超过 2 个。我在索引上将 FILLFACTOR 设置为 75,因为数据是随机输入的。
旧的数据分区占用了相当多的空间,仅使用了大约 60-70% 的空间。是否可以自动更改所述分区上的 FILLFACTOR,重建索引并缩小文件?由于我不再写入这些分区,因此它们的大小不应再增长。
作为此问题的背景,可以在此链接中找到详细信息。
简而言之:除了RIGHT表之外,我有 2 个几乎相同的 SQL 语句。该LEFT JOIN是相同的,并且返回的列不同,因为该表是不同的。数据库从 2008 年移至 SQL Server 2012 实例。在 2012 实例上,1 个查询在 3 秒内执行,而另一个则需要将近 2 小时才能执行。执行计划有所不同,并发布在链接上。
但是,我可以接受这两个查询并在 SQL Server 2008 服务器上执行它们,它们都在 3 秒内完成。2008 服务器上的两个执行计划与 2012 服务器上的“良好”执行计划相同。
我有一个可以工作的新语句,但它所使用的应用程序是一个使用内联 SQL 的 C# windows 应用程序。我不想打破这个 1 语句的模式。任何人都可以阐明这个问题吗?
sql-server t-sql execution-plan sql-server-2008-r2 sql-server-2012
sql-server-2012 ×10
sql-server ×9
partitioning ×2
cte ×1
dmv ×1
fill-factor ×1
index-tuning ×1
null ×1
permissions ×1
recursive ×1
shrink ×1
ssis-2012 ×1
t-sql ×1