Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 如何从SQL Server中的LDF文件中提取T-SQL命令?_Sql Server 2008_Ssis_Ssas_Data Warehouse_Olap - Fatal编程技术网

Sql server 2008 如何从SQL Server中的LDF文件中提取T-SQL命令?

Sql server 2008 如何从SQL Server中的LDF文件中提取T-SQL命令?,sql-server-2008,ssis,ssas,data-warehouse,olap,Sql Server 2008,Ssis,Ssas,Data Warehouse,Olap,我使用SQLServer2008R2以及SSAS和SSIS 我创建了一个Stage数据库,每天都从OLTPs数据库中填充 然后,在数据清理和集成数据(ETL)之后,我将大部分数据转移到数据仓库 现在我需要做的是如何在OLTPs数据库中更改跟踪 我知道解决方案Trigger(我可以在OLTP数据库中的所有表上触发一个触发器,并记录触发器中插入/删除/更新的插入和删除表中的数据) 但我的OLTP数据库非常大(大约8000000条记录),create trigger使我的业务变慢 我在这个网站上找到了

我使用SQLServer2008R2以及SSAS和SSIS

我创建了一个Stage数据库,每天都从OLTPs数据库中填充

然后,在数据清理和集成数据(ETL)之后,我将大部分数据转移到
数据仓库

现在我需要做的是如何在OLTPs数据库中更改跟踪

我知道解决方案
Trigger
(我可以在OLTP数据库中的所有表上触发一个触发器,并记录触发器中插入/删除/更新的插入和删除表中的数据)

但我的OLTP数据库非常大(大约8000000条记录),create trigger使我的业务变慢

我在这个网站上找到了如下查询:

SELECT 
*
FROM 
sys.fn_dblog(NULL,NULL)
显示
LDF
文件中的所有记录

我发现一些第三方软件可以读取LDF文件,然后提取命令(插入/更新/删除),如

我在这个网站上发现了一个问题

最后我想,如果第三方可以从LDF文件中提取这个命令,为什么我们不能提取呢

另一方面,我需要在OLTPs数据库中找到像ALTERTABLE和ALTERFIELD这样的DDL命令来更改我的后台数据库


我发现它可以反转LDF文件中删除的行

您可以使用Kalen Delaney的SQL Server xxx Internals一书中描述的sys.fn_dblog()函数转储日志实体

-- Use adventure works
USE AdventureWorks2012;
go

-- Dump (ins, del, upd) rows
SELECT *
FROM sys.fn_dblog(NULL,NULL)
WHERE Operation IN ('LOP_DELETE_ROWS', 'LOP_INSERT_ROWS','LOP_MODIFY_ROW');
go
但是,这些字段是包含插入和删除数据的二进制字段。此外,更新可能只包含部分数据

我没有对此做太多研究

然而,每个人都知道固定数据首先存储在一行中,然后是可变长度的数据。看这本书。您必须解析出二进制blob的每个部分。这适用于简单数据,而不是特殊的页面类型

看看这一点,这需要在一个固定的例子,只是这样做的抽签


如果您想为任何表动态执行此操作,请从花时间进行研究的公司购买商用现货(COTS)产品。

虽然上面的答案将告诉您如何查看事务日志,但我同意JNK的观点,即解析事务日志并不是表更改的良好审计线索

这完全取决于您想要保留多少审计数据,以及您愿意在审计过程中放松多少速度。不要忘记数据保留期

1-基于触发器的审计在表和数据库级别都可以正常工作。请参阅我的,以了解有关此的演示

但是,对具有大量更改的表进行审核可能不实用,并且您可能永远不会使用数据。保留期是关键

2-如果要使用SQL Server内置的功能,请查看更改数据捕获功能。它基于作为周期性SQL代理作业读取日志文件。因此,您没有针对每个事件的触发器触发。在某事发生和它发生之间有一个滞后时间

3-如果您只是查看记录是由谁插入或更新的,以及何时插入或更新的,那么这可以通过修改数据仓库的自定义ETL代码来完成。只需将这些字段添加到表中,并让代码更新它们

我希望这些建议能让您远离阅读事务日志,因为它实际上可能非常乏味

约翰

我发现:

Select * from ::fn_dblog(null,null)
或参阅此链接:


或此链接:

我需要一个更窄、格式更准确的问题。根据您的编辑,您需要开始使用一些更改跟踪。为此解析日志文件不是一个解决方案。我认为
更改数据捕获
是更好的解决方案。谢谢。