SQL Server 2008数据库变更跟踪详解
SQL Server 2008数据库变更跟踪的相关知识是本文我们主要要介绍的内容,本文我们主要介绍了怎样在数据库、表上激活变更跟踪,以及怎样打开各种选项,例如AUTO_CLEANUP、TRACK_COLUMNS_UPDATED,一些应用程序是设计成将数据从一个中央数据库拿到一个本地缓存
SQL Server 2008数据库变更跟踪的相关知识是本文我们主要要介绍的内容,本文我们主要介绍了怎样在数据库、表上激活变更跟踪,以及怎样打开各种选项,例如AUTO_CLEANUP、TRACK_COLUMNS_UPDATED,一些应用程序是设计成将数据从一个中央数据库拿到一个本地缓存中,举例来说,到处奔走的销售人员只是偶尔连接到中央数据库来获取最新的库存量数据。或者业务逻辑的重型处理是从产品数据库服务器上脱机下载下来的,本地进行处理然后发送回产品数据库。这些应用程序需要某种方法来跟踪数据变更,以便知道什么数据被改变了。
在SQL Server 2008之前,应用程序开发人员需要使用触发器或时间戳字段来实现定制跟踪解决方案,并创建额外的表以便跟踪数据变更。而我们都知道,触发器是很昂贵的。DML操作中所涉及的每个表通过一个用于触发器展示的内部函数递归检查。此外,因为触发器是作为启动它们的事务的一部分来执行的,导致它们需要更长的时间来提交,而且引起负载的锁问题。SQL Server 2008提供了一个新特性,变更跟踪。
变更跟踪对于建立单向和双向的同步应用程序来说是很好的,它被设计为使用用于ADO.NET的Sync Services。应用程序开发人员可以使用变更跟踪来同步SQL Server数据库间的任何数据,或甚至是在SQL Server和非SQL Server数据库之间。与复制相比,变更跟踪更适合于开发人员而不是数据库管理员,因为它提供给开发人员一个灵活的基础来使用.NET建立同步应用程序,但是它缺乏存储过程的支持或内置的监控工具,比如Replication Monitor。
在一个已有的表上激活变更跟踪并不需要对表结构进行任何改变。唯一的要求是这个表必须已有一个主键。变更跟踪信息同步地在事务提交时进行了记录,所以它展示的DML操作顺序是正确的。尽管变更跟踪是和事务同步执行的,但是它的执行成本和触发器相比是非常高的。此外,它只捕捉变更记录主键字段的值,并在变更跟踪表中记录这些值。这些值会被连接到基础表以获得变更的数据。与变更数据捕获相比,它的存储成本要低,因为在变更跟踪表中不捕获非主键字段。但是,因为对数据记录来说,能够被查询的只是净变化,而不是中间的变化,变更跟踪不适合于审计。
对数据库AdventureWorks2008中的表HumanResources.Department建立变更跟踪以及怎样查询变更的数据。在你对表激活变更跟踪之前,你需要对这个数据库激活变更跟踪。执行下面的命令在数据库AdventureWorks2008上激活变更跟踪。
ALTER DATABASE AdventureWorks2008 SET CHANGE_TRACKING = ON (AUTO_CLEANUP=ON, CHANGE_RETENTION=8 hours) GO
当这个命令运行时,当AUTO_CLEANUP选项设置为打开时,它还激活变更跟踪信息的自动清理。保留时间设置为至少8小时。每30分钟会有一个内部任务运行一次来删除旧的事务。SQL Server 也将使用事务信息填充到一个内部系统表sys.syscommittab中去。这个表将对每个引起数据库中跟踪表上数据修改的事务具有一条记录。尽管这个表不能在非DAC连接中查看到,但是这个表中的信息是通过一个DMV——sys.dm_tran_commit_table ——暴露的。下面是这个DMV中的字段。
commit_ts:一个递增的数字,它是作为用于每个提交的事务的一个数据库特定的时间戳。
xdes_id:一个用于事务的数据库特定的内部ID。
commit_lbn:日志块的数目,它包含事务的提交日志记录。
commit_csn:事务的实例特定的提交顺序数字。
commit_time:事务提交的时间。
如果你在这个数据库上从没激活过变更跟踪,那么这个DMV是空的。
1.select * from sys.dm_tran_commit_table 要在表HumanResources.Department上激活变更跟踪,那么运行下面的命令。
1.ALTER TABLE HumanResources.Department 2. 3.ENABLE CHANGE_TRACKING 4. 5.GO 这个命令创建一个内部表,它被用来记录对表HumanResources.Department所做的变更。这个表的名称是change_tracking_[tableObjectID]。因为它是一个内部表,所以它只能在DAC连接中查看。在我们的例子中,表HumanResources.Department的对象ID是757577737,因此这个表的名称是“change_tracking_757577737”。这个表如下所示是空的,这是因为我们没有对表HumanResources.Department做任何修改,下面是这个表的字段。
sys_change_xdes_id:修改记录的事务的事务ID。
sys_change_xdes_id_seq:事务中操作的顺序标识。
sys_change_operation:影响记录的操作类型:插入、更新或删除。
sys_change_columns:修改了的字段的列表(用于更新,只有当字段跟踪被激活时)。
sys_change_context:在DML操作过程中使用WITH CHANGE_ TRACKING_CONTEXT选项所提供的应用程序特定的上下文信息。
k_[name]_[ord]:从目标表获得的主键字段。[name]是主键字段的名称,[ord]是主键中的顺序位置,而[type]是这个字段的数据类型。
因为表HumanResources.Department在主键上只有一个字段——DepartmentID,所以在变更跟踪表中只有一个主键字段k_DepartmentID_00000001。sys_change_columns字段可以被用来跟踪对于每个更新操作哪些字段被修改了。(插入和删除语句总是改变所有的字段,所以这个字段对于插入和删除总是NULL)。通过在这个表上激活字段跟踪,你可以获得只从这些更新了的字段而来的数据。这将限制返回和通过网络转移的数据的数量。这还将更有效地合并增加数据的变更,因为大规模字段——例如varbinary(max)和xml——只在它们被更新了才返回。要激活字段跟踪,设置TRACK_COLUMNS_UPDATED选项。
ALTER TABLE HumanResources.Department ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = ON)
你还会使用sys_change_context字段来跟踪表发生变更的上下文。这个上下文是由生成DML语句的客户端提供的。它可以是一个常量,例如一个应用ID。一个示例更新语句如下所示。
DECLARE @originator_id varbinary(128) SET @originator_id = CAST('MyApplication' AS varbinary(128)) WITH CHANGE_TRACKING_CONTEXT (@originator_id) UPDATE HumanResources.Department SET GroupName='Accounting' WHERE DepartmentID=10
如果你想关闭数据库上的变更跟踪,那么你需要首先关闭这个数据库中所有表的变更跟踪。你可以从sys.change_tracking_tables目录视图中查找这样表的列表。下面是一个生成所有ALTER TABLE语句的简单SQL语句。
SELECT 'ALTER TABLE ' + object_name(object_id) + ' DISABLE CHANGE_TRACKING;' FROM sys.change_tracking_tables
在你关闭了表的变更跟踪之后,运行下面的命令来关闭数据库的变更跟踪。
ALTER DATABASE AdventureWorks2008 SET CHANGE_TRACKING = OFF
关于SQL Server 2008数据库变更跟踪的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!
FROM:http://database.ctocio.com.cn/144/12160644.shtml

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











HQL과 SQL은 Hibernate 프레임워크에서 비교됩니다. HQL(1. 객체 지향 구문, 2. 데이터베이스 독립적 쿼리, 3. 유형 안전성), SQL은 데이터베이스를 직접 운영합니다(1. 데이터베이스 독립적 표준, 2. 복잡한 실행 파일) 쿼리 및 데이터 조작).

Hibernate 다형성 매핑은 상속된 클래스를 데이터베이스에 매핑할 수 있으며 다음 매핑 유형을 제공합니다. Join-subclass: 상위 클래스의 모든 열을 포함하여 하위 클래스에 대한 별도의 테이블을 생성합니다. 클래스별 테이블: 하위 클래스별 열만 포함하는 하위 클래스에 대한 별도의 테이블을 만듭니다. Union-subclass: Joined-subclass와 유사하지만 상위 클래스 테이블이 모든 하위 클래스 열을 통합합니다.

Apple의 최신 iOS18, iPadOS18 및 macOS Sequoia 시스템 릴리스에는 사진 애플리케이션에 중요한 기능이 추가되었습니다. 이 기능은 사용자가 다양한 이유로 손실되거나 손상된 사진과 비디오를 쉽게 복구할 수 있도록 설계되었습니다. 새로운 기능에는 사진 앱의 도구 섹션에 '복구됨'이라는 앨범이 도입되었습니다. 이 앨범은 사용자가 기기에 사진 라이브러리에 포함되지 않은 사진이나 비디오를 가지고 있을 때 자동으로 나타납니다. "복구된" 앨범의 출현은 데이터베이스 손상으로 인해 손실된 사진과 비디오, 사진 라이브러리에 올바르게 저장되지 않은 카메라 응용 프로그램 또는 사진 라이브러리를 관리하는 타사 응용 프로그램에 대한 솔루션을 제공합니다. 사용자는 몇 가지 간단한 단계만 거치면 됩니다.

HTML은 데이터베이스를 직접 읽을 수 없지만 JavaScript 및 AJAX를 통해 읽을 수 있습니다. 단계에는 데이터베이스 연결 설정, 쿼리 보내기, 응답 처리 및 페이지 업데이트가 포함됩니다. 이 기사에서는 JavaScript, AJAX 및 PHP를 사용하여 MySQL 데이터베이스에서 데이터를 읽는 실제 예제를 제공하고 쿼리 결과를 HTML 페이지에 동적으로 표시하는 방법을 보여줍니다. 이 예제에서는 XMLHttpRequest를 사용하여 데이터베이스 연결을 설정하고 쿼리를 보내고 응답을 처리함으로써 페이지 요소에 데이터를 채우고 데이터베이스를 읽는 HTML 기능을 실현합니다.

PHP에서 데이터베이스 연결 오류를 처리하려면 다음 단계를 사용할 수 있습니다. mysqli_connect_errno()를 사용하여 오류 코드를 얻습니다. 오류 메시지를 얻으려면 mysqli_connect_error()를 사용하십시오. 이러한 오류 메시지를 캡처하고 기록하면 데이터베이스 연결 문제를 쉽게 식별하고 해결할 수 있어 애플리케이션이 원활하게 실행될 수 있습니다.

MySQLi를 사용하여 PHP에서 데이터베이스 연결을 설정하는 방법: MySQLi 확장 포함(require_once) 연결 함수 생성(functionconnect_to_db) 연결 함수 호출($conn=connect_to_db()) 쿼리 실행($result=$conn->query()) 닫기 연결( $conn->close())

Golang의 데이터베이스 콜백 기능을 사용하면 다음을 달성할 수 있습니다. 지정된 데이터베이스 작업이 완료된 후 사용자 정의 코드를 실행합니다. 추가 코드를 작성하지 않고도 별도의 함수를 통해 사용자 정의 동작을 추가할 수 있습니다. 삽입, 업데이트, 삭제, 쿼리 작업에 콜백 함수를 사용할 수 있습니다. 콜백 함수를 사용하려면 sql.Exec, sql.QueryRow, sql.Query 함수를 사용해야 합니다.

Go 표준 라이브러리 데이터베이스/sql 패키지를 통해 MySQL, PostgreSQL 또는 SQLite와 같은 원격 데이터베이스에 연결할 수 있습니다. 데이터베이스 연결 정보가 포함된 연결 문자열을 생성합니다. sql.Open() 함수를 사용하여 데이터베이스 연결을 엽니다. SQL 쿼리 및 삽입 작업과 같은 데이터베이스 작업을 수행합니다. 리소스를 해제하기 위해 defer를 사용하여 데이터베이스 연결을 닫습니다.
