我们希望在 Active Directory 中的 SQL Server 2008 上使用 Windows 身份验证。
是否可以将 AD 组用作服务器的登录名,然后将实际的 AD 用户映射到数据库用户?
其想法是拥有一个具有基本登录访问权限的 AD 组,然后将角色和访问权限细化到单个数据库用户列表。
我们还使用行级安全性,这样每个用户都可以访问一个国家。
我有多个 SSIS 包,如何搜索它们以找到特定表的用途?我需要更改表格,我正在尝试评估这些更改的影响。
是否可以回滚已提交的事务?
我已经删除了表中的所有数据。delete 语句在 Begin Transaction 中,我已经使用 commit transaction 命令提交了事务。现在是否可以回滚并取回数据?
谁能解释关闭 SQL Browser 服务和通过 SQL Server 配置管理器隐藏实例之间的区别?
我一直假设他们做同样的事情并且已经隐藏了服务器作为备份,以防 SQL Browser 服务被打开但找不到任何确认这一点的文档。
提前致谢!
我正在将使用 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
我们正在将虚拟化数据库服务器从旧的 SQL Server 2008 R2 Standard (vmware) 升级到新的闪亮的 SQL Server 2014 Standard 服务器 (hyper-v)。我们正在做一些性能测试,令我们惊讶的是,新服务器系统的 CPU 时间似乎比旧的、噼啪作响的旧系统更糟糕。这些是系统:
旧服务器:
新服务器:
我们所做的一些历史:
我们有一个包含 60 个数据库的 SQL Server 2008 集群。
完整备份每晚运行一次,日志备份每 15 分钟运行一次。
该MSDB数据库恢复模型设置为简单(默认)。
为了能够查看这些作业的历史,我们必须设置一个清理历史日志的作业。
但是,当此作业运行时,日志文件MSDB会变大(20 - 40 GB)。
我们定期缩小日志文件,因为它有超过 80% 的“可用空间”
日志文件设置为按需增长,没有“自动收缩”
有什么办法可以避免这个日志文件增长?
我们应该启用“自动收缩”还是创建一个作业来收缩日志文件?
如何将多列连接成一行?例如:
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) 我的服务器和开发电脑都安装了 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 中加快大小接近 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)
能否请您回答以下问题:
sql-server-2008 ×10
sql-server ×9
backup ×1
msdb ×1
performance ×1
powershell ×1
recovery ×1
rollback ×1
ssis ×1
t-sql ×1
transaction ×1