我正在捕获 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) 我知道如何使用 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
我们有一个客户端,我们将允许它使用我们的一个应用程序。现场工作人员定期通过 VPN 连接到我们的网络。连接到 SQL Server 的 .Net 应用程序使用集成安全性。他们使用的笔记本电脑是我们域的成员。
客户也请求使用该应用程序。所以我们给了他们一个网络帐户和在我们的网络上创建 VPN 会话的能力。我让该帐户在 SQL 服务器上登录,其权限与我们自己的员工相同。
问题是,当他们尝试使用该应用程序时,会收到以下错误: 登录来自不受信任的域,无法与 Windows 身份验证一起使用。
我猜因为他们使用的计算机不在我们的域中,所以他们使用 VPN 登录并不重要。那么,解决这个问题的最佳方法是什么?我宁愿不为这个小应用程序切换到 SQL 身份验证。
我在两个 SQL Server 2008 SP1 服务器之间有一个事务复制,它们都在 Windows 2003 Server 上。发现主库和订阅库的部分表存在差异。我已经对记录计数进行了手动验证,并且存在细微差异。我知道双方之间存在延迟,所以不用太担心,但是有一个特定的表无论如何都不会同步(新行出现,但一些特定的旧行没有出现,所以它们看起来像同步后删除)。
情况是订阅数据库不是只读的,因此应用程序可以读取数据,也可以向该数据库写入数据。
现在我想知道您将使用哪些解决方案来同步双方。我现在能想到两个:
对每篇文章使用 tablediff.exe 实用程序来比较源表和目标表并生成脚本
重新初始化订阅,这样它就会使上一个快照无效并生成一个新快照。
有没有其他解决方案来解决这个问题?
我们多年来一直在运行 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 编写的。如果我们可以迁移它们,那很好,但如果不能,我们可能必须为所有人编写新的,一旦你编写了第一个,这不会那么难。
这有帮助吗?
The select permission was denied on the object 'sysjobs', database 'msdb', schema 'dbo'.
Run Code Online (Sandbox Code Playgroud)
我已经尝试授予sqlagentoperatorrole,但没有奏效。如何解决此错误?
我有一个在标题列上启用全文搜索的表格。我尝试使用包含表进行加权搜索,但我得到了 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 上
我即将在工作中部署一台新服务器,如下所示:
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 其他更小的数据库。
我继承了一个系统,其中以前的 DBA 将 7 个数据文件添加到 PRIMARY 文件组(8MB 初始大小)并将 AUTOGROW 选项保留为 8MB。我现在拥有的是一组八个文件,每个文件的大小约为 3-4GB,这些文件在两年内一直在缓慢增长。我想以最快的方式删除文件碎片。
以下是我想出的选项:
或者
操作系统级别的“磁盘碎片整理”仍然不是一个选项吗?
我不知道哪个选项是最好的,或者它是否有效。
此外,该数据库正在被镜像和复制,因此在重建它方面的工作量最少。
谢谢你的帮助。
(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 ×10
db2 ×1
iseries ×1
permissions ×1
replication ×1
scripting ×1
security ×1
sql-clr ×1
sql-server ×1
ssis ×1
transaction ×1