标签: sql-server-2008

扩展事件之外的非法 XML 字符

我正在捕获 SQL 服务器中的扩展事件。尝试分析跟踪 - 将事件数据转换为 xml 出现错误:

消息 9420,级别 16,状态 1,第 28 行
XML 解析:第 1 行,字符 731,非法 xml 字符

排查问题,发现sql_text action 值中有一个ascii 数字3 的字符。该值由客户端以动态 SQL 的形式传递。这在这里几乎不用担心。问题是 XE 无法处理 sql_text 中的奇怪字符。

这就是我获取导致问题的数据的方式:

declare @data nvarchar(max)
declare @id int
SET NOCOUNT ON

if object_id('tempdb.dbo.#xerrors') is null --drop table #xerrors
begin
    select CAST(null as XML) as xml_event_data, * 
    into #xerrors
    from sys.fn_xe_file_target_read_file
            (
                '...\Log\error_*.xet', 
                '...\Log\error_*.xem', 
                null, 
                null
            ) 

    alter table #xerrors
    add id int identity(1,1) primary key not null

end

while exists(select …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008

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

我可以从纯 T-SQL 调用 SMO 吗?

我知道如何使用 PowerShell 和 SMO 编写存储过程脚本:

[System.reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo")  | out-null
$srv = New-Object "Microsoft.SqlServer.Management.Smo.Server" 
$srv.databases['MyDatabase'].StoredProcedures['MyProc'].TextBody
Run Code Online (Sandbox Code Playgroud)

但由于我想在查询中使用过程文本,我想知道是否可以在纯 T-SQL 中以某种方式调用 SMO。

只能在开发环境中运行。

顺便说一句:返回具有给定名称的存储过程定义的函数可以解决我当前的问题,但不能回答我的问题。

编辑:

当我使用这个查询时,我想找到哪些过程引用了给定的表:

SELECT p.name --, definition 
FROM sys.sql_modules m
join sys.objects p on m.object_id = p.object_id
where p.type = 'P'
and definition like '%SearchForThis%'
Run Code Online (Sandbox Code Playgroud)

这与我想使用 SMO 获得的信息完全相同。

sql-server-2008 stored-procedures scripting sql-clr ole-automation

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

通过 VPN 使用集成安全性

我们有一个客户端,我们将允许它使用我们的一个应用程序。现场工作人员定期通过 VPN 连接到我们的网络。连接到 SQL Server 的 .Net 应用程序使用集成安全性。他们使用的笔记本电脑是我们域的成员。

客户也请求使用该应用程序。所以我们给了他们一个网络帐户和在我们的网络上创建 VPN 会话的能力。我让该帐户在 SQL 服务器上登录,其权限与我们自己的员工相同。

问题是,当他们尝试使用该应用程序时,会收到以下错误: 登录来自不受信任的域,无法与 Windows 身份验证一起使用。

我猜因为他们使用的计算机不在我们的域中,所以他们使用 VPN 登录并不重要。那么,解决这个问题的最佳方法是什么?我宁愿不为这个小应用程序切换到 SQL 身份验证。

sql-server-2008 security

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

如何解决发布者和订阅数据之间的差异?

我在两个 SQL Server 2008 SP1 服务器之间有一个事务复制,它们都在 Windows 2003 Server 上。发现主库和订阅库的部分表存在差异。我已经对记录计数进行了手动验证,并且存在细微差异。我知道双方之间存在延迟,所以不用太担心,但是有一个特定的表无论如何都不会同步(新行出现,但一些特定的旧行没有出现,所以它们看起来像同步后删除)。

情况是订阅数据库不是只读的,因此应用程序可以读取数据,也可以向该数据库写入数据。

现在我想知道您将使用哪些解决方案来同步双方。我现在能想到两个:

  • 对每篇文章使用 tablediff.exe 实用程序来比较源表和目标表并生成脚本

  • 重新初始化订阅,这样它就会使上一个快照无效并生成一个新快照。

有没有其他解决方案来解决这个问题?

replication sql-server-2008

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

将 DTS 作业迁移到 2008 Server

我们多年来一直在运行 SQL Server 2000。

最后,我们终于交付了 SQL 2008 Server。

我们的 SQL 2000 Server 上有许多 DTS 作业需要迁移到 SQL 2008 Server。

我在哪里可以查找如何转换 DTS 作业以便它们可以在 SQL 2008 上运行?

我是一名 WinForms C# 开发人员,负责调用、构建存储过程并偶尔为我们的 SQL Server 创建新表,但我不是数据库管理员或网络管理员。

我想确保我这样做是正确的,以便我们公司的停机时间最少。

来自我们的网络管理员:

根据我的阅读,我将不得不做更多的研究,我们必须将所有数据转换服务 (DTS) 包转换为 SQL Server 集成服务 (SSIS)。我不知道这可能会带来什么,但根据我的理解,这些工作是用 .Net 编写的。如果我们可以迁移它们,那很好,但如果不能,我们可能必须为所有人编写新的,一旦你编写了第一个,这不会那么难。

这有帮助吗?

sql-server-2008 sql-server-2000 ssis

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

对象“sysjobs”的选择权限被拒绝

The select permission was denied on the object 'sysjobs', database 'msdb', schema 'dbo'. 
Run Code Online (Sandbox Code Playgroud)

我已经尝试授予sqlagentoperatorrole,但没有奏效。如何解决此错误?

sql-server-2008 permissions

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

SQL Server 2008 Containstable 使用 weighted_term 生成负排名

我有一个在标题列上启用全文搜索的表格。我尝试使用包含表进行加权搜索,但我得到了 Rank 值的算术溢出。查询如下

 SELECT ID, CAST(Res_Tbl.RANK AS Decimal) AS Relevancy , Title
  FROM table1 AS INNER JOIN
    CONTAINSTABLE(table1,Title,'ISABOUT("pétoncle" weight (.8), "pétoncle" weight (.8), "PÉTONCLE" weight (.8))',LANGUAGE 1036 ) AS Res_Tbl 
     ON ID = Res_Tbl.[KEY]
Run Code Online (Sandbox Code Playgroud)

当我执行此查询时,我得到:int 类型的算术溢出错误,值 = -83886083125.000076。

如果我删除两个 ';' 之一 在ISABOUT 函数中,查询成功完成。

请注意,如果查询成功完成没有结果,您需要有一些结果。

有谁知道如何解决这个问题?

这个问题也在Stackoverflow 上

sql-server-2008 full-text-search

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

SQL Server 配置/规范建议和意见!

我即将在工作中部署一台新服务器,如下所示:
Dell T610
2 x Xeon 2.53 四核
24 GB RAM
1 x Perc H700 RAID 控制器,1GB 非易失性内存
8 x 300GB 15k SAS 硬盘

我正在寻找有关如何最好地配置它以用作 SQL 服务器的建议。我有以下几点:

选项 1
为 TempDB
组所有 8 个驱动器分配一个 4GB RAM 驱动器到大型 RAID 10 阵列中,用于操作系统、数据库和日志文件

选项 2
为 TempDB 分配 4GB RAM 驱动器
使用一些混合的 RAID 阵列(但只有一个控制器)!

选项 3
任何其他建议!

有关信息,有问题的数据库包括:1 x 4GB 在大量读写使用下,1 x 4GB 克隆用于测试目的,2/3 其他更小的数据库。

sql-server-2008 sql-server

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

SQL Server 数据库文件碎片

我继承了一个系统,其中以前的 DBA 将 7 个数据文件添加到 PRIMARY 文件组(8MB 初始大小)并将 AUTOGROW 选项保留为 8MB。我现在拥有的是一组八个文件,每个文件的大小约为 3-4GB,这些文件在两年内一直在缓慢增长。我想以最快的方式删除文件碎片。

以下是我想出的选项:

  1. 将主文件组中的第一个文件扩展 ~28GB(7 个文件 x 4GB)
  2. 将数据从每个连续文件中移出并将它们标记为删除
  3. 删除其他 7 个文件
  4. 分离数据库
  5. 将分离的数据库文件复制到服务器上的不同驱动器
  6. 将分离的数据库文件复制回原始驱动器
  7. 重新连接数据库

或者

  1. 创建一个大小为 32GB (8 x 4GB) 的新数据库
  2. 使用 SSIS 将所有对象、表、用户和权限转移到新数据库
  3. 删除旧数据库
  4. 重命名新数据库

操作系统级别的“磁盘碎片整理”仍然不是一个选项吗?

我不知道哪个选项是最好的,或者它是否有效。

此外,该数据库正在被镜像和复制,因此在重建它方面的工作量最少。

谢谢你的帮助。

sql-server-2008

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

在 DB2 上,谁更新了记录,更新前记录是什么样的?

(SQL Server 2008 R2 Standard,数据库完全恢复)

我有一个包含字段 id、firstname、lastname 的表。执行一条语句:

insert into dbo.sometable (id, firstname, lastname) values (1, 'John', 'Smith')
Run Code Online (Sandbox Code Playgroud)

几个小时后,另一个语句被执行:

update dbo.sometable set firstname='Matt' where id=1
Run Code Online (Sandbox Code Playgroud)

是否有一种方法或工具可以让我们查看记录的历史记录(Y 人在 X 日期插入了一条记录,这些是插入的值,并且 B 人在 A 日期更新了相同的记录,并且这些是更新后的新值)?

熟悉 DB2 for i(即 iSeries 上的 DB2)的用户可能知道一个名为 CRTDBFJRN 的 TAA 工具集命令,该命令可以将给定表上的所有事务转储到另一个表中,从而清晰地显示插入、更新和被删除的字段。更新。

SQL Server Enterprise 有 CDC,但我们有标准版;我可以使用触发器通过存储在审计表中来跟踪更改的数据。触发器的使用将需要另外两个对象 - 触发器和审计表,并且触发器将在每次更改时触发。如果工具可以从交易文件中按需重放交易,那就太好了。

当审计师询问财务记录的历史记录(例如,在一天插入和更新)时,您使用什么工具或执行哪些任务,例如:谁更改了此记录,更改了什么,此记录最初是什么时候输入,原始输入时的数据是什么等?

任何帮助将不胜感激。谢谢你。

sql-server-2008 db2 transaction iseries

6
推荐指数
3
解决办法
5073
查看次数