Verifying Instant File Initialization
Ran into a few issues verifying instant file initialization. I was trying to ensure that file initialization was enabled, but found out that running the xp_cmd to execute whoami /priv could be inaccurate when I'm not running it from the account that has the privileges. This means that if my sql service account has different permissions than I do, I could get the incorrect reading on if it is enabled.
Paul Randal covers a second approach using the sysinternals tool Accesschk, which seems promising. However, in my case, I didn't have permissions to run in the environment was I was trying to check. I found a way to do this by rereading original article in which Paul Randal demonstrates the usage of trace flags 3004,3605. This provided a very simple way to quickly ensure I was getting the correct results back. For even more detail on this, I highly recommend his Logging, Recovery, and Transaction Log course. I adapted pieces of his script for my quick error check on this issue.
Successfully Verifying🔗
Successfully added instant file initialization should mean when you review the log you will not have any MDF showing up in the error log for zeroing. I adapted the sql script for reading the error log in a more filtered manner from this post: SQL Internals Useful Parameters for XP Reader (2014)
-- TURN ON TRACE FLAG FOR IDENTIFYING INITIALIZATION OF DATA FILE/LOG FILE | |
dbcc traceon (3605, 3004, -1); | |
go | |
-- CREATE DB TO ALLOW TRACE TO LOG ACTIVITY | |
create database [DropMe_IsFileInitializationEnabled] | |
go | |
--TURN OFF TRACE FLAG | |
dbcc traceoff (3605, 3004, -1); | |
go | |
declare @InstanceName nvarchar(4000) | |
,@LogType int | |
,@ArchiveID int | |
,@Filter1Text nvarchar(4000) | |
,@Filter2Text nvarchar(4000) | |
,@FirstEntry datetime | |
,@LastEntry datetime | |
select | |
@InstanceName = null -- Don't know :) | |
,@LogType = 1 -- 1 = ERRORLOG | |
,@ArchiveID = 0 -- File Extension 0 | |
,@Filter1Text = null -- First Text Filter | |
,@Filter2Text = null -- Second Text Filter | |
,@FirstEntry = dateadd(minute, -5, getdate()) -- Start Date | |
,@LastEntry = dateadd(minute, 5, getdate()) -- End Date | |
exec master.dbo.xp_readerrorlog @ArchiveID | |
,@LogType | |
,@Filter1Text | |
,@Filter2Text | |
,@FirstEntry | |
,@LastEntry | |
,N'asc' | |
,@InstanceName | |
go | |
if exists ( | |
select | |
* | |
from | |
sys.databases as d | |
where | |
name = '[DropMe_IsFileInitializationEnabled]' | |
) | |
begin | |
drop database [DropMe_IsFileInitializationEnabled] | |
end |