标签: sql-server

用于归档数据的表分区

设想:

  • 两个数据库:DB_A 和 DB_Archive,有一个非常大的表叫做 tableA。
  • 每天,超过 60 天的记录从 DB_A 中删除并移动到 DB_Archive 主要是为了让事物“分离”,因为 tableA 在 DB_A 上被大量查询过去 2 个月的记录。

我想摆脱这个过程,因为它很慢并且消耗大量资源。我正在考虑使用日期列上的分区函数在 DB_A 上实现表分区,并在一个分区上存储 < 2 个月的所有记录,在另一个分区上存储 > 2 个月的所有记录。我的问题:

  • 如果我有 2 个不同的数据库,这种情况是否会表现得像?如果我查询 tableA 中的记录 > getdate() - 30,它会读取归档分区吗?
  • 我想我也必须对索引进行分区,对吗?
  • 我如何处理明天我的分区函数将“更改”的事实,我的意思是,如果我今天创建该函数(7 月 2 日,其范围将是 5 月 2 日,但明天将是 5 月 3 日)。我可以创建动态分区函数吗?

sql-server-2005 sql-server partitioning

13
推荐指数
2
解决办法
4915
查看次数

重建索引,DB 现在大小是原来的 10 倍

我有一个大约 15 个演出的 SQL Server 数据库(2008 R2 SP1)。结果发现维护已经有一段时间没有运行了,所以我创建了一个维护计划来重建所有索引,它们非常分散。

工作完成,碎片消失了,但现在数据库超过 120 个演出!我知道它会使用额外的空间来进行所有重建,但是现在工作已经完成,我认为所有空间都将是可用空间,但可用空间仅显示为 3 个演出,因此正在使用 117 个演出即使索引重建作业已完成。

我很困惑,可以使用一些指导,我让数据库恢复到合理的大小,我们没有磁盘空间。

提前致谢!

这是发布的两个查询的结果:

log_reuse_wait_desc 什么都没有

name    TotalSpaceInMB  UsedSpaceInMB   FreeSpaceInMB
LIVE_Data   152             123             28
LIVE_Log    18939           89              18849
LIVE_1_Data 114977          111289          3688
Run Code Online (Sandbox Code Playgroud)

第三个文件是 .ndf 文件,该文件在未使用空间中仅显示 3688,但 111289 用于大约 15 演出数据。

sql-server-2008 sql-server sql-server-2008-r2

13
推荐指数
2
解决办法
8454
查看次数

“TASK MANAGER”进程正在接管一个单用户模式的数据库。它是什么?

这是我在stackoverflow 上提出的问题的重复,但有人建议我,这里有人可以更好地了解发生了什么。

我有一个偶发的问题,当在单用户模式下升级 SQL Server 时,使用 .NET SqlConnection,其他一些应用程序以某种方式登录到数据库,同时执行 SQL 代码,并将我的进程踢出去。SqlConnection 不会以任何方式关闭或处理。但是其他一些应用程序以某种方式最终连接到数据库,这将我的连接踢出去。

当我运行 sp_who 时,我可以看到控制数据库的进程是 Command="TASK MANAGER"。

任何人都可以告诉我这个过程是什么,它的目的是什么,它究竟是如何进入数据库的,它是单用户模式,并且有一个活动连接?

sql-server-2008 sql-server

13
推荐指数
3
解决办法
2万
查看次数

如何从字符串中去除非数字字符?

用户在一个框中输入一个搜索词,该值被传递到一个存储过程,并根据数据库中的几个不同字段进行检查。这些字段并不总是具有相同的数据类型。

一个字段(电话号码)由所有数字组成,因此在检查它时会使用 .Net CLR 函数从字符串中去除所有非数字字符。

SELECT dbo.RegexReplace('(123)123-4567', '[^0-9]', '')
Run Code Online (Sandbox Code Playgroud)

问题是,此功能有时会突然停止工作,并出现以下错误:

Msg 6533, Level 16, State 49, Line 2
AppDomain MyDBName.dbo[runtime].1575 被升级策略卸载,以确保 
应用程序的一致性。访问关键资源时发生内存不足。
System.Threading.ThreadAbortException:类型异常 
'System.Threading.ThreadAbortException' 被抛出。
System.Threading.ThreadAbortException: 

我已经尝试了MSDN 上针对此错误发布的建议,但仍然遇到问题。目前,切换到 64 位服务器不是我们的选择。

我知道重新启动服务器会释放它拥有的任何内存,但这在生产环境中不是一个可行的解决方案。

有没有办法仅使用 T-SQL 从 SQL Server 2005 中的字符串中去除非数字字符?

sql-server-2005 sql-server t-sql

13
推荐指数
2
解决办法
8万
查看次数

镜像 - 无法访问服务器网络地址

我安装了 SQL Server 2008 R2。它包含三个实例。

  1. 默认 (MSSQLServer)
  2. 第一个例子
  3. 第二审

所有这些都是作为网络服务登录..

默认实例是主体服务器第一个实例是镜像第二个实例是见证服务器

我最初对我的主体数据库进行了完整备份和事务日志备份。通过保持相同的数据库名称将其恢复到第一个实例,恢复状态为无恢复

最后,我启动了镜像,并收到如下所示的两条错误消息。

在此处输入图片说明

在此处输入图片说明

sql-server-2005 sql-server-2008 sql-server mirroring

13
推荐指数
1
解决办法
3万
查看次数

复制并重命名 db 以便我可以附加两个副本

我在服务器上有一个名为“mysite_db”的数据库,我在我的本地机器上创建了一个副本,它也是“mysite_db”。我想将数据库(从我的本地机器)附加到已经有这个数据库名称的服务器上。这意味着我必须更改本地数据库的名称(我想我还需要更改物理文件)。我不知道该怎么做。你能指导我吗?

我的目标是在服务器上加载 2 个数据库,例如:'mysite_db' 和 'myNewSite_db'

sql-server-2008 sql-server

13
推荐指数
2
解决办法
3万
查看次数

了解 MS SQL Server 加密和备份

所以我在聊天询问SQL Server 备份文件的安全性。

有人告诉我,如果攻击者可以访问未加密的 .bak 文件,他们就可以访问数据。

所以让我们看看这个场景:

OPEN SYMMETRIC KEY MySymetricKey DECRYPTION
BY CERTIFICATE MyCertificate
Run Code Online (Sandbox Code Playgroud)

注意 - 这里没有密码。

然后我们通过以下方式加密我们的表:

UPDATE tbl1
 SET namePAss = ENCRYPTBYKEY(KEY_GUID('MySymetricKey'),name)
GO
Run Code Online (Sandbox Code Playgroud)

现在假设黑客得到了我的bak文件。为了查看数据(在他自己的计算机和 sql-server 中),他所要做的就是:

SELECT  
       convert( NVARCHAR(max), decryptbykey(namePAss)) 
FROM tbl1
Run Code Online (Sandbox Code Playgroud)

他还能访问数据吗?

security sql-server

13
推荐指数
1
解决办法
1084
查看次数

为什么 SQL Server 不支持视图的外键约束?

我知道 SQL Server 不支持使用视图作为外键约束的参考,是否有原因(即与关系模型有关)是这种情况吗?好像会有用....

sql-server

13
推荐指数
1
解决办法
7350
查看次数

在 SQL Server Profiler 中进行跟踪时,是否可以在过程调用中记录传入参数值?

使用 SQL Server Profiler(我使用的是 SQL Server 2012),我试图生成一个有用的跟踪来显示参数值,而不仅仅是带有变量名的 SQL。存储过程遍历大量库存数据以生成一些非常有价值的结果,我正在尝试记录现有行为,以便我可以对其进行单元测试,准确定义它,然后将其重构为合理的东西。

我有一个存储过程,它在一个循环中执行一个 54 个参数的子过程,其中存储过程创建一个游标然后执行一个 while 循环。这是一个简化的视图:

CREATE PROCEDURE 
   [dbo].[OuterProcedure]       
   (  @ProductCode varchar(8),          
     -- 41 more parameters omitted
   )
AS            
  SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED   
  SET NOCOUNT ON           
 DECLARE @AboutFourHundredLocalvariables -- omit about 400 local variable declarations.
 -- OMIT ABOUT 10 temporary table declarations.
 DECLARE  aCursor CURSOR FAST_FORWARD FOR         
   SELECT [ID],bkno,  -- about 40 fields omitted.
              FROM vwVeryComplexViewThatDoesALotOfVeryBrutalJoins         
              WHERE  (about_80_boolean_expressions AND omitted_here)
        ORDER BY some,keys,like,this

OPEN aCursor          
FETCH NEXT FROM aCursor /* Get …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures profiler sql-server-2012

13
推荐指数
1
解决办法
4360
查看次数

登录不会跨可用性组同步

我们在 AlwaysOn 组中有 2 台服务器。

虽然每个同步数据库中的用户帐户都存在于两台服务器上,但数据库实例级登录仅存在于其中一台服务器上。即 DBINSTANCE->Security->Logins 在一台服务器上丢失。

因此,当发生故障转移时,我会在第二台服务器(没有相应的实例级别登录)上登录失败。

我如何克服这个问题?我应该以特殊方式设置用户帐户吗?

sql-server sql-server-2012 availability-groups logins

13
推荐指数
2
解决办法
3万
查看次数