CREATE DATABASE [База Данных] ON ( FILENAME = 'База Данных.mdf' ) FOR ATTACH_REBUILD_LOG
GO
PRODUCTION.MDF
имеет внутреннюю версию 869 (MS SQl 2017), а ваш сервер (MS SQL 2016) только — 852. Преобразовать вниз нельзя. Обновите MS SQL 2016 до MS SQl 2017. History of Microsoft SQL Server. Updates for Microsoft SQL Server. SELECT [Transaction ID],
CONVERT(varchar, [RowLog Contents 0]),
CONVERT(varchar, [RowLog Contents 1]),
CONVERT(varchar, [RowLog Contents 2]),
CONVERT(varchar, [RowLog Contents 3]),
CONVERT(varchar, [RowLog Contents 4]),
CONVERT(varchar, [RowLog Contents 5])
FROM sys.fn_dblog (NULL, NULL)
WHERE operation = 'LOP_INSERT_ROWS'
Работает. А у вас?Для каждого типа транзакций используются разные столбцы, для того, чтобы получить нужную вам информацию вы должны точно знать какие столбцы используются для каких транзакций, а сделать это не просто, так, как официальной документации с описанием нет.
Вставленные и удаленные строки хранятся в шестнадцатеричных значениях. Для того, чтобы вытащить данные из этих значений вы должны знать формат хранения, понимать биты состояний, знать общее количество столбцов и так далее.
данные в hex значении мне не понятныВ сети есть описание структур [RowLog Contents 0], например: Forensics или Decoding a Simple Update Statement Within the Tran... и пр.
CONVERT(VARCHAR,[RowLog Contents 0],2)
. обновление схемы в лоб занимает ~2 часовДобавление поля через
ALTER TABLE
ADD
занимает мало времени. Поэтому быстрее добавить поле и перенести данные, чем пересоздать таблицу с переносом данных. То есть ALTER TABLE [Table] ADD [ColumnTemp] DECIMAL (21,8)
GO
UPDATE [Table] SET [ColumnTemp] = [Column]
GO
ALTER TABLE [Table] DROP COLUMN [Column]
GO
ALTER TABLE [Table] ADD [Column] DECIMAL (21,8)
GO
UPDATE [Table] SET [Column] = [ColumnTemp]
GO
ALTER TABLE [Table] DROP COLUMN [ColumnTemp]
GO
Должно быть быстрее.ALTER TABLE [Table] ADD [ColumnTemp] DECIMAL (21,8)
GO
UPDATE [Table] SET [ColumnTemp] = [Column]
GO
ALTER TABLE [Table] DROP COLUMN [Column]
GO
EXEC sp_rename '[Table].[ColumnTemp]' '[Column]' 'COLUMN'
GO
присоединив базыУровень совместимости баз данных установите 130 ("Свойства", "Параметры").
что может вызвать такой поток ввода-вывода в sql ?1С. Она не использует оптимизацию SQL сервера совсем.
ID
, то можно сделать запрос с группировкой. Его результат добавить в копию таблицы и поменять их местами. Или результат группировки отфильтровать по количеству записей COUNT(*) > 1
, удалить по Pole_Id
и добавить суммы.SELECT Pole_id, Month, Year, SUM(Count)
FROM [Table]
GROUP BY Pole_id, Month, Year
HAVING (COUNT(*) > 1)