标签: sql-server-2008

恢复时减少数据库大小

我有大小约为的数据库备份。150 MB。

我尝试恢复它并收到错误:“System.Data.SqlClient.SqlError:磁盘卷 'C:\' 上没有足够的可用空间来创建数据库。数据库需要 67771760640 额外的可用字节,而只有 45085224960 字节可用。(Microsoft.SqlServer.Smo)”

恢复将创建比备份大得多的数据库。是否有可能减少正在恢复的数据库的大小?

sql-server-2008 restore

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

如何使用 SQLCMD for MS SQL 修改存储过程?

假设使用 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 的存储过程?

sql-server-2008 stored-procedures sqlcmd

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

带有 XML 参数的 CLR 过程返回根级别的数据无效。线路 1,位置 1

我有以下 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)

sql-server-2008 xml sql-server c# sql-clr

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

子查询可以生成与 CTE 不同的执行计划吗?

我正在与老板交谈,他更喜欢子查询而不是 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)

sql-server-2008 sql-server cte subquery

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

完整恢复模型和 tabblock 插入日志记录

在测试某些查询时,我在数据库上将恢复模型设置为 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)

sql-server-2008 sql-server sql-server-2017

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

AD 中的用户的权限被拒绝

我在 Active Directory 中创建了一个组。该组包含 3 个用户。由于某些奇怪的原因,组中的一个用户无法从特定类型的架构中进行选择,而其他 2 个用户可以从同一架构中进行选择,我为其他 2 个用户运行了一些测试 EXECUTE AS USER,除了这一点之外,一切似乎都很好一位用户和我收到以下错误:

消息 229,级别 14,状态 5,第 4 行 对对象“”、数据库“Somethng_Database”、架构“sch”的 SELECT 权限被拒绝。

sql-server-2008 sql-server

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

从 SQL Server 2008 还原到 2014

DBA恢复全量备份时,DBA是否需要分别恢复权限、用户、角色?或者这一切都伴随着完整的恢复?

我来自开发团队。我们正在从 SQL Server 2008 迁移到 2014。我们要求 DBA 恢复完整备份。

他们已将完整备份恢复到新服务器,但我可以看到新旧服务器之间的用户、权限和角色存在差异。

为什么会发生?

sql-server-2008 sql-server permissions restore logins

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

SQL Server 架构安全

我公司使用的是多租户数据库(一个数据库,所有表都有一个customerID字段)。

我们正在建立数据仓库并为客户提供直接访问权限。我们对架构的最初想法是为每个客户创建一个架构,每个架构中的视图提供按客户 ID 进行过滤的视图。

IE

主数据库

dbo.Table1

架构 1

schema1.Table1 (View) Select * from dbo.Table1 where custId = '1'

这是有效的,除了具有 schema1 权限的用户也可以从 dbo.Table1 中选择全部。我想防止这种情况。

那可能吗?

schema sql-server-2008 security

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

SQL Server:冷备份,关闭服务?

我们的一位同事告诉我,他们正在为 SQL Server 进行“冷”备份,以便他们关闭服务,然后以某种方式进行备份。我认为这一切都错了!我对吗?我认为他们应该在他们的数据库处于 FULL 模式时进行完整备份、差异备份和日志备份。

他们在备份后启动 SQL Server 服务时也遇到问题,他们找不到 .mdf 文件。你知道为什么这会发生在他们身上吗?

sql-server-2008 sql-server backup restore

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

通过 SQL Server 中的数据库邮件进行健康检查

我有一些 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-2005 sql-server-2008

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