标签: sql-server-2008

可以在数据库级别设置 IMPLICIT_TRANSACTIONS 吗?

当我必须调查由 IMPLICIT_TRANSACTIONS ON 引起的问题时,我可以专注于客户端工具设置 IMPLICIT_TRANSACTIONS ON 或 ANSI_DEFAULTS ON 还是可以针对影响所有客户端的整个数据库进行设置?

我可以通过将标准脚本头更改为来避免该问题

SET ANSI_DEFAULTS ON
SET IMPLICIT_TRANSACTIONS  OFF
Run Code Online (Sandbox Code Playgroud)

但是这个设置会在哪些级别的会话、数据库、服务器上受到影响呢?

编辑:

在msdn中找到了这个

似乎可以在服务器级别进行设置。

在“服务器属性”对话框(“连接”页面)中,我发现选项已更改并编写了脚本:

隐式交易:

EXEC sys.sp_configure N'user options', N'2'
GO
RECONFIGURE WITH OVERRIDE
GO
Run Code Online (Sandbox Code Playgroud)

隐式交易关闭:

EXEC sys.sp_configure N'user options', N'0'
GO
RECONFIGURE WITH OVERRIDE
GO
Run Code Online (Sandbox Code Playgroud)

但执行

exec('dbcc useroptions')
Run Code Online (Sandbox Code Playgroud)

SSMS中没有反映变化。对于此类连接,服务器设置似乎以某种方式被覆盖。

现在我必须重新提出这个问题,

是否有客户端不会覆盖服务器设置,并且在服务器设置更改时可能会崩溃。

sql-server-2008 sql-server

2
推荐指数
1
解决办法
1588
查看次数

tempdb日志和数据库日志有什么区别?这些日志文件在什么情况下使用?

众所周知,每当执行任何大型查询时,就会出现两种类型的日志文件 (*.ldf):1. 数据库日志(事务日志)文件 2. tempdb 日志。

请描述一下 SQL Server 在执行任何查询时如何使用这些文件?

我想知道的第二件事是,什么时候收缩日志文件(数据库日志、tempdb 日志)是安全的?在什么情况下我们不应该记录文件?

sql-server-2008 sql-server

2
推荐指数
1
解决办法
7913
查看次数

强制假脱机避免创建临时表?

我有以下查询,它连接几个非常大的表的透视数据,并且运行速度非常慢。我尝试为每次旋转创建临时表,它运行得更快。这是一种在不创建临时表的情况下强制索引/表假脱机的方法吗?

select ...
from T1 ....
left join (select ... from (select ... from T2....) pivot (sum(C1) on C2 in (...))) p1 
    on ...
left join (select ... from (select ... from T3....) pivot (sum(...) on ... in (...))) p2
    on ...
left join (select ... from (select ... from T4....) pivot (sum(...) on ... in (...))) p3
    on ...
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

2
推荐指数
1
解决办法
1670
查看次数

SQL Server 是否记录存储过程失败?

如何在 SQL Server Management Studio 2008 中查看给定时间范围内的存储过程错误列表?

sql-server-2008 sql-server t-sql

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

识别消耗资源最多的登录\用户

有没有一种方法可以识别执行查询时实际消耗大量资源的顶级数据库用户?

sql-server-2008 sql-server resource-governor

2
推荐指数
1
解决办法
2399
查看次数

如何仅在良好的情况下恢复 .bak

我正在使用 Tsql 脚本来恢复多个数据库。

RESTORE DATABASE XXX_M
   FROM DISK = 'C:\XXX.bak'
   WITH FILE = 1, replace
GO
Run Code Online (Sandbox Code Playgroud)

有时 .bak 文件已损坏(不是数据损坏)。

我想知道是否有一种方法可以检查文件是否未损坏,然后进行恢复,否则不会。我尝试在恢复验证后使用@@rowcount,但效果不好。

RESTORE VERIFYONLY 
   FROM DISK = 'C:\xxx.bak'
if @@ROWCOUNT !=0
print 'false'
else 
print 'good'
Run Code Online (Sandbox Code Playgroud)

还有其他想法吗?

谢谢。

sql-server-2008 sql-server t-sql sql-server-2008-r2 sql-server-2014

2
推荐指数
1
解决办法
417
查看次数

计算年度通货膨胀的最佳方法是什么?

我的最终目标是将前几年的钱计算为 2019 美元。

我从 BLS 获得了这些数字,并在 sql 中创建了 CPI_U,如下所示:

    create table CPI_U (year int, dec decimal(4,2), annual_avg decimal(4,2))

    insert into CPI_U (year, dec, annual_avg)

    values 
    (2000, 3.4,3.4),
    (2001, 1.6,2.8),
    (2002, 2.4,1.6),
    (2003, 1.9,2.3),
    (2004, 3.3,2.7),
    (2005, 3.4,3.4),
    (2006, 2.5,3.2),
    (2007, 4.1,2.8),
    (2008, 0.1,3.8),
    (2009, 2.7,-0.4),
    (2010, 1.5,1.6),
    (2011, 3.0,3.2),
    (2012, 1.7,2.1),
    (2013, 1.5,1.5),
    (2014, 0.8,1.6),
    (2015, 0.7,0.1),
    (2016, 2.1,1.3),
    (2017, 2.1,2.1),
    (2018, 1.9,2.4)
Run Code Online (Sandbox Code Playgroud)

然后我像这样构建一个三角形:

        with cpi_triangle as (

        select  c1.year,    c1.dec as c1, c2.dec as c2, c3.dec as c3, c4.dec …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server

2
推荐指数
1
解决办法
187
查看次数

表碎片化

如果我执行以下操作:

SELECT dbschemas.[name] as 'Schema', 
dbtables.[name] as 'Table', 
dbindexes.[name] as 'Index',
indexstats.alloc_unit_type_desc,
indexstats.avg_fragmentation_in_percent as avg,
indexstats.page_count
FROM sys.dm_db_index_physical_stats (DB_ID('dbname'), NULL, NULL, NULL, NULL) AS indexstats
INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
WHERE indexstats.database_id = DB_ID('dbname')
ORDER BY indexstats.avg_fragmentation_in_percent desc
Run Code Online (Sandbox Code Playgroud)

它显示了碎片级别。然后我运行了 Ola Hallengren 的索引优化脚本,这显然减少了索引。

如果我再次运行查询,它现在会在没有索引的表中显示高碎片,例如:

SELECT dbschemas.[name] as 'Schema', 
dbtables.[name] as 'Table', 
dbindexes.[name] as 'Index',
indexstats.alloc_unit_type_desc,
indexstats.avg_fragmentation_in_percent as …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server fragmentation ola-hallengren

2
推荐指数
1
解决办法
1723
查看次数

SQL Server 是否支持来自多个连接的并行批量插入?

SQL Server 是否支持对同一数据库表的并行批量插入?

对我的特定用例的一些说明:

  • 该表有一个由两个不同索引键组成的聚集索引和两个非聚集索引,每个索引由一个索引键组成。
  • 并行在这里意味着来自多个不同的连接。每个连接都是一个唯一的sqlalchemy.orm.session对象,每个Session使用该Session.bulk_insert_mappings()方法同时插入20k条数据。

我的具体问题:

  • 我试图了解 SQL Server 端的幕后情况。是否有所有批量插入的队列,并且每个批量插入都按照进来的顺序一个一个地执行?还是所有的插入都是同时进行的,并行的?
  • 我们还假设没有两个不同的连接会尝试插入相同的记录(基于主键),但是如果两个并行连接尝试插入会导致 PK 违规的记录怎么办?
  • 如果我们要求 SQL Server 2008 与 2017,上述问题的答案是否不同?
  • Microsoft 是否有关于此的任何类型的文档?

sql-server-2008 sql-server concurrency bulk-insert sql-server-2017

2
推荐指数
1
解决办法
318
查看次数

为什么 SERIALIZABLE 级别不会锁定 SQL Server 中其他会话的表

我想防止表中的删除、插入、更新和选择并发,因此我尝试SERIALIZABLE在转换之前使用该表,但这并没有为其他进程锁定该表!如何修复它?

我尝试过什么:

1-创建表_1

    --Create Sample Table
CREATE TABLE [dbo].[Table_1](
    [Number] [bigint] NOT NULL,
    [Price] [bigint] NULL,
 CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED 
(
    [Number] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT [dbo].[Table_1] ([Number], [Price]) VALUES (1, 1000)
GO
INSERT [dbo].[Table_1] ([Number], [Price]) VALUES (2, 3000)
GO
INSERT [dbo].[Table_1] ([Number], [Price]) VALUES (3, 8000)
GO
Run Code Online (Sandbox Code Playgroud)

2- 查询有延迟的会话一:

--SESSION 1
SET TRANSACTION ISOLATION LEVEL …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server query concurrency sql-server-2008-r2

2
推荐指数
1
解决办法
1188
查看次数