标签: sql-server-2008

SQL Server 2008 中的 RSync 数据库文件增量

好吧,我觉得这是一个糟糕的主意,但我需要一些帮助来理解为什么这很糟糕:

我仍在努力为我们的数据中心实施灾难恢复/业务连续性解决方案。我们正在运行 MSSQL 2008 Enterprise,我们计划在云中运行一个被动实例。目前我建议使用 Log Shipping,但我被要求探索使用 RSync(或类似的东西)将 MDF/LDF 文件增量推送到云,而不是使用内部工具。

目标是减少我们的占用空间,并且由于许可问题,大部分时间不运行云 SQL 实例(我们的被动/DR 许可证已在我们当前的数据中心中使用,但如果该中心出现故障,则该许可证可用) .

我找到了一个使用 VSS 创建和推送增量的解决方案,即使文件被锁定,但我想知道会出现什么样的问题。我可以得到一些见解吗?我们将每 15 分钟推送一次增量,有问题的数据库大约为 2GB,在 15 分钟的窗口中可能会生成 10 MB 的 T-Log。

sql-server-2008 sql-server backup recovery

4
推荐指数
1
解决办法
3737
查看次数

MS SQL 中的 SQL JOIN 语法

我在 MSSQL 课上教过,这是如何连接两个表

select * from FirstTable A
JOIN SecondTable B
on A.ID= B.ID
Run Code Online (Sandbox Code Playgroud)

现在在我的职业生涯中,我遇到过这样的 JOIN 查询

select * from FirstTable A, SecondTable B
where A.ID=B.ID
Run Code Online (Sandbox Code Playgroud)

我知道第二种选择曾经是常态,但现在可能已经放弃了。

我发现在我加入 6+ 个表 + 有多个子查询的复杂查询中,第二种形式更容易理解,而且简短漂亮。

问题

  • 我应该使用哪一种?
  • 一个比另一个有优势吗?

sql-server-2008 join

4
推荐指数
2
解决办法
676
查看次数

SQL Server - 服务器端跟踪

多亏了一些很棒的帖子,我已经成功地在客户的 SQL Server 实例上启动了一些服务器端跟踪,但由于这确实是我在“现实生活”情况下的第一次,我想知道一些事情。

1) 我在创建跟踪的脚本中定义了跟踪文件的“基本”名称。我每天早上 6 点开始跟踪并在晚上 7 点再次关闭它。我真正想做的是将跟踪文件的基本名称设置为包含日期,例如,我希望将其设为

 (some directory)\MyTrace-2012-Apr-19
Run Code Online (Sandbox Code Playgroud)

等等 - 这样每天的跟踪文件将很容易识别。有没有办法实现这一目标?我是否必须每天实际创建和删除跟踪才能得到这个??

2) 如果我每天打开和关闭跟踪,我昨天 ( MyTrace.trc) 的跟踪文件今天会被重用,直到它定义的最大大小吗?或者 SQL Server 会在每天启动时创建一个新的跟踪文件 ( MyTrace_1.trc, MyTrace_2.trc) 吗?

3)此外,即使在晚上 7 点之后,我也无法尝试获取该跟踪文件 - 似乎它仍然被某个进程锁定,我不能将它复制到其他地方......我假设一旦跟踪停止,文件将“免费”可用 - 我错了吗?

sql-server-2008 sql-server trace

4
推荐指数
1
解决办法
283
查看次数

为什么我在 SQL 中遇到 1 个读取和 1 个写入线程的死锁

如果有人可以帮助我理解为什么以下交易陷入僵局?我为每个表提供 2 个事务和索引:

交易1:

SELECT blockId, blockData, syncedToGeneration, itemId 
FROM blocks 
WHERE indexId=@indexId 
and itemId IN (SELECT itemId 
               FROM KeywordReferences 
               WHERE indexId=@indexId 
               AND keywordRootId IN (360,4498,359,1229))
Run Code Online (Sandbox Code Playgroud)

交易2:

UPDATE blocks 
   SET blockData=@blockData,
       syncedToGeneration=@syncedToGeneration 
   WHERE indexId=@indexId 
AND blockId=@blockId
Run Code Online (Sandbox Code Playgroud)

(请注意,第一笔交易中的“IN”部分要长得多,包含大约 30 个值,为了便于阅读,我将其截断了)

blocks 表有以下索引:
- indexId->blockId (Clustered)
- indexId->itemId

indexId->itemId

keywordReferences 表具有以下索引:
- indexId_>keywordRootId (Clustered)
- indexId->keywordRootId->score
- indexId->itemId
- indexId->blockId

波纹管是死锁图xml输出:

<deadlock-list>
 <deadlock victim="process5a274c8">
  <process-list>
   <process id="process5a274c8" taskpriority="0" logused="0" waitresource="PAGE: 5:1:91671" waittime="2709" ownerId="122348" transactionname="SELECT" lasttranstarted="2012-04-19T21:23:26.680" XDES="0xf382aca0" lockMode="S" schedulerid="4" kpid="10992" status="suspended" spid="69" sbid="0" …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server deadlock transaction

4
推荐指数
1
解决办法
7179
查看次数

将 varchar 列转换为日期时间

在 SQL Server 中,我有一个 varchar 列,其值例如:

 07/May/2012:00:06:22
 07/May/2012:00:06:22
 07/May/2012:00:06:22
 07/May/2012:00:06:22
 07/May/2012:00:06:22
Run Code Online (Sandbox Code Playgroud)
  • 如何将此列转换为具有实际日期时间的日期时间列?
  • 如果这是不可能的,我该如何创建一个新列并将这些值复制到其中但作为日期时间值?

sql-server-2008 sql-server type-conversion datetime

4
推荐指数
1
解决办法
6万
查看次数

别名列的 Where 子句

我有一个从列中解析字符串值的查询:

SELECT left(DateTimeSent, 17) AS timesent FROM allog_07_11_e query1 
Run Code Online (Sandbox Code Playgroud)

当我做:

SELECT left(DateTimeSent, 17) AS timesent FROM allog_07_11_e query1.timesent != '0'
Run Code Online (Sandbox Code Playgroud)

我得到:

Msg 207, Level 16, State 1, Line 1
Invalid column name 'timesent'.
Run Code Online (Sandbox Code Playgroud)

任何想法为什么?

sql-server-2008 sql-server

4
推荐指数
1
解决办法
2280
查看次数

我可以授予用户对单个数据库的 ALTER TRACE 权限吗?

我有一个开发用户,他需要能够在单个数据库上使用 SQL Profiler。有没有办法在不授予服务器范围的 ALTER TRACE 权限的情况下启用它?(用户根本不应该拥有对其他数据库的任何访问权限。)这是 Microsoft SQL Server 2008 R2。

sql-server-2008 profiler

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

镜像和缓冲页写入/秒

“缓冲区管理器:页面写入数/秒”(* 8 KB)是否是通过可用性组复制所有数据库将使用多少带宽的良好指标?

如果不是,为什么这些不等价?只是有一些开销还是它们基本上不相关?

sql-server-2008 sql-server perfmon sql-server-2012

4
推荐指数
1
解决办法
130
查看次数

如何使灵活的服务代理在存储的 sql 过程中接收,如何将“FROM”参数传递给接收

不久前,我问了一个关于如何使开始对话框和发送更灵活的问题,以便它可以嵌入到将 to、from 参数作为 sysname 变量的过程中。

多个发起者将使用的服务代理程序开始对话对话..如何将参数传递给它

然而,正如 Rusanu 在回答中提到的,同样的技术不能用于接收的 From 子句。

实际上它会起作用。大多数 SSB 动词都接受参数作为参数(当然,RECEIVE 的队列名称除外)。参数的类型为 sysname ...

实际上发送方已经完成,我现在试图以同样的方式使接收变得灵活,例如:

CREATE PROCEDURE QueueReceive
  @myTargetQueue SYSNAME
  @cg UNIQUEIDENTIFIER OUTPUT
  @ch UNIQUEIDENTIFIER OUTPUT
  @msg XML OUTPUT
as
    BEGIN TRANSACTION;
    WAITFOR
            ( RECEIVE TOP(1)
                @cg = conversation_group_id,
                @msg = cast(message_body as XML),
                @ch= conversation_handle  
              FROM @myTargetQueue
            ), TIMEOUT 3000;
    COMMIT
...
Run Code Online (Sandbox Code Playgroud)

似乎不能在 RECEIVE 的 from 子句中使用 sysname 类型的变量?如果我必须在动态 SQL 中执行此操作,我将如何从接收函数的动态 sql 执行中返回所有变量、conversation_group_id、conversation_handle 等?有没有更好的技术来完成同样的事情?

谢谢你。

修复/更新到目前为止:我正在创建一堆 IF 子句,具体取决于传递的参数是什么,它只会执行不同的整个接收语句。它效率不高,因为我每次添加新 QUEUE 时都必须更改过程代码,但我想现在可以了...

sql-server-2008 sql-server dynamic-sql service-broker

4
推荐指数
1
解决办法
6367
查看次数

使用完整扫描更新统计信息

是否在 SQL 2008 r2 上运行 UPDATE Statistics 并对 5000 万行(非分区)的大表进行全面扫描?我正在尝试确认以下行为。

a) 在整个运行过程中是否有任何锁定?不确定,但我认为没有锁,但是 sr。dba 告诉我它需要模式修改锁(嗯...)

b) 导致阻塞——我不这么认为

c) 造成大量 IO——因为每一页都将被读入内存并污染数据页缓冲区缓存。所以通常你应该在下班时间这样做。

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

4
推荐指数
1
解决办法
4597
查看次数