T-SQL Tool House

An Introduction, by Bill Wunder


Right from the start, we could all agree there is more than one way to solve any software problem. Designing, developing, architecting, or supporting databases are not exceptions. There are lotís of good database products and several possible operating environments to choose from when beginning to solve the problem of where do I put my data. There are a variety of application development models and programming languages available to help solve the problem of how do I store and access my data. And there even countless folks knocking on the door to choose from in resolving the huge and seemingly relentless question of who should help me with my data endeavors. Always it make sense to look around and see what you already have, and give a good look toward building upon what you find before you begin a course of building anew from the ground up. The economy of any particular choice will ultimately distinguish a good solution from a not so good one. And usually, the economy of reuse of what already exists offers an obvious advantage.


I - and I assume the vast majority of you incredibly intelligent and good looking sswug members - fall into the category of people someone chose to help with their data endeavors. Still, even if a relatively late comer, it behooves me as a DBA to take stock of what already exists as I endeavor to solve the problems that an organization or client has entrusted to me. In my case itís a safe bet that weíre already running Microsoft SQL Server (else why am I here).  Itís also better than even money that some of the work Iíve done in the past will prove useful on the SQL Server at hand. I can pull out my scripts, create a few stored procedures on a server and away we go. Off solving problems faster than an army of well meaning developers can create them. The first question I need to answer is where should I create those few stored procedures and any allied data I need to collect to effectively fulfill my role as DBA?


Keeping with the always good practice of building upon existing elements I always want to look around to see any existing possibilities. My T-SQL tools tend to be self contained stored procedures that create any table they might need in the local database if it doesnít already exist. The data I collect tends to be cumulative historical stuff useful to show trends and plan for growth. Not particularly useful for me to centralize this data on an administrative server somewhere because of the maintenance overhead and security concerns related to making sure the involved SQL Servers can talk amongst themselves, so I eliminate that possibility early on as a matter of course for most things I do.


I know I need to find a place to house my tool kit locally on a given SQL Server. I could throw the stored procedures my scripts will create into the master database or I could try to select a user database or I could even try to keep my scripts in files somewhere and never create enduring elements in any database. I need to ask myself if any of these approaches is particularly more economical than another. If I put anything in master then I loose the ability to easily restore my objects, I may also have to extend permissions in master and worst of all I need to create tables and add data and thereby introduce growth and fragmentation in master. I prefer master to be dedicated to the autonomic aspects of the SQL Server. As with a centralized administrative SQL Server, I have yet to experience an environment where it made any particular sense to use master for anything that SQL Server did not put there.


If I put my Ďobjectsí into an existing user database I need to be fully aware that everything I create becomes the property of any developer that has ĎCreate Objectí access to that database. Not necessarily a good thing to have 6 months of sysperfinfo history truncated on the heavily used development box when someone gets in the spring cleaning mood or to have the new person throw in a call to the block monitoring utility with some strategically placed 1 minutes WAITFOR DELAYís in it in the stored procedure that the login page calls each time a user connects to the intranet. Regardless of any illusion of safety in using an existing database I want to practice good database fundamentals and isolate heterogeneous data when possible. So mixing my DBA tools into a user database is risky and I decide this is no place I want to leave any of my toys.


If I try to manage my scripts on the file system I quickly discover that my network share doesnít do me much good on the CITRIX server or that my laptop doesnít do me much good when it has boot up troubles or that I forgot to save that last little tweak I made and donít have a clue what I did or that the hard drive failed and there is no backup. Donít get me wrong, saving scripts to a file system for everything you do is a good thing. How else would anything make it to the source control repository? But using the file system as the sole repository for your work, your livelihood, is something I would hope no good database professional practices. Thatís what databases are for!


Time and again, Iíve found the best solution to this problem is to create a database dedicate to my efforts. I donít have to install a SQL Server or a new instance. I donít have to modify any permissions. The database doesnít get large. I can backup the database with my routine backups. I can restore it with no impact to the SQL Server or the application. There is generally no question as to the purpose of the database I use to house my DBA T-SQL toolkit: the admin database.


Iíve been working on building my T-SQL Tool House for quite a while now. Obviously it will remain a work in progress. Starting in 1995 I began learning about web pages and posted some of my tools and scripts to a public internet access server at the University of Denver that was Ė and still is - run much like a public TV or radio station: Nyx Net. I called my little virtual directory ?billís vast expanse. I quickly used up my allotment of 500KB and was glad to see them expand the disk quota to 2MB where it currently stands. I actually use just a touch more than the quota, but so far I get away with it. It worked out well that just at the time I needed more space along came that rowdy upstart Stephen Wynkoop and his merry band with www.swynk.com. I put a bit of stuff on swynk.com over a period of time. Then, about when Stephen began to be less a part of swynk.com I got the cable modem and a nice sized chunk of cyber hinterland where I put up some more tools at a URL currently named home.attbi.com/~bwunder including my DDL Archive Utility that has proven quite popular. Especially after Andy, Brian, and Steve put it up on the freeware section of www.sqlservercentral.com. Later, I got a chance to see my name in the credits along with the marquee stars like Stephen and that awesome red headed goddess Sharon Dooley and all the other brilliant minds contributing to www.sswug.org


While writing sswug columns I discussed some of the tools I keep in the admin database. Probably never saying much directly about how to build a better application, rather to simply describe ways I try to be a more effective Microsoft SQL Server DBA. I provided many descriptions and working examples of T-SQL, DTS, VB and what ever else has helped me keep my SQL Servers running. Hope you find them useful and interesting. Certainly Iíd like to hear you comments (especially if you have a better way to solve a problem) and questions.


As do all good things, my time with sswug eventually came to a close. And att@home sold out to comcast. I kept the web pages up on the comcast web server until I finally moved away from Denver. Then after several months I got that content posted back on nyx.net which had by 2006 expanded the allotment of web space to 20MB. Everything about web sites falls into that interative process that is about all software. It is interesting sometimes to sit back and look at all the changes.


I might even have to figure out this blog business if thereís enough dialog and it doesnít prove to be too high on the technology bar for me. I think I'll resist as long as I possibly can.