Сегодня я обнаружил команду DBCC PAGE()
. Я понимаю, что он отображает информацию о данных, хранящихся на уровне страницы.
(Этот вопрос о SQL Server 2017 - v14.0)
Вот что я делаю:
- Я хочу получить данные из моей таблицы с именем
user
- . Я получаю доступ к номеру страницы и номеру файла этой таблицы, используя
DBCC IND()
DBCC IND('gescom', 'user', -1)
Результат предыдущей команды:
PageFID PagePID IAMFID IAMPID ObjectID IndexID PartitionNumber PartitionID iam_chain_type PageType IndexLevel NextPageFID NextPagePID PrevPageFID PrevPagePID
------- ----------- ------ ----------- ----------- ----------- --------------- -------------------- -------------------- -------- ---------- ----------- ----------- ----------- -----------
4 8 NULL NULL 917578307 0 1 72057594043105280 In-row data 10 NULL 0 0 0 0
5 8 4 8 917578307 0 1 72057594043105280 In-row data 1 0 0 0 0 0
Я ищу данные во второй строке, так как это строка с PageType = 1 (страница данных) Поэтому я использую команду
DBCC PAGE
со следующими параметрами: database = ' gescom ', номер файла = 5, номер страницы = 8, опция отображения = 3
DBCC TRACEON(3604) -- Activate display trace
DBCC PAGE('gescom', 5, 8, 3)
Результат предыдущей команды (усеченный результат ...):
Page @0x0000018E2D3D6000
[...]
Memory Dump @0x0000005DD33FA000
0000005DD33FA000: 01010000 08020001 00000000 00001400 00000000 ....................
0000005DD33FA014: 00000400 b1000000 8a1e3f03 08000000 05000000 ....±....?.........
0000005DD33FA028: 26000000 b00f0000 6b000000 2a100000 00000000 &...°...k...*.......
0000005DD33FA03C: 70954bd5 00000000 00000000 00000000 00000000 pKÕ................
0000005DD33FA050: 00000000 00000000 00000000 00000000 30001400 ................0...
0000005DD33FA064: b6ec768b aadc3c49 9ef64911 a2bb0766 04000003 ¶ìvªÜ<IöI.¢».f....
0000005DD33FA078: 00290031 0041004a 65616e4d 69636865 6c427570 .).1.A.JeanMichelBup
0000005DD33FA08C: 7550554f 494a6561 6e4d6940 7961686f 6f2e636f uPUOIJeanMi@yahoo.co
0000005DD33FA0A0: 6d300014 0076cf59 d2c044d1 49866422 8f4afddf m0...vÏYÒÀDÑId".Jýß
Затем я наконец пытаюсь обновить эти данные:
BEGIN TRAN T1
UPDATE [USER]
SET pseudo = 'newPseudo'
WHERE email LIKE '%Mi%'
Затем я Я хочу увидеть, по какому адресу установлена блокировка, поэтому я запускаю следующий запрос, пока не завершаю предыдущую транзакцию:
SELECT * FROM sys.dm_tran_locks
Вот результат (посмотрите на столбец lock_owner_address):
resource_type resource_subtype resource_database_id resource_description resource_associated_entity_id resource_lock_partition request_mode request_type request_status request_reference_count request_lifetime request_session_id request_exec_context_id request_request_id request_owner_type request_owner_id request_owner_guid request_owner_lockspace_id lock_owner_address
------------------------------------------------------------ ------------------------------------------------------------ -------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------- ----------------------- ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ----------------------- ---------------- ------------------ ----------------------- ------------------ ------------------------------------------------------------ -------------------- ------------------------------------ -------------------------------- ------------------
DATABASE 5 0 0 S LOCK GRANT 1 0 57 0 0 SHARED_TRANSACTION_WORKSPACE 0 00000000-0000-0000-0000-000000000000 0x0000018E3B366130:0:0 0x0000018E36E1AE80
PAGE 5 5:8 72057594043105280 0 IX LOCK GRANT 0 33554432 57 0 0 TRANSACTION 218160 00000000-0000-0000-0000-000000000000 0x0000018E3B366130:1:1 0x0000018E2D61E380
OBJECT 5 917578307 0 IX LOCK GRANT 1 33554432 57 0 0 TRANSACTION 218160 00000000-0000-0000-0000-000000000000 0x0000018E3B366130:1:1 0x0000018E2D61D9C0
Здесь я не могу понять, почему адрес блокировки объекта отличается (= 0x0000018E2D61D9C0) от адреса, ранее замеченного с помощью команды DB CC PAGE (= 0000005DD33FA078)?
Я вижу, что номер страницы совпадает: @ 0x0000018E2D 3D6000, но я не могу понять, почему адрес блокировки объекта не совпадает ни с одним адресом в результате DBCC PAGE
...
Пожалуйста подскажите где я делаю что то не так: |