При работе с базами данных SQL Server важно понимать определенные концепции, которые могут влиять на производительность и безопасность. В этой статье мы рассмотрим две важные концепции: размеры журнальных файлов и владение базами данных.
Размеры журнальных файлов
При восстановлении базы данных из производственной среды в среду разработки или тестирования часто возникают проблемы с размером журнального файла транзакций. В производстве база данных может быть настроена на восстановление до определенного момента времени с использованием полного режима восстановления. Однако в не-производственных средах такой уровень восстановления может быть необязательным.
По умолчанию при создании новой базы данных она создается с полным режимом восстановления. Это может привести к значительному увеличению размера журнального файла транзакций, иногда даже больше размера файлов базы данных.
Чтобы быстро определить размер файлов базы данных, вы можете использовать следующий запрос:
SELECT NAME, type_desc, (size / 128) AS [Size_in_MB] FROM sys.database_files;Столбец size представляет собой количество страниц размером 8 КБ, выделенных для файла. Чтобы преобразовать это в МБ, вы можете умножить на 8, чтобы получить КБ, а затем разделить на 1024, чтобы получить МБ.
Если вы обнаружите, что размер журнального файла транзакций значительно превышает размер файлов базы данных, вероятно, база данных находится в полном режиме восстановления, когда для не-производственных сред необходим только простой режим восстановления.
Вы можете определить базы данных, которые не находятся в простом режиме восстановления, выполнив следующий запрос:
SELECT [name], recovery_model_desc FROM sys.databases WHERE recovery_model_desc <> 'SIMPLE';После того, как вы определили базы данных, вы можете изменить их режим восстановления с помощью оператора ALTER DATABASE с опцией RECOVERY. Например:
ALTER DATABASE SampleDB SET RECOVERY SIMPLE;После изменения режима восстановления вы также можете уменьшить размер журнального файла до подходящего размера с помощью команды DBCC SHRINKFILE(). Например, чтобы уменьшить размер журнального файла SampleDB до 5 МБ, вы можете выполнить:
DBCC SHRINKFILE('SampleDB_log', 5);Имейте в виду, что не всё пространство может быть возвращено, но эта команда поможет восстановить значительную часть используемого пространства.
Владение базами данных
При создании или восстановлении базы данных она по умолчанию принадлежит владельцу, выполнившему операцию. Однако рекомендуется убедиться, что базы данных не принадлежат владельцам, соответствующим реальным людям. Это связано с тем, что если человек, владеющий базой данных, больше не является администратором базы данных, но по-прежнему имеет возможность входа в систему, он может неявно выполнять любые действия в базе данных.
SQL Server автоматически сопоставляет владельца базы данных с пользователем dbo внутри базы данных, обходя все проверки безопасности. Чтобы предотвратить этот потенциальный риск безопасности, важно периодически проверять владение базами данных и переназначать его соответствующим образом.
Чтобы определить владение каждой базой данных, вы можете использовать следующий запрос:
SELECT NAME, SUSER_SNAME(owner_sid) [Owner] FROM sys.databases;После того, как вы определили базы данных, принадлежащие реальным людям, изменение владения – это простой процесс. В SQL Server 2005/2008 вы можете использовать команду ALTER AUTHORIZATION. Например, чтобы изменить владение базы данных SampleDB на sa, вы можете выполнить:
ALTER AUTHORIZATION ON DATABASE::SampleDB TO sa;После выполнения этой команды вы можете проверить изменение владения, повторно запустив запрос.
Понимание размеров журнальных файлов и владения базами данных является важным для поддержания оптимальной производительности и безопасности в средах SQL Server. Управляя размерами журнальных файлов и обеспечивая соответствующее владение базами данных, вы можете эффективно управлять ресурсами и уменьшить потенциальные риски безопасности.