我有大小约为的数据库备份。150 MB。
我尝试恢复它并收到错误:“System.Data.SqlClient.SqlError:磁盘卷 'C:\' 上没有足够的可用空间来创建数据库。数据库需要 67771760640 额外的可用字节,而只有 45085224960 字节可用。(Microsoft.SqlServer.Smo)”
恢复将创建比备份大得多的数据库。是否有可能减少正在恢复的数据库的大小?
假设使用 Microsoft SQL Management Studio 创建了如下存储过程。
use testbase
go
create procedure testtable_pricesmaller
@pricelimit money
as
select * from testtable where price = @pricelimit;
go
Run Code Online (Sandbox Code Playgroud)
是否可以修改使用SQLCMDMS SQL 的存储过程?
我有以下 CLR 存储过程,该过程在此命令上引发错误
xmlDoc.LoadXml(inputXml);
Run Code Online (Sandbox Code Playgroud)
代码
public static int spGetTaxOfficeXML(SqlXml _inputXml)
{
// this procedure rename Row elements name with NodeName attribute value
string inputXml = _inputXml.ToString();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(inputXml);
// procedure Logic
SqlContext.Pipe.Send(inputXml);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当 XML 文本作为文本位于 Visual Studio 内的变量内部时,效果很好。但是当我将代码作为 CLR 上传到 SQL Server 并尝试从 SQL Management Studio 执行它时:
DECLARE @XML XML
SET @XML = '<NodeA><NodeB></NodeB><NodeC AttributeX=""><Row NodeName="RowA" AttributeA="" AttributeB="abcd" AttributeC="efgh" /><Row NodeName="RowB" AttributeA="wxyz" /><Row NodeName="RowC" AttributeB="qwer" AttributeC="tyui" /><Row NodeName="RowD" AttributeA="stuv" AttributeB="erty" AttributeC="fghj" /></NodeC></NodeA>'
EXEC …Run Code Online (Sandbox Code Playgroud) 我正在与老板交谈,他更喜欢子查询而不是 CTE。就个人而言,我讨厌子查询。他提到子查询可以更快,但我不相信。我运行了这个简短的测试:
with classes as
(select top 10 Classkey from dimclass
group by classkey
order by count(1) desc),
policies as (
select CarrierKey, policykey, periodeffectivedate from dimpolicy),
exposure as (
select policykey, classkey from DimExposure)
select * from policies p
inner join exposure x on p.PolicyKey = x.PolicyKey
inner join classes c on x.ClassKey = c.Classkey
Run Code Online (Sandbox Code Playgroud)
有一个执行计划:
https://www.brentozar.com/pastetheplan/?id=SJYJUZNHS
select p.CarrierKey, p.PolicyKey, p.periodeffectivedate from dimpolicy p
inner join (select policykey, classkey from DimExposure) x on p.PolicyKey = x.PolicyKey
inner join (select …Run Code Online (Sandbox Code Playgroud) 在测试某些查询时,我在数据库上将恢复模型设置为 full 并运行了两个相同的 1M 行插入,有和没有TABLOCK.
在使用 时TABLOCK,我绕过9295了 sql server 2008 实例8714上的日志记录,以及 SQL Server 2017 实例上的日志记录。
在没有 tabblock 的情况下运行插入时,我绕过1035659了 2008 实例的1068599记录和 2017 实例的记录。
在 sql server 2008 上测试的原因是为了匹配数据加载性能指南关于 ML 操作的恢复模型的声明:
仅当您的数据库处于大容量日志或简单恢复模式时,最少日志操作才可用。
那么,如果不是最小日志记录,这里看到的是什么?
Use DatabaseName
ALTER DATABASE DatabaseName SET RECOVERY FULL;
GO
BACKUP DATABASE DatabaseName TO DISK = '\\location\DatabaseName.bak';
BACKUP LOG DatabaseName TO DISK = '\\location\DatabaseName_log.trn';
GO
IF OBJECT_ID(N'dbo.Accounts', N'U') IS NOT NULL
BEGIN
DROP TABLE dbo.Accounts;
END; …Run Code Online (Sandbox Code Playgroud) 我在 Active Directory 中创建了一个组。该组包含 3 个用户。由于某些奇怪的原因,组中的一个用户无法从特定类型的架构中进行选择,而其他 2 个用户可以从同一架构中进行选择,我为其他 2 个用户运行了一些测试 EXECUTE AS USER,除了这一点之外,一切似乎都很好一位用户和我收到以下错误:
消息 229,级别 14,状态 5,第 4 行 对对象“”、数据库“Somethng_Database”、架构“sch”的 SELECT 权限被拒绝。
DBA恢复全量备份时,DBA是否需要分别恢复权限、用户、角色?或者这一切都伴随着完整的恢复?
我来自开发团队。我们正在从 SQL Server 2008 迁移到 2014。我们要求 DBA 恢复完整备份。
他们已将完整备份恢复到新服务器,但我可以看到新旧服务器之间的用户、权限和角色存在差异。
为什么会发生?
我公司使用的是多租户数据库(一个数据库,所有表都有一个customerID字段)。
我们正在建立数据仓库并为客户提供直接访问权限。我们对架构的最初想法是为每个客户创建一个架构,每个架构中的视图提供按客户 ID 进行过滤的视图。
IE
dbo.Table1
schema1.Table1 (View) Select * from dbo.Table1 where custId = '1'
这是有效的,除了具有 schema1 权限的用户也可以从 dbo.Table1 中选择全部。我想防止这种情况。
那可能吗?
我们的一位同事告诉我,他们正在为 SQL Server 进行“冷”备份,以便他们关闭服务,然后以某种方式进行备份。我认为这一切都错了!我对吗?我认为他们应该在他们的数据库处于 FULL 模式时进行完整备份、差异备份和日志备份。
他们在备份后启动 SQL Server 服务时也遇到问题,他们找不到 .mdf 文件。你知道为什么这会发生在他们身上吗?
我有一些 SQL 脚本,希望每天在我的 SQL Server 上运行。如何多次查询并获得类似于以下内容的输出:
Health check for <server>
Query Title 1:
<query results 1>
Query Title 2:
<query results 2>
Run Code Online (Sandbox Code Playgroud)
我正在检查诸如上次良好备份、正常运行时间等内容,因此它们彼此不相关。我计划在 SQL Server 作业中使用 sp_send_db_mail。这是完成这项任务的最佳方式吗?
理想情况下,我只想要一封电子邮件。
更新
经过多年的战斗!!!到目前为止,我找到的解决方案是将其放入存储过程,然后像这样执行存储过程:
EXEC msdb.dbo.sp_send_dbmail
@recipients = N'<email>',
@body = @body,
@subject = @subjectt,
@profile_name = @ProfileName,
@query ='exec test..sp_checks'
Run Code Online (Sandbox Code Playgroud)
这可以用于多个选择语句吗?
sql-server-2008 ×10
sql-server ×6
restore ×3
backup ×1
c# ×1
cte ×1
logins ×1
permissions ×1
schema ×1
security ×1
sql-clr ×1
sqlcmd ×1
subquery ×1
xml ×1