可以在 SQL Server 2008 中重新计算行大小吗?拿这个例子:
declare @counter int
declare @statement nvarchar(max)
set @counter=0
drop table kua2
create table kua2(id int)
while @counter<307
begin
set @statement = N'alter table kua2 add id'+CAST(@counter as nvarchar(max))+N' nvarchar(max)'
exec (@statement)
set @statement = N'alter table kua2 drop column id'+CAST(@counter as nvarchar(max))
exec (@statement)
set @counter=@counter+1
end
alter index all on kua2 rebuild
dbcc cleantable (0,'kua2',0)
alter table kua2 add id0 int
alter table kua2 add id1 int
alter table kua2 add id2 int
alter …Run Code Online (Sandbox Code Playgroud) 好吧,sql db 分区和切换似乎不是一个高度讨论的话题,但它是我正在实施的东西。我在分区功能、分区模式、文件组分配等所有领域都取得了成功。到目前为止,我没有遇到任何分区切换问题,直到发现一个讨厌的 xml 字段正在扼杀性能。所以我尝试添加一个简单的主 xml 分区,但现在所有分区切换都失败了。下面是我在玩的表结构的模拟。
CREATE TABLE [MySchema].[DataTable](
[PartitionKey] [varchar](12) NOT NULL,
[Id] [uniqueidentifier] NOT NULL CONSTRAINT [DF_DataTabe_Id] DEFAULT NewId(),
[ClientId] [smallint] NOT NULL,
[ProjectId] [int] NOT NULL,
[ResponseValue] [nvarchar](255) NULL,
[ResponseValueXml] xml NULL,
CONSTRAINT [PK_DataTable] PRIMARY KEY CLUSTERED
(
[PartitionKey] ASC
, [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS =ON, ALLOW_PAGE_LOCKS = ON)
ON PS_MySchema(PartitionKey)
) ON PS_MySchema(PartitionKey)
Run Code Online (Sandbox Code Playgroud)
对此的一些说明是,分区键是一个基于 clientId、年份和另一个值的复杂/计算键。分区模式建立在一个分区函数上,该函数将客户 + 日期分组,然后将它们放入单独的文件组(按年份) - 使滑动窗口方法易于管理。
事情的一般流程是在同一个文件组中创建一个工作表,使用alter table将所需的分区从DataTable切换到工作表。对着工作台做一些事情,完成后切换回去。这很好用......直到我在 ResponseValueXml 上添加一个主要的 xml 索引。alter table …
我可以将 SQL 2008 R2 数据库附加到不是 R2 的 SQL 2008 吗?
我有一个从 SQL 2008(不是 R2)分离的数据库,可以将它附加到 SQL 2008 R2。
然后我可以从 SQL 2008 R2 中分离数据库并将其附加到 SQL 2008(不是 R2)吗?
我的数据库中有一个相当大的 ER 模型和大量数据。现在我想将这些数据的一个子集放入不同的数据库中以进行测试。问题是如何从所有表中获取一个子集,这样我就不会破坏参照完整性并从数据库中获取孤立的记录?我的意思是,如果我选择 100 条记录,例如从“产品”表中,我如何轻松地从引用的表(以及这些表被引用的表)中获取所有数据?是否有任何工具可用于此目的或仅使用纯 SQL?
sql-server-2008 database-design sql-server referential-integrity
我负责管理多个 SQL Server 实例,其中大多数使用 SQL Server 镜像来复制数据以用于 DR 目的。
我会自动为镜像编写登录、角色和作业的脚本,在发生故障转移时,我们实际上需要运行一个脚本来使镜像联机、应用登录、应用滚动和作业,然后它们就会消失(给予或采取一些不匹配的 SID 和通常的小问题)。
现在,我已经记录了这个故障转移过程,以防万一发生故障时我不在现场;然而,管理层认为这个过程过于复杂,并一直试图推动诸如DoubleTake等可以进行实例级复制的3rd方复制产品。
(公司不想在实例级别使用集群,因为共享存储将成为单点故障——他们不愿意购买多个复制 SAN。)
我们拥有从几兆到 200GB+ 的数据库。
以这种方式,DoubleTake 对于 DR 真的实用吗?我可以相信数据会在主要和次要之间保持最新吗?(正是出于这个原因,我们运行高安全模式镜像。)
我在论坛上读过很多意见,但总是有偏见或未经证实;我对这些产品有一些第一手的经验。
虽然索引重建至少需要与当前索引索引相同的数据文件空间量(因为将创建索引的副本)
我对与重组相关的 SQL Server BOL 的阅读只涉及叶级,并且只需要一个 8KB 的页面,
任何人都可以用简单的技术术语解释重组是如何工作的(内部机制)..?
虽然数据库备份文件只有 2GB,但即使在 x64 12G RAM、i7 机器上,恢复也可能需要 15-20 分钟。当我备份从不同数据库制作的类似大小的备份文件时,恢复会在 3 秒内完成。备份文件只包含一个备份集(我总是检查覆盖现有数据选项)。在其他较慢的机器上,恢复需要更长的时间。
什么可能导致恢复需要这么长时间?
如何将 SQL Server 2000 数据库还原到 SQL Server 2008 实例?
我们有一个数据库女士
DBCC CHECKDB (MS)
Run Code Online (Sandbox Code Playgroud)
或者
ALTER DATABASE MS SET SINGLE_USER
DBCC CHECKDB(MS,REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE MS SET MULTI_USER
Run Code Online (Sandbox Code Playgroud)
错误信息
Msg 0, Level 11, State 0, Line 0:
当前命令发生严重错误。结果,如果有的话,应该被丢弃。Msg 0, Level 20, State 0, Line 0:
当前命令发生严重错误。结果,如果有的话,应该被丢弃。
花费数小时测试每张表后,发现有问题的表是“LC”
DBCC CHECKTABLE(LC)
Run Code Online (Sandbox Code Playgroud)
错误信息
消息 211,级别 23,状态 51,第 1 行:
可能的架构损坏。运行 DBCC 检查目录。
现在,
DBCC CHECKCATALOG
Run Code Online (Sandbox Code Playgroud)
信息
DBCC 执行完成。如果 DBCC 打印错误消息,请联系您的系统管理员。
我也试着看看索引
SELECT * FROM sysindexes
Run Code Online (Sandbox Code Playgroud)
错误信息
消息 211,级别 23,状态 51,第 1 行:
可能的架构损坏。运行 DBCC 检查目录。Msg 0, Level 20, State 0, Line 0: …
我们正在释放 SQL Server 2008 R2 数据库中的大量空间 - 太棒了!足以关心-(我们丢弃了大量不必要的数据)。但数据库文件会保留其文件大小。我们想重新获得它。
我多次听说使用DBCC SHRINKDATABASE会降低数据库的性能 - 据我所知,因为“...收缩操作不会保留数据库中索引的碎片状态,并且通常会将碎片增加到学位” [MSDN]
所以我打算使用DBCC SHRINKDATABASE然后重建我们的索引。