小编swa*_*eck的帖子

暂时禁用 Sql 复制

由于业务需要,我可能需要在我的环境中禁用事务复制(Sql 2k -> Sql 2008)。从功能上讲,我理解这意味着我需要放弃订阅和文章。当冲突需求得到解决时,获取创建脚本是否足以将复制恢复到原始状态?

谢谢。

replication sql-server

7
推荐指数
1
解决办法
9353
查看次数

有没有办法拒绝对来自链接服务器的连接进行 CRUD 操作?

我有一个 SQL Server 实例RPT1(2008 R2),它是为“高级用户”设置的,可以运行他们自己的查询。此服务器链接到我们的生产报告服务器PRD1(SQL Server 2008 实例),具有直接RPT1查询链接服务器 ( PRD1) 的视图 (on ) 。

已使用需要在服务器上进行 CRUD 的帐户创建链接服务器(用于报告审核等)。

随着用户的成熟,他们也会请求更大的权限(例如创建自己的视图)。我想确保他们不会在链接的服务器上执行任何 CRUD 操作,但链接的帐户具有这些权限。

我看到的第一个解析路径是创建一个不同的用户,权限较低,然后重新链接服务器。

我的第二条路径是查看是否有办法DENYPRD1服务器上为来自链接服务器的连接显式CRUD 。

是否可以仅从链接中明确拒绝 CRUD?或者我应该简单地将服务器与不同的帐户重新链接?我忽略了另一个明显的解决方案吗?

sql-server-2008 sql-server permissions sql-server-2008-r2 linked-server

7
推荐指数
1
解决办法
757
查看次数

为什么 SQL Server 2008 R2 中的这些事务 DMV 之间存在差异?

当我执行下面的两个查询时,

SELECT 
    session_id, transaction_id
    FROM sys.dm_tran_session_transactions;
Run Code Online (Sandbox Code Playgroud)

SELECT 
    session_id, request_id, at.transaction_id
    FROM sys.dm_tran_active_transactions at
        JOIN sys.dm_exec_requests r
            ON r.transaction_id = at.transaction_id;
Run Code Online (Sandbox Code Playgroud)

我已经阅读了12的 BOL,但没有看到任何关于为什么会出现差异的明确解释。

我得到不同的结果。前一个查询不返回任何结果,但后者返回带有会话和事务 ID 的活动事务。该request_id是0,我认为它,意味着它在会议上提出的唯一请求。有人可以帮助我理解为什么我上面查询的两个概念之间存在差异吗?

编辑

我只是重新运行了查询,现在我得到了第一个 DMV 的结果,该结果session_id实际上并未包含在第二个结果集中。

sql-server sql-server-2008-r2 dmv

7
推荐指数
1
解决办法
1179
查看次数

是否有一种快速、直接的方法来测量 SQL Server 2000 上的每秒事务数?

sys.dm_os_performance_countersSQL Server 2005 中引入的DMV 使这项任务变得有些微不足道。但是,我的 Google-Fu 被阻止在 SQL Server 2000 中找到执行此操作的方法。

如何测量 SQL Server 2000 中的每秒事务数?

performance monitoring sql-server sql-server-2000

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

EXISTS 与 LEFT JOIN 的实际应用以查找送货地址

我们的最终用户可以通过多种方式将产品运送给我们的客户。他们可以使用一个表中的客户地址 ( [customer])、另一个表中的特定送货地址 ( [dropship]) 或另一个表中的另一个送货地址(对于具有多个位置的客户) ( [delivery])。这些都具有大致相同的结构,对于相同的数据点具有相同的列名(例如[address]是所有表中的地址)。

目前,我们查找订单收货地址的逻辑如下:

SELECT
    Address = COALESCE(r.address, d.address, c.address) 
FROM [order] o 
JOIN customer c
    ON o.customerid = c.customerid
LEFT JOIN delivery d
    ON o.customerid = d.customerid
    AND o.delivaddressid = d.delivaddress
LEFT JOIN dropship r
    ON o.orderid = r.orderid;
Run Code Online (Sandbox Code Playgroud)

基于对话而不是一些博客文章EXISTS似乎是首选。

然而,这对我来说是一个新的范式,我正试图将我的大脑围绕在它周围。我是否只是将LEFT JOINs替换为

WHERE EXISTS 
    (select 1 from delivery d
        where o.customerid = d.customerid 
        and o.delivaddressid = d.delivaddress)
Run Code Online (Sandbox Code Playgroud)

这将不允许我使用数据,[delivery]除非我将它扔到FROM …

sql-server-2008-r2

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

这些快照隔离级别配置如何在 SQL Server 2005 实例上进行交互?

我开始解决tempdb我们在 SQL Server 2005 企业版上遇到的问题。开发人员收到tempdb空间不足的错误。从技术上讲,错误是:

访问数据库 'dbname' 中的表 'dbo.inserted' 中的版本化行时,事务中止。未找到请求的版本化行。您的 tempdb 可能空间不足。请参考 BOL 如何配置 tempdb 进行版本控制

我查看了数据库配置sys.databases,发现了以下设置:

snapshot_isolation_state: 0

snapshot_isolation_state_desc: OFF

is_read_committed_snapshot_on: 1
Run Code Online (Sandbox Code Playgroud)

我在BOL 中查找了这意味着什么,主要信息如下:

snapshot_isolation_state

允许快照隔离事务的状态,由 ALLOW_SNAPSHOT_ISOLATION 选项设置:

0 = 快照隔离状态为关闭(默认)。不允许快照隔离。

1 = 快照隔离状态开启。允许快照隔离。

2 = 快照隔离状态正在转换为关闭状态。所有事务都有其修改版本。无法使用快照隔离启动新事务。数据库保持转换为 OFF 状态,直到运行 ALTER DATABASE 时处于活动状态的所有事务都可以完成。

3 = 快照隔离状态正在转换为 ON 状态。新的交易有他们的修改版本。在快照隔离状态变为 1 (ON) 之前,事务无法使用快照隔离。数据库将保持转换到 ON 状态,直到可以完成运行 ALTER DATABASE 时处于活动状态的所有更新事务。

snapshot_isolation_state_desc

允许快照隔离事务的状态描述,由 ALLOW_SNAPSHOT_ISOLATION 选项设置:

  • 离开
  • IN_TRANSITION_TO_ON
  • IN_TRANSITION_TO_OFF

is_read_committed_snapshot_on

1 = READ_COMMITTED_SNAPSHOT 选项为 ON。read-committed 隔离级别下的读操作基于快照扫描,不获取锁。

0 …

sql-server-2005 sql-server isolation-level

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

将Sql集群安装迁移到新驱动器

我们正在从旧的 SAN 迁移到新的 SAN,需要将我们的 SQL Server 实例迁移到新的 LUN。我们可以毫无问题地迁移数据,但 SQL Server 实例本身是集群的(单实例),并且集群磁盘也必须迁移到新的 SAN。

路径如下:

  1. 在新的 SAN 上创建 LUN。
  2. 向集群提供新的 LUN。
  3. 将旧群集磁盘资源中的所有内容复制到新群集磁盘资源。
  4. 将旧磁盘资源重命名为某物。
  5. 将新磁盘资源重命名为旧名称。
  6. 交叉手指。

或者

  1. 在集群上重新安装 OS/Sql。

我们将不得不为 13 个实例执行此操作。

sql-server clustering

5
推荐指数
1
解决办法
2349
查看次数

Sql Server 全文搜索一个表中另一表中的文本值

是否可以在 FTS 索引列上运行全文搜索以查找另一个表中的所有值?

从概念上讲,它看起来像

select d.* from Docs d, Tags t where CONTAINS(d.fulltext, t.tagvalue)

我对 MSSQL FTS 相当陌生,尽管我知道等效的东西可以在 postgres 中工作

select d.* from docs d, tags t where to_tsquery(t.tagvalue) @@ to_tsvector(d.fulltext)

谢谢您的帮助!

sql-server full-text-search

5
推荐指数
1
解决办法
854
查看次数

从与主数据库实例不同的服务器运行 SSIS

我们目前有一个 SQL Server 集成服务 (SSIS) 包,它执行提取-传输-加载 (ETL) 过程以将一些数据从 SQL Server 移动到 DB2。在当前的生产服务器上,SSIS 与数据库实例安装在同一台服务器上,包的执行由 SQL 代理通过作业管理。

我们正在升级我们的 SQL 基础设施以进行集群,并且高级数据库管理员希望在其自己的服务器上拥有 SSIS,因此只需将集成服务服务安装到机器上即可设置 ETL 服务器。

SSIS 服务器是否还需要它自己的数据库实例和/或 SQL 代理来管理包的执行?

我在理解所有部分在这种情况下如何工作时遇到了一些麻烦。

我们使用的是 SQL Server 2008 R2 SP1。

sql-server ssis sql-server-2008-r2

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

事务复制创建一个正在休眠但阻塞其他进程的修复索引

我刚刚将我的 ERP 数据库服务器从 SQL Server 2000 迁移到 SQL Server 2008 R2(两个企业版),迁移过程相当顺利。

但是,现在我正在尝试重新创建从 ERP 到 Reporting 环境的复制,我有两个出版物试图创建一系列MSFixupNonUniqueIndex_{{datetimestamp}}非唯一索引。创建这些索引的进程都在休眠,但它们正在阻塞最终用户正在运行的其他 SQL 进程。

是什么导致了这个修复索引的创建,我可以避免它吗?

  • 使用sp_whoisactivenowait_info用于索引创建任务。
  • 我没有在报告环境中删除复制的数据库。
  • “报表环境”也是 SQL Server 2008 R2 Enterprise。
  • 现在是 2008 R2 到 2008 R2 的复制。
  • sysprocesses显示了试图创建索引的 spid 阻止的两个过程。spid 本身有一个waittypeof0x0000和一个lastwaittypeof MISCELLANEOUS
  • sys.locks显示有 777 个锁:7 个 Intent,761 个 Exclusive,6 个 Shared,2 Schema Mod,1 Schema Stability。资源是: 1 ALLOCATION_UNIT、 9 OBJECT、 3 DATABASE、 2 METADATA、 677 …

sql-server sql-server-2008-r2 transactional-replication

5
推荐指数
1
解决办法
515
查看次数