标签: sql-server-2008

域组作为单一登录,但仍然有许多不同的数据库用户?

我们希望在 Active Directory 中的 SQL Server 2008 上使用 Windows 身份验证。

是否可以将 AD 组用作服务器的登录名,然后将实际的 AD 用户映射到数据库用户?

其想法是拥有一个具有基本登录访问权限的 AD 组,然后将角色和访问权限细化到单个数据库用户列表。

我们还使用行级安全性,这样每个用户都可以访问一个国家。

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

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

搜索 SSIS 包以使用特定表

我有多个 SSIS 包,如何搜索它们以找到特定表的用途?我需要更改表格,我正在尝试评估这些更改的影响。

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

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

在 SQL Server 中回滚已提交的事务

是否可以回滚已提交的事务?

我已经删除了表中的所有数据。delete 语句在 Begin Transaction 中,我已经使用 commit transaction 命令提交了事务。现在是否可以回滚并取回数据?

sql-server-2008 sql-server transaction recovery rollback

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

隐藏 SQL Server 与关闭 SQL 浏览器

谁能解释关闭 SQL Browser 服务和通过 SQL Server 配置管理器隐藏实例之间的区别?

我一直假设他们做同样的事情并且已经隐藏了服务器作为备份,以防 SQL Browser 服务被打开但找不到任何确认这一点的文档。

提前致谢!

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

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

备份中缺少 CDC 系统表

我正在将使用 CDC 的数据库从 SQL Server 2008 R2 迁移到 SQL Server 2012。

对象资源管理器的“系统表”分支下有CDC相关的表:

cdc.ddl_history
cdc.lsn_time_mapping
cdc.captured_columns
cdc.index_columns
cdc.change_tables
Run Code Online (Sandbox Code Playgroud)

备份数据库并在不同的服务器上恢复后,CDC 相关的表不存在。

我尝试使用 SSIS 复制它们,但它们在“导出数据”向导 GUI 中不可见。似乎实际复制它们的唯一方法是手动导出它们或将SELECT * FROM...结果输出到文件。

如何确保正确恢复变更数据捕获相关表?

sql-server-2008 sql-server sql-server-2012 change-data-capture

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

SQL Server 2014 中的 CPU 时间比 SQL Server 2008 中的慢

我们正在将虚拟化数据库服务器从旧的 SQL Server 2008 R2 Standard (vmware) 升级到新的闪亮的 SQL Server 2014 Standard 服务器 (hyper-v)。我们正在做一些性能测试,令我们惊讶的是,新服务器系统的 CPU 时间似乎比旧的、噼啪作响的旧系统更糟糕。这些是系统:

旧服务器:

  • 在虚拟机 VMWare ESX 5.1 中运行
  • Windows Server 2008 R2 32 位
  • SQL Server 2008 R2
  • 四核至强 ES-2620 2Ghz
  • 5600MB 内存

新服务器:

  • 在虚拟机 Hyper-V UEFI 版本 v1.0 中运行
  • 视窗服务器 2012 R2
  • SQL Server 2014
  • 四核至强 ES-2640 2.6Ghz
  • 32766 MB 内存

我们所做的一些历史:

  • 两个不同的基准测试表明,在新服务器中,CPU 速度提高了约 80%,内存访问速度提高了约 100%,IO 磁盘访问速度提高了约 1000%。
  • 测试查询使用具有非聚集索引的多个连接。
  • 在两台服务器中,测试数据库完全相同。
  • 在两台服务器中,能源电源选项都设置为高性能,并且还使用 CPU-Z 检查处理器始终处于最大速度。
  • 在两台服务器中都启用了“锁定页面”。
  • 在两台服务器中,执行测试查询时,统计信息都得到了正确更新,查询计划也相同。
  • 为了确保计划始终相同,我们在兼容模式 100 (SQL Server 2008) 的 SQL Server 2014 中执行查询,但如果没有这种兼容模式,结果是相同的。 …

performance sql-server-2008 sql-server sql-server-2014

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

MSDB 日志文件大小

我们有一个包含 60 个数据库的 SQL Server 2008 集群。

完整备份每晚运行一次,日志备份每 15 分钟运行一次。

MSDB数据库恢复模型设置为简单(默认)。

为了能够查看这些作业的历史,我们必须设置一个清理历史日志的作业。

但是,当此作业运行时,日志文件MSDB会变大(20 - 40 GB)。

我们定期缩小日志文件,因为它有超过 80% 的“可用空间”

日志文件设置为按需增长,没有“自动收缩”

有什么办法可以避免这个日志文件增长?

我们应该启用“自动收缩”还是创建一个作业来收缩日志文件?

sql-server-2008 sql-server transaction-log msdb

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

多列串联

如何将多列连接成一行?例如:

id   name    car
1    sam     dodge
1    ram     maserati
1    john    benz
1    NULL    mazda
2    kirk    lexus
2    Jim     rolls
1            GMC
Run Code Online (Sandbox Code Playgroud)

预期的结果集是:

ID  name               car
1   sam,ram,john       dodge,maserati,benz,mazda,GMC
2   kirk,jim           lexus,rolls
Run Code Online (Sandbox Code Playgroud)

使用我在 Stack Overflow 上找到的解决方案

SELECT * FROM (
SELECT t.id,stuff([m].query('/name').value('/', 'varchar(max)'),1,1,'') AS [SomeField_Combined1],
stuff([m].query('/car').value('/', 'varchar(max)'),1,1,'') AS [SomeField_Combined2]
FROM dbo.test t
OUTER apply(SELECT (

SELECT id, ','+name AS name
,','+car AS car
FROM test WHERE test.id=t.id
FOR XML PATH('') ,type)
             AS  M) A)S
GROUP BY …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server t-sql

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

无法使用 powershell 获取数据库或其对象

我的服务器和开发电脑都安装了 Powershell。在我的开发机器上,显然安装了最新版本的 PowerShell 或其某些 SQL Server 'sqlps' 组件。我目前的问题是我无法像在开发机器中那样列出数据库,如下所示:

PS SQLSERVER:\> ls SQLSERVER:\\SQL\server\instance\Databases\
Run Code Online (Sandbox Code Playgroud)

我得到以下信息:

Get-ChildItem : No se encuentra la ruta de acceso 'SQLSERVER:\SQL\serverr2\serverr2\Databases' porque no existe.
En línea: 1 Carácter: 4
+ dir <<<<  SQLSERVER:\SQL\server\instance\Databases
    + CategoryInfo          : ObjectNotFound: (SQLSERVER:\SQL\server\instance\Databases:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Run Code Online (Sandbox Code Playgroud)

显然,我无法获得诸如存储过程、视图等之类的子项。

但是,我可以列出已安装的实例,并且还可以通过列出带有以下内容的数据库来解决此问题:

DIR SQLSERVER:\\SQL\serverr2 | SELECT Databases -ExpandProperty Databases | SELECT Name,Owner,Urn
Run Code Online (Sandbox Code Playgroud)

但仍然需要获取另一个对象,如存储过程、视图、函数等。

这是 Get-Host cmdlet 提供的信息

Name             : ConsoleHost
Version          : 2.0
InstanceId       : c1976472-19c0-439e-a4f6-debe59a18616
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : es-MX
CurrentUICulture : …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server powershell

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

如何使数据库备份更快?

我最近参加了下一份工作的面试,并被问到:

如何在 SQL Server 中加快大小接近 1TB 或 800 GB 的数据库的备份?

我的回答:我们可以使用数据库压缩或使用 Light Speed 之类的第三方工具。

但他们期待这个我不知道的答案:

解决方案:通过添加更多目标文件来提高吞吐量

例子

我通过添加更多备份目标文件创建了这个示例脚本:

DBCC TRACEON (3605, -1) 
DBCC TRACEON (3213, -1) 

BACKUP DATABASE [AdventureWorks2008] TO 
    DISK = N'E:\ADWBackup\AdventureWorks2008-Full.bak',
    DISK = N'E:\ADWBackup\AdventureWorks2008-Full-File2.bak', 
    DISK = N'E:\ADWBackup\AdventureWorks2008-Full-File3.bak'
WITH 
    NOFORMAT, INIT, NAME = N'AdventureWorks2008-Full Database Backup', 
    SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10 

DBCC TRACEOFF(3605, -1) 
DBCC TRACEOFF(3213, -1)
Run Code Online (Sandbox Code Playgroud)

能否请您回答以下问题:

  1. 遵循这种方法而不是使用单个文件有什么用?
  2. 如果我这样做会有任何时差吗?
  3. 如何使用多个拆分文件恢复数据库?
  4. 真的会提高备份速度吗?

sql-server-2008 sql-server backup

6
推荐指数
2
解决办法
4966
查看次数