Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Определение последнего LSN базы в состоянии Loading  [new]
Alex-00000
Guest
Подскажите пожалуйста, как получить последний загруженный LSN для базы в состоянии Loading ?
17 авг 06, 09:50    [3014457]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
gang
Member

Откуда:
Сообщений: 1394
Alex-00000
Подскажите пожалуйста, как получить последний загруженный LSN для базы в состоянии Loading ?

Таблицы msdb..restorehistory, msdb..backupset. информация в restorehistory заносится после успешного рестора. Копайте.
17 авг 06, 10:58    [3014945]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
gang
Member

Откуда:
Сообщений: 1394
gang
Alex-00000
Подскажите пожалуйста, как получить последний загруженный LSN для базы в состоянии Loading ?

Таблицы msdb..restorehistory, msdb..backupset. информация в restorehistory заносится после успешного рестора. Копайте.

Держите от щедрот:
select top 1 restore_history_id,restore_date,destination_database_name,h.backup_set_id,
first_lsn,last_lsn,checkpoint_lsn,database_backup_lsn
from msdb..restorehistory h,msdb..backupset b where destination_database_name='MyDBName' and h.backup_set_id=b.backup_set_id order by 1 desc
Какой именно lsn Вам нужен думаю сами разберетесь.
17 авг 06, 11:07    [3015000]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
Alex-00000
Guest
Спасибо, то что нужно.
17 авг 06, 11:09    [3015015]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
Александр Гладченко
Member

Откуда:
Сообщений: 10715
Блог
DBCC OPENTRAN;
17 авг 06, 11:25    [3015125]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
Crimean
Member

Откуда:
Сообщений: 13148
все, в общем-то, неправы :)

CREATE PROCEDURE sp_can_tlog_be_applied
  @backup_file_name NVARCHAR(128),
  @database_name    sysname,
  @result           BIT = 0 OUTPUT
AS
BEGIN
  DECLARE @command                 NVARCHAR(256)
  DECLARE @db_recovery_fork_id0    UNIQUEIDENTIFIER
  DECLARE @db_recovery_fork_id1    UNIQUEIDENTIFIER
  DECLARE @db_backup_lsn           NUMERIC(25,0)
  DECLARE @backup_type             INT
  DECLARE @backup_recovery_fork_id UNIQUEIDENTIFIER
  DECLARE @backup_last_lsn         NUMERIC(25,0)
  DECLARE @lsn_slot                INT
  DECLARE @lsn_block               INT
  DECLARE @lsn_file                INT

  SET NOCOUNT ON

  SELECT @result = 0

  CREATE TABLE #db_info
  (
  ParentObject NVARCHAR(128) COLLATE database_default ,
  Object       NVARCHAR(128) COLLATE database_default,
  Field        NVARCHAR(128) COLLATE database_default,
  Value        SQL_VARIANT
  )

  CREATE TABLE #backup_header
  (
  BackupName             NVARCHAR(128) COLLATE database_default NULL,
  BackupDescription      NVARCHAR(256) COLLATE database_default NULL,
  BackupType             INT, 
  ExpirationDate         DATETIME NULL,
  Compressed             INT,
  Position               INT,
  DeviceType             INT,
  UserName               NVARCHAR(128) COLLATE database_default NULL,
  ServerName             NVARCHAR(128) COLLATE database_default,
  DatabaseName           NVARCHAR(128) COLLATE database_default,
  DatabaseVersion        INT,
  DatabaseCreationDate   DATETIME,
  BackupSize             NUMERIC(20,0) NULL,
  FirstLsn               NUMERIC(25,0) NULL,
  LastLsn                NUMERIC(25,0) NULL,
  CheckpointLsn          NUMERIC(25,0) NULL,
  DatabaseBackupLsn      NUMERIC(25,0) NULL,
  BackupStartDate        DATETIME,
  BackupFinishDate       DATETIME,
  SortOrder              INT,
  CodePage               INT,
  UnicodeLocaleId        INT,
  UnicodeComparisonStyle INT,
  CompatibilityLevel     INT,
  SoftwareVendorId       INT,
  SoftwareVersionMajor   INT,
  SoftwareVersionMinor   INT,
  SoftwareVersionBuild   INT,
  MachineName            NVARCHAR(128) COLLATE database_default,
  Flags                  INT NULL,
  BindingId              UNIQUEIDENTIFIER NULL,
  RecoveryForkId         UNIQUEIDENTIFIER NULL,
  Collation              nvarchar(128)    null
  )

  -- Populate temp tables

  SELECT @command = N'RESTORE HEADERONLY FROM DISK = N''' + @backup_file_name + N'''' 
  INSERT INTO #backup_header
  EXECUTE (@command)

  SELECT @command = N'DBCC DBINFO(N''' + @database_name + N''') WITH TABLERESULTS'
  INSERT INTO #db_info
  EXECUTE (@command)

  -- Get the values we need into variables for easy access

  SELECT top 1 @db_recovery_fork_id0 = ISNULL(CONVERT(UNIQUEIDENTIFIER, Value), 0x00)
  FROM #db_info
  WHERE (Object = N'dbi_recoveryForkNameStack')
    AND (Field = N'm_guid')

  SELECT @db_recovery_fork_id1 = ISNULL(CONVERT(UNIQUEIDENTIFIER, Value), 0x00)
  FROM #db_info
  WHERE (Object = N'dbi_recoveryForkNameStack')
    AND (Field = N'm_guid')
  
  SELECT @lsn_slot = CONVERT(INT, Value)
  FROM #db_info
  WHERE (Object = N'dbi_dbbackupLSN')
    AND (Field = N'm_slotId')

  SELECT @lsn_block = CONVERT(INT, Value)
  FROM #db_info
  WHERE (Object = N'dbi_dbbackupLSN')
    AND (Field = N'm_blockOffset')

  SELECT @lsn_file = CONVERT(INT, Value)
  FROM #db_info
  WHERE (Object = N'dbi_dbbackupLSN')
    AND (Field = N'm_fSeqNo')

  SELECT @db_backup_lsn = @lsn_file
  SELECT @db_backup_lsn = @db_backup_lsn * 10000000000
  SELECT @db_backup_lsn = @db_backup_lsn + @lsn_block
  SELECT @db_backup_lsn = @db_backup_lsn * 100000
  SELECT @db_backup_lsn = @db_backup_lsn + @lsn_slot

  SELECT TOP 1 @backup_type = BackupType
  FROM #backup_header

  -- Null fork id's indicate an old system, for which this backup scheme won't work,
  -- so we set a null result to a value different than the db fork_id.

  SELECT TOP 1 @backup_recovery_fork_id = ISNULL(RecoveryForkId, 0x01)
  FROM #backup_header

  SELECT TOP 1 @backup_last_lsn = ISNULL(LastLsn, 0)
  FROM #backup_header

  -- Basic sanity checks

  IF ((SELECT TOP 1 DatabaseName FROM #backup_header) <> @database_name)
  BEGIN
    RAISERROR(14418,-1,-1, @database_name)
    RETURN(1) -- Failure
  END

  IF (@backup_type <> 1)
  BEGIN
    RAISERROR(14419,-1,-1)
    RETURN(1) -- Failure
  END

  -- Do the magic.
  IF (@backup_type = 1) AND
     ((@db_recovery_fork_id0 = @backup_recovery_fork_id) OR
      (@db_recovery_fork_id1 = @backup_recovery_fork_id)) AND
     (@db_backup_lsn <= @backup_last_lsn)
    SELECT @result = 1
  ELSE
    SELECT @result = 0

  RETURN(0) -- Success
END
GO

выдрано из msdb из ee версии сиквела
17 авг 06, 11:32    [3015185]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
Александр Гладченко
Member

Откуда:
Сообщений: 10715
Блог
Есть ещё одно, недокументированное средство...

DBCC log
This command is used to view the transactional log for the specified
database.

DBCC log ( {dbid|dbname}, [, type={-1|0|1|2|3|4}] )


PARAMETERS:
Dbid or dbname - Enter either the dbid or the name of the database
in question.

type - is the type of output:

0 - minimum information (operation, context, transaction id)

1 - more information (plus flags, tags, row length)

2 - very detailed information (plus object name, index name,
page id, slot id)

3 - full information about each operation

4 - full information about each operation plus hexadecimal dump
of the current transaction log's row.

-1 - full information about each operation plus hexadecimal dump
of the current transaction log's row, plus Checkpoint Begin,
DB Version, Max XACTID

by default type = 0

To view the transaction log for the master database, you can run the
following command:

DBCC log (master)
17 авг 06, 11:46    [3015325]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
gang
Member

Откуда:
Сообщений: 1394
Александр Гладченко
Есть ещё одно, недокументированное средство...

DBCC log
This command is used to view the transactional log for the specified
database.

DBCC log ( {dbid|dbname}, [, type={-1|0|1|2|3|4}] )


PARAMETERS:
Dbid or dbname - Enter either the dbid or the name of the database
in question.

type - is the type of output:

0 - minimum information (operation, context, transaction id)

1 - more information (plus flags, tags, row length)

2 - very detailed information (plus object name, index name,
page id, slot id)

3 - full information about each operation

4 - full information about each operation plus hexadecimal dump
of the current transaction log's row.

-1 - full information about each operation plus hexadecimal dump
of the current transaction log's row, plus Checkpoint Begin,
DB Version, Max XACTID

by default type = 0

To view the transaction log for the master database, you can run the
following command:

DBCC log (master)

А вы пробовали применять его к БД в состоянии Loading?
17 авг 06, 11:54    [3015403]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
Alex-00000
Guest
Спасибо, то что нужно.
17 авг 06, 13:30    [3016358]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
Александр Гладченко
Member

Откуда:
Сообщений: 10715
Блог
gang

А вы пробовали применять его к БД в состоянии Loading?


Нет, не пробовал.
17 авг 06, 15:27    [3017427]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
Beer
Member

Откуда:
Сообщений: 11
Подниму топик.
Попробовал пользовать sp_can_tlog_be_applied - на бекап лога ругается:

Server: Msg 14419, Level 16, State 1, Line 1
The specified @backup_file_name is not a database backup.

В коде:
 IF (@backup_type <> 1)
  BEGIN
    RAISERROR(14419,-1,-1)
    RETURN(1) -- Failure
  END
Однако @backup_type = 1 для бекапа БД. Для бекапа лога @backup_type = 2
То ли я глючу, то ли не понимаю, что эта sp должна делать, то ли в сходниках 1 на 2 надо поменять ?
19 окт 06, 17:33    [3283999]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
gang
Member

Откуда:
Сообщений: 1394
Beer
Попробовал пользовать sp_can_tlog_be_applied - на бекап лога ругается:

Server: Msg 14419, Level 16, State 1, Line 1
The specified @backup_file_name is not a database backup.

На что ругается? У вас текст запроса: использовать sp_can_tlog_be_applied - на бекап лога
Beer

В коде:
 IF (@backup_type <> 1)
  BEGIN
    RAISERROR(14419,-1,-1)
    RETURN(1) -- Failure
  END

В коде чего?
Beer

Однако @backup_type = 1 для бекапа БД. Для бекапа лога @backup_type = 2
То ли я глючу, то ли не понимаю, что эта sp должна делать, то ли в сходниках 1 на 2 надо поменять ?

Если не понимаете, то с чего взялись использовать ее для своих (не озвученных) целей? А на счет правки исходников - вперед! Самый верный способ заставить "какую-то процедуру" делать "то что мне нужно" эт конечно перелопатить родные исходники :-))
19 окт 06, 17:41    [3284071]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
gang
Member

Откуда:
Сообщений: 1394
Сформулируйте суть проблемы. Что хотите. Что для это делаете. С какими проблемами столкнулись. В оющем правила оформления постов в форуме вам помогут.
19 окт 06, 17:43    [3284091]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
Beer
Member

Откуда:
Сообщений: 11
declare @result bit
exec	sp_can_tlog_be_applied
	@backup_file_name = N'd:\trn\DB_tlog_200610162352.TRN',
	@database_name =  N'DB',
	@result = @result OUTPUT
select @result

Как понял из BOL процедура используется для проверки - можно ли накатить конкретный бекап ТЛ на данную БД.
19 окт 06, 17:46    [3284106]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
gang
Member

Откуда:
Сообщений: 1394
Да, по ходу облажались мелко-мягкие. Действительно фурычит только для полнык баков. Ни в msdb ни master-е не нашел ни одной процы которая бы на енту хрень ссылалась. В семерке такой не было и в 2005 не стало. Видать Билла кто-то забористыми грибами взгрел :-)))
19 окт 06, 18:07    [3284254]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
Beer
Member

Откуда:
Сообщений: 11
только для полных баков смысл в ей напрочь отсутствует
19 окт 06, 18:12    [3284288]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
Beer
Member

Откуда:
Сообщений: 11
Ладно, поэкспериментирую с @backup_type 2
19 окт 06, 18:13    [3284294]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
Beer
Member

Откуда:
Сообщений: 11
А процедура эта есть в 2005, только в master а не в msdb и переделанная
19 окт 06, 18:23    [3284354]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Определение последнего LSN базы в состоянии Loading  [new]
Pix
Guest
Подскажите пожалуйста, как мне получить последний LSN.

select top 1 [Current LSN] from (DBCC log ('master', 3)) order by [Current LSN] desc

Пока приходит мысль запихнуть DBCC log ('master', 3) в ХП, и уже оттуда брать.
Может есть другое решение?
13 ноя 09, 19:13    [7928210]     Ответить | Цитировать Сообщить модератору
 Re: Определение последнего LSN базы в состоянии Loading  [new]
Pix
Guest
Прошу прощения за бестолковость. Поднял глаза выше на несколько постов, все увидел )
14 ноя 09, 17:06    [7929700]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить