1 – Eating SQL Server installations for breakfast -- End Script PRINT 'All Done...Add Server to DBA Repository for further documentation' Listing 1.2: The SQL Server automated configur
Trang 11 – Eating SQL Server installations for breakfast
+ 'Server Name:
' ISNULL (@serverName, 'No Server Given') + CHAR (13)
+ 'Login Name: '
+ ISNULL (@loginName, 'No LOGIN Given') + CHAR (13)
+ 'User Name: '
+ ISNULL (@username, 'No User Name Given') + CHAR (13)
+ 'DB Name: '
+ ISNULL (@databaseName, 'No Database Given') + CHAR (13)
+ 'Object Name: '
+ ISNULL (@objectName, 'No Object Given') + CHAR (13)
+ 'Object Type: '
+ ISNULL (@objectType, 'No Type Given') + CHAR (13)
+ ' -'; EXEC msdb sp_send_dbmail @profile_name='Admin Profile',
@recipients='<yourmail@yourmail.com>, @subject='DDL Alteration Trigger ', @body=@emailBody
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
ENABLE TRIGGER [AuditDatabaseDDL] ON ALL SERVER
GO
Change Model Database Recovery Option from Full to Simple This will prevent unmitigated log file growth
ALTER Database Model
SET RECOVERY SIMPLE
Turn configurations back off
sp_configure 'xp_cmdshell', 0
reconfigure
sp_configure 'Show Advanced Options', 0
Reconfigure
Trang 21 – Eating SQL Server installations for breakfast
End Script
PRINT 'All Done Add Server to DBA Repository for further documentation'
Listing 1.2: The SQL Server automated configuration script
Using the above script you will, in about 3 seconds, have configured many options that might have taken 30 minutes to do manually Without such a script it is very easy to miss an important configuration such as setting the model database to
"simple" recovery mode
This script is a mere sampling of what you can control and automate, prior to releasing the server into the wild As we proceed through the rest of the book, I will demonstrate many more scripts that can be used to make your life easier, freeing up more of your time to write or extend your own scripts and then give them back to me so I can use them Ha!
Bon Appétit
Just because your server installation is now complete, and is stepping out into the real world to be eaten alive by various applications, it is by no means out of your hands No, now you have the task of protecting it Every day The first step toward that goal is to make sure you monitor, maintain and document the server during the course of its life
Documenting will be the focus of Chapter 2, where I will introduce you to the DBA Repository, a tool that incorporates the combined reporting and data migration strengths of SQL Server Reporting Services and SQL Server Integration Services It is within the DBA Repository that you will truly come to know your servers
Trang 3C HAPTER 2: T HE SQL S ERVER
LANDSCAPE
I started my DBA career working for a small software development company, where I had a handful of SQL Servers to administer As in many small companies, the term "DBA" was interpreted rather loosely I was also, as required, a Windows server administrator, network engineer, developer, and technical support representative I divided my day equally between these tasks and only actually spent a fifth of my professional time managing the SQL infrastructure
When I moved on to a much larger organization, I found that my first days, as a DBA managing nearly 100 SQL Servers, were daunting, to the say the least I was astounded by the lack of documentation! Some fragmented efforts had been made
to pull together information about the SQL infrastructure, but it was sparse As a result, my first week found me manually and hastily clicking through server property windows, perusing SQL Server error logs, pouring over reams of stored procedure code, sifting through SQL Agent job failures on each server, and generally just floundering about picking up whatever tidbits of information I could
I recall feeling very tired that first weekend and, to add insult to injury, also as though I had accomplished very little With the wonderful benefit of hindsight that I have while writing this book, I can say that what I really needed in those early weeks was a "documentation tool" that would have allowed me to automate the collection of all of the essential information about every server under my control, and have it stored in a single, central location, for reporting
Over the course of this chapter, I'll describe how I built just such a documentation tool First, I'll describe the information that I felt I needed to have about each of the servers under my control and the scripts to retrieve this information for each server I'll then move on to discuss the various ways of automating this data collection process over all of your servers Finally, I'll demonstrate how I actually achieved it, using SSIS and a central DBA Repository database
NOTE
The material in this chapter describing how to build a DBA Repository using SSIS and SSRS is adapted with permission from my article "Use SSRS and SSIS to Create a DBA Repository," which originally appeared in SQL Server Magazine, February 2008, copyright Penton Media, Inc
Trang 42 – The SQL Server landscape
What information is required?
Before I could even begin to build a documentation tool for my SQL Servers, I had to answer one very important question: what information did I need to gather
in order to help me do my job better as a DBA? I am sure that many such lists have been compiled, by numerous DBAs My list encompasses the categories of information that I saw as pertinent, and was as follows:
• Server Information (Server name, SQL Server version, collation
information, and so on)
• Database Management (Primarily to monitor data and log file growth)
• Database Backups (Have backups run successfully? Which databases
are in Full recovery mode versus Simple or Bulk-Logged? Are we doing regular log backups of Full recovery databases?)
• Security (Who has access to do what?)
• SQL Agent Jobs (Which could include those that run your database
backups)
Over the following sections, I'll present a series of queries (I like that expression –
a series of queries) that I used to collect the required information in each category Server information
I needed to retrieve a number of useful pieces of server information for each of
my servers, such as:
• The server name
• The physical location of the server
• The SQL Server version, level and edition
• Security mode – Either Windows (Integrated) or Mixed mode
• SQL Server collation
Listing 2.1 shows the script I developed to return this information (at least most
of it) for a given server
SELECT CONVERT ( CHAR (100), SERVERPROPERTY ('Servername'))
AS Server ,
CONVERT ( CHAR (100), SERVERPROPERTY ('ProductVersion'))
AS ProductVersion, CONVERT ( CHAR (100), SERVERPROPERTY ('ProductLevel'))
AS ProductLevel,
CONVERT ( CHAR (100),
Trang 52 – The SQL Server landscape
CONVERT ( CHAR (100), SERVERPROPERTY ('ResourceVersion'))
AS ResourceVersion, CASE WHEN SERVERPROPERTY ('IsIntegratedSecurityOnly') = 1 THEN 'Integrated security'
WHEN SERVERPROPERTY ('IsIntegratedSecurityOnly') = 0 THEN 'Not Integrated security'
END AS IsIntegratedSecurityOnly,
CASE WHEN SERVERPROPERTY ('EngineEdition') = 1
THEN 'Personal Edition'
WHEN SERVERPROPERTY ('EngineEdition') = 2
THEN 'Standard Edition'
WHEN SERVERPROPERTY ('EngineEdition') = 3
THEN 'Enterprise Edition' WHEN SERVERPROPERTY ('EngineEdition') = 4
THEN 'Express Edition'
END AS EngineEdition,
CONVERT ( CHAR (100), SERVERPROPERTY ('InstanceName'))
AS InstanceName, CONVERT ( CHAR (100),
SERVERPROPERTY ('ComputerNamePhysicalNetBIOS'))
AS ComputerNamePhysicalNetBIOS, CONVERT ( CHAR (100), SERVERPROPERTY ('LicenseType'))
AS LicenseType, CONVERT ( CHAR (100), SERVERPROPERTY ('NumLicenses'))
AS NumLicenses, CONVERT ( CHAR (100), SERVERPROPERTY ('BuildClrVersion'))
AS BuildClrVersion, CONVERT ( CHAR (100), SERVERPROPERTY ('Collation'))
AS Collation,
CONVERT ( CHAR (100), SERVERPROPERTY ('CollationID'))
AS CollationID, CONVERT ( CHAR (100), SERVERPROPERTY ('ComparisonStyle'))
AS ComparisonStyle, CASE WHEN CONVERT ( CHAR (100),
SERVERPROPERTY ('EditionID')) 1253826760
THEN 'Desktop Edition'
WHEN SERVERPROPERTY ('EditionID') = -1592396055 THEN 'Express Edition'
WHEN SERVERPROPERTY ('EditionID') = -1534726760 THEN 'Standard Edition'
WHEN SERVERPROPERTY ('EditionID') = 1333529388 THEN 'Workgroup Edition'
WHEN SERVERPROPERTY ('EditionID') = 1804890536 THEN 'Enterprise Edition'
WHEN SERVERPROPERTY ('EditionID') = -323382091 THEN 'Personal Edition'
WHEN SERVERPROPERTY ('EditionID') = -2117995310 THEN 'Developer Edition'
WHEN SERVERPROPERTY ('EditionID') = 610778273 THEN 'Enterprise Evaluation Edition'
WHEN SERVERPROPERTY ('EditionID') = 1044790755 THEN 'Windows Embedded SQL'