Wednesday, January 5, 2022

Sample Databases for learning SQL Server

You've installed SQL Server. You've installed Management Studio (and presumably Azure Data Studio) and now you're ready to learn SQL! 

But to learn about databases you're going to need some, well databases and whilst creating your own from scratch is a great exercise eventually you'll need something with some data to play around with!

Fortunately Microsoft provide a couple of sample databases you can download and use; namely AdventureWorks which was released way back in SQL Server 2005 and the newer WideWorldImporters (SQL Server 2016) and for both we can download backups of the databases directly from the samples page or use the GitHub SQL Server samples repository. 

AdventureWorks Sample Database

AdventureWorks has a couple of different flavours to choose from; OLTP (Online Transaction Processing) which is the "normal" database shall we say. DW for Data Warehousing workloads which has various Dimension and Fact tables and LT which is a lightweight version of the OLTP database (22Mb for the light version compared to 264Mb). Unless you're specifically learning about Data Warehousing (or your really, really short on disk space) then the OLTP version of the database is the best place to start. 

You can also download the database for previous versions of SQL Server going back to 2008 R2 although the lightweight version isn't available that far back. If you're not sure what version you're on then running the T-SQL statement SELECT @@VERSION will return that information for you.

Under Restore to SQL Server the samples page contains instructions of how to restore your downloaded sample database via the UI in Management Studio, via a T-SQL command or by using Azure Data Studio. There's also instructions on how to deploy the AdventureWorks sample database to Azure SQL Database.

WideWorldImporters Sample Database

Similarly to AdventureWorks the WideWorldImporters sample databases comes in an OLTP and Data Warehouse (OLAP) version with the exception of the lightweight version. There are also bacpac downloads available for use in the Standard and Premium tiers of Azure SQL Database.

For restoring the database the big difference is that WideWorldImporters is only available for SQL Server versions from 2016 (and above) so you won't be able to restore to older versions. It's also bigger too and takes up roughly 3.5Gb of disk space compared to AdventureWorks (OLTP) 264Mb. If you want to try restoring WideWorldImporters to an Azure SQL Managed Instance you can follow this link.

Which one should I use?

In short, both. There's a lot of content out there for learning SQL Server and you'll often find tutorials using one or the other sample database and although WideWorldImporters is newer most content in my experience are using the AdventureWorks database.

What about something a bit meatier?

Although they're great sample databases to use for learning I often see posts looking for more larger databases which are a bit more "real-world" (mainly because databases tend to be much bigger in real life). AdventureWorks does have a slightly larger version available (direct link to backup file) for SQL Server 2016 or above and there are scripts out there to create newer and larger tables too such as this one from Jonathan Kehayias at SQLSkills.

But it's still a sample database and for something much more realistic Stack Overflow regularly export their data and thankfully Brent Ozar has made that data available in SQL Server format and you can download 10Gb, 50Gb or 180Gb sized databases from here (you'll need a BitTorrent client for the larger sized database).

Tuesday, January 4, 2022

That time I deleted a really important table


Brent Ozar recently linked to a previous article entitled, The First Time I Had to Restore a Database and as a completely original content writer I figured I'd share my story when I did exactly the same thing.

When I first started out working with SQL Server I was a sort of BI Developer, well sort of. We looked after a fairly critical database with a table called SuperImportantStuff or something.

One sunny day we received a request to remove some invalid data from said table, it was two rows that had entered the system incorrectly and had a specific column value that the delete statement could use without breaking anything. Well, not in the hands of a very inexperienced and trigger happy BI Developer anyway. The query was super simple, DELETE * FROM SuperImportantStuff WHERE SuperImportantColumn = 666 - or something like that and I checked the rows first before highlighting the statement and running the delete bit.

Only crucially I kind of missed the WHERE bit off, hit execute and up came the message telling me that 40 gazillion rows had been affected, well maybe not that many but it was definitely more than the expected 2 records. I did what every good database professional should do in this situation and panicked rather loudly before letting my manager know, who after a while conducting various checks concluded that I had indeed nuked the one of the most important tables for the entire business.

I should add that missing the WHERE clause features in Brents post too so I'm in good company.

The remainder of that day was spent learning the hard way how to restore databases from full and differential backups as well as performing point in time restores and perhaps the most important lesson (once or twice) of how to very carefully run delete statements. 

Once the database was fully restored for the thirtieth time I was informed that the database was used for reporting purposes and actually got re-populated twice a day via a SQL Agent job that completely wiped the tables before the data was reloaded. It was just too good an opportunity to teach me a lesson in database restores and to let me sweat on it for a while.

Without a doubt I understood how lucky I was, in two ways. It could have been a very different database or what if the database wasn't even backed up (surely that can't happen...right?!) but also I was very lucky to have a boss who took the time out of their day to use the opportunity to teach me something. I know it could have been very different story.

2021-2022

Pandemic aside 2021 turned out to be a very difficult year for me for a variety of reasons. Midway through the year I had a unexpected lengthy period of downtime where I was unable to work and for quite a while it looked like at the very least the remainder of the year was going to be a total write-off. Fortunately with the support of lots of different people I was able to recover and I got back to things sooner than expected.

One noticeable thing is that my community involvement over the last year was severely lacking. I can count on two hands the number of virtual events that I attended in 2021 and one of those I was fortunate to be speaking at. I also blogged very little but I did manage to put together a two part post titled the 150ft String which is something that I have wanted to write about for a long time. I received some lovely feedback and I just wanted to say a big thank you to those who took the time to have a read - massively appreciated!

I'm seeing the new year as an opportunity to restart, or perhaps reconnect is a better way of putting it. In many ways I feel like I've completely detached myself from many activities that I used to really enjoy and have certainly missed (though perhaps I didn't realise how much). Whilst I haven't set any specific goals I am looking forward to writing about "technical stuff" again but more importantly simply interacting within the community as much as I can is what I am looking forward to the most.

Public speaking is something that I hope to get back to at some point in the future but right now isn't something I am actively planning on. I've only done one session at a handful of events since I started back in 2019 and I am beginning to work on some new ideas. I try to put as much humour into sessions as I can possibly get away with which I fully understand isn't everyone's cup of tea, but I love the idea of getting a bit of a laugh along with the brain draining stuff and I expect that trend will be continuing! Admittedly there's a couple of obstacles I need to tackle first to have a serious go at it again, but fingers crossed.

Work wise I am not going to dwell on too much in this post. Last year though did mark the five year anniversary of my decision to work for myself. I intend to write a bit more about my experiences in some forthcoming posts so there's that to look forward to!

The final word though goes to the community. The past year has been challenging, not least because of pandemic but it's fair to say there's been some other things going on too. Despite everything the community remains vibrant; I've seen new bloggers, vloggers, speakers and events too go from strength to strength and continue to be supported by truly amazing people. 

So whatever you're doing I wish you (however you wish to define it) all the success in the world for 2022! Stay safe, stay well and all the best :-)

Thursday, December 16, 2021

Copying SQL Logins Between Instances

Migrating SQL databases is fun, depending on your definition of fun that is. The process can involve having to move things such as login details that have been around for that long that nobody has a clue what they are anymore.

With domain accounts that's pretty straightforward, the passwords are managed in Active Directory and not held in SQL Server and it's just a case of recreating the account on the new instance.

SQL authentication is different and migrating an account as is means you also have to recreate the password as is which could be difficult if you didn't know what the password should be. It's worth saying at this point that the preference should always be to use domain accounts, they're more secure and much more manageable and migrations are ideal opportunities to refactor things to be better but for the sake of this article let's proceed with the scenario of recreating a SQL authentication login with an unknown password, and we'll need to get creative.

Now when I say creative what I mean to say is look at the official documentation! Here's a link from Microsoft that tells us how to move logins from one instance to another. The link contains code to create two stored procedures sp_hexadecimal which is a password hashing algorithm and sp_help_revlogin which uses sp_hexadecimal and generate scripts to recreate our logins and passwords. I've ran the code on my test instance and now to test I'll create the following SQL login:

CREATE LOGIN TestLogin WITH PASSWORD = 'ThatsAReallyGreatPa$$Word!'

To generate the create login scripts all I need to do is execute sp_help_revlogin to run a script containing create commands for every login (domain and SQL) on my instance and right at the bottom of the script I can find the login I've just created:

-- Login: TestLogin

IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = N'TestLogin')

BEGIN

CREATE LOGIN [TestLogin] WITH PASSWORD = 0x020014E5221D2BDC53D7B9F629237230B4B3AFCA88DF1E6733391626C0B267D5D2544CEA7B9BC720087076B8DF2A564622960F870C90085B84C0D2FB08875F225B67874E24C7 HASHED, SID = 0x34CA86032AA9634388A89BCD72A65E21, DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english], CHECK_POLICY = ON, CHECK_EXPIRATION = OFF

END

Now all I have to do is run the code above on a different instance of SQL Server to recreate the login with exactly the same password as the existing one.

That's pretty neat, but it would be far neater if I didn't have to go around creating new system stored procedures, trawl through what could be a huge amount of logins to find the right one(s) and do the whole thing in one line of code, enter the dbatools PowerShell module and Copy-DbaLogin.

In PowerShell I can simply run code, just like the following to copy a SQL login to another instance of SQL Server and I can login using the existing password without it being exposed to me, so it's still an unknown but it's recoverable:

Copy-DbaLogin -Login TestLogin -Source localhost -Destination localhost\MSSQLSERVER01 

Now with great Power(Shell) comes great flexibility (yes I came up with that all by myself) and this is one of the real strengths of using dbatools. Instead of one login I can specify multiple ones:

Copy-DbaLogin -Login TestLogin, AnotherTestLogin -Source localhost -Destination localhost\MSSQLSERVER01 

Or if I just want to copy every single login (Windows and SQL) from one instance to another I can just leave the login parameter entirely:

Copy-DbaLogin -Source localhost -Destination localhost\MSSQLSERVER01 

If any logins exist on the destination instance already they get skipped over but I can also use -force which forces the drop and recreation of any logins on the destination:

Copy-DbaLogin -Login TestLogin -Source localhost -Destination localhost\MSSQLSERVER01 -force

Finally, if I don't want to copy any logins but create a file with the login create scripts I can do that as well:

Copy-DbaLogin -Login TestLogin -Source localhost -OutFile c:\migrate\logins.txt

Which outputs a text file containing the following:

USE master

GO

IF NOT EXISTS (SELECT loginname FROM master.dbo.syslogins WHERE name = 'TestLogin') CREATE LOGIN [TestLogin] WITH PASSWORD = 0x020014E5221D2BDC53D7B9F629237230B4B3AFCA88DF1E6733391626C0B267D5D2544CEA7B9BC720087076B8DF2A564622960F870C90085B84C0D2FB08875F225B67874E24C7 HASHED, SID = 0x34CA86032AA9634388A89BCD72A65E21, DEFAULT_DATABASE = [master], CHECK_POLICY = ON, CHECK_EXPIRATION = OFF, DEFAULT_LANGUAGE = [us_english]

GO

So there's two ways to move logins from one instance of SQL to another that will also recreate the logins with the current passwords. 

Monday, December 13, 2021

Restoring SQL Server Databases With Standby

Here's a scenario. A user has made several modifications to a database and now needs to restore the database back to a particular point. The problem is that they don't know the particular time to restore back to, just that they need the database back to before a particular change was made.

If the database is in simple recovery then there's no options to play with, the database can only go back to the last available full backup (and maybe differential backup if they've been taken). If the database is using full recovery (I'm skipping over BULK-LOGGED for this post) then we can then apply the transaction log backups taken after the full backup to get back to a point in time by restoring the database with NORECOVERY and then restoring the necessary log backup files until we reach a particular point either by using .

But one of the disadvantages of NORECOVERY is that it doesn't give us a readable database until we restore with RECOVERY and at that point we can't restore further log backups to our database so if we have missed anything we'd need to start the whole restore process from the beginning.

Thankfully SQL Server gives us an option to restore databases and log files and enable us to read the database between restores using the STANDBY option.

Standby maintains the ability to restore additional transaction logs or differential backups similar to NORECOVERY but also puts the database into read-only mode enabling us to view our database content. This means after each restore we can look into the database, check for our changes and if necessary apply another transaction log restore and when we're happy we can then restore the database with recovery.

Here's a very simple example where I'll restore a full backup of my imaginatively titled Test Database to an even more imaginatively named database called TestCopy. The magic as it were is all in the STANDBY clause highlighted below.

RESTORE DATABASE TestCopy FROM DISK = N'C:\Backup\Test_Full_1312.bak' 
WITH MOVE 'Test' TO 'C:\Data\TestCopy.mdf',
MOVE 'Test_Log' TO 'C:\Logs\TestCopy.ldf',
STANDBY = 'C:\Backup\Test_Standby_1312.bak'

Here's what BOL has to say about the STANDBY file we've just specified in our command:

"The standby file is used to keep a "copy-on-write" pre-image for pages modified during the undo pass of a RESTORE WITH STANDBY. The standby file allows a database to be brought up for read-only access between transaction log restores and can be used with either warm standby server situations or special recovery situations in which it is useful to inspect the database between log restores."

Now the database has restored an in SSMS and the database the name has (Standby / Read-Only) next to it which means I can jump right in and query data (updates aren't allowed though) but in addition if I want to restore the next log file I can without having to go back and start again with the full backup.

RESTORE LOG TestCopy FROM DISK = N'C:\Backup\Test_Log_1312_0700.trn' WITH 
STANDBY = 'C:\Backup\Test_Standby_1312.bak'

After the log restore I can check the database content again and if I'm happy I can restore the database with recovery (RESTORE DATABASE TestCopy WITH RECOVERY) to bring it fully online or if further log backups are needed to be restored I can keep using STANDBY like in the example above until my I'm happy the database can be recovered fully. Worth mentioning that the standby file is removed when the database is fully recovered.

Standby is a great feature of SQL Server database restores and if you're thinking that's great but how do I do it in PowerShell because that's what all the cools kids are using these days then you're in luck as Stuart Moore has a great guide to restoring databases including with standby using DBA Tools here!

Monday, November 15, 2021

The 150ft String - Part 2

My last post was written about one of my favourite memories when I plunged off a 150ft platform holding a bit of string for dear life.

The story was always going to have a follow-up because all of those feelings I had that day were something I became very familiar with on a frequent basis and not because I took up jumping off things as a hobby but rather that anxiety became an unwanted fixture in my life. At one point it had got so bad that the same fear, dread and all the physical symptoms I felt that day at the top of the platform were exactly the same feelings I had just trying to get out of bed in a morning.

I don't remember when it first started but I certainly recall when it came to a head. I was out shopping, on the downwards escalator (how fitting) of a department store when from nowhere I lost the ability to breathe. As I came to learn from a doctor much later it was my first ever panic attack.

As time went on things got worse. Most days started with headaches, dizziness, nausea and a heart rate akin to that when I completed my powerfan experience. I was signed off work, initially for a week to "recharge my batteries" but that week became 2 and then another and all during that time I began to completely close off from everyone. I was scared, I didn't know what happening and took solace in being alone.

Eventually the doctors refused my pleading for more time off. My job at the time had been extremely difficult and I had also wanted out for some time, I just didn't have the confidence to even try to get out though. In a strange way I had a uncomfortable comfort blanket wrapped around me and in the end I stayed way longer than I should have done, and I admit that when I did leave it didn't end well for anyone. 

But leave I did. The previous job wasn't good for me and I took a new position and for a while things were better, or so I thought. I don't know if the change of scenery had masked things but it wasn't long before I started to get ill again. Not long after starting we had a family holiday booked in Belgium, one night my wife and I were having a glass of wine when out of nowhere it all poured out. It was the first time I had truly opened up towards my health; there were tears, confusion, all sorts of different emotions - but it was the start of getting it out in the open.

I'd love to say the next day started with a beautiful sunrise but it was actually the loudest thunderstorm I've ever heard but I swear I felt different. I felt honest and crucially I didn't feel alone. When I returned to work I spoke to my manager and the head of department. I was petrified that they'd think they had wasted their time but they listened. They didn't tell me to snap out of it or tell me work had been slipping and that we were in danger of deadlines being missed due to me being off. They told me that work was fine, everything was being looked after and whatever I needed from them they would do it. I believed them and was right to do so.

Previously doctors had reached straight for the prescription book, I'd never had a specific diagnosis but rather had been giving an array of tablets to tackle all the symptoms I'd been having or it was put down to stress. I went back and spoke to a new doctor. He listened to me for a long time, and told me he wanted me to speak to a counselor and if I wanted to try some other medication I could. I did take him up on the offer but it didn't last, it just never worked with me but that isn't to say it doesn't help. Through my journey I've spoken to many people where it has helped them massively.

My first session was terrible and I came home in tears. I had told work beforehand I'd needed an hour or two away and they told me to take the day off. I still rang in and my manager (ma'am) told me how everything was fine and to relax, talk to my family and stop thinking about databases for a little while. The next day I was tentative going back but had a short meeting to discuss where I was and what I was doing next, again with their full support.

Then a diagnosis came from the doctor and counsellor. Generalised Anxiety Disorder. It was very common, it causes a whole array of symptoms and is often not even diagnosed properly. Knowing what "it" was also meant I could open up and tell other close family and friends what was really happening because until now they were blissfully unaware, and I'd got very good about putting a mask on things.

I also had to confront a personal fear, I needed to tell my Dad how things were. This was a moment I was really worried about. My dad was old school, ex-military, former rugby player and in my eyes the toughest thing on the planet. I expected a rollicking more than anything else but I was badly wrong. He told me the mind is a precious thing and I needed to look after it and that he was there whenever I needed it. I still shed a tear whenever I think of that moment, miss you Dad X.

I began to stop trivialising my problem. For a long time I labelled it as stress, something that everyone has from time to time and I had no right to be struggling with it. I had felt weak. I had felt immense guilt and shame for not being strong enough to cope. I was scared of burdening those around me and that fear had prevented me from reaching out to those close to me for way too long. Now I had broken that cycle.

Two important words for me are awareness and acceptance. It took me a long time to become aware of my anxiety and even longer for that awareness to be shared with those close to me. Accepting that I was not OK and that it's perfectly normal to not be was also a big turning point. Once I truly arrived with a sense of both I felt I could move forward.

Sometimes you have to stand up to something and fight it toe to toe. I've done that many times by refusing to let my anxiety stop me from doing something I want or need to do. Just like the powerfan when my mind was telling me I couldn't do it and every part of my body was frozen I've still been able to push through. Sometimes, just like that day I have asked for a gentle push over the ledge when I've needed help.

But I've also learnt it isn't just about fighting. A lot of the time taking up the fight is just too draining, even thinking about it can be. It's those times where simply coping is what we really need to do. At times I've found this difficult, I've wanted to keep going on when the reality is I've needed to stop, switch things off and take a break; sometimes for an hour, sometimes for much longer. I try to be much more aware of this but it's not easy, life throws plenty of curveballs at us and we can't spot every single one. That's fine, getting things wrong is often more of a case of discovering something that doesn't work for us at that moment, that is not a bad thing.

I said there would be a happy ending and there certainly is. I'm still here. It might not sound a lot but to me it's huge and something I think about often. I have a lot of gratitude, I'm deeply thankful for all the support that has been there from family, friends, colleagues and at times total strangers.

I'm sharing my experience to let anyone who needs to know that you're not alone. You are strong. You're showing the most incredible strength, bravery and courage living and facing something day after day and that is OK and you're going to get through this. It takes help, it takes reaching out and I can assure anyone it's not a burden. People help, that's what we do.

Thank you for reading, I appreciate it's a bit of long read but if you'd like to ask me any further questions then please reach out, my personal email address is david.alcock1@googlemail.com and I will answer.

Friday, November 12, 2021

The 150ft string

Hastily written, apologies but it's a good story nonetheless.

I'm petrified of heights. I get dizzy on the second step of a ladder, get jelly legs on bridges and don't even mention plane take-offs! So I'm as surprised as anyone to be blogging about me standing on a 150ft platform about to walk off holding, no clinging, onto a piece of string for dear life.

The story actually starts with Jack Osbourne and his Adrenaline Junkie TV show. My wife and I were watching it one evening and after one particular crazy stunt I happened to mention the words "I wish I could do that".

In time I learnt there's a huge difference in what I say and what someone understood and on Christmas morning that year I opened a surprise present, the triple whammy at Magna. The triple whammy involves a zipline, a 150ft abseil and to top of the day a walk off a 150ft platform holding a rope, plummeting to the ground until a powerfan slows the descent to a stop. To be clear, I did not WISH I could have the opportunity to do that, I just wished that I had whatever it took to enjoy these sort of things - turns out with wishes you have to be very precise!!

It only took me 7 months to book it. I'd put it away hoping it would be forgotten but no, the reminders came weekly, daily, then hourly until I finally gave in and booked the experience for September. 

It's amazing how time flies when you're really not looking forward to something but here we were at Magna on a lovely September morning. I'd been awake since 3AM. I felt sick, I was absolutely petrified and would have given anything to do a runner, but I couldn't, here we go!

There were three of us there for the experience, we had the safety briefing and proceeded to experience number one, the zip line. I'd love to say I charged in to be first but no, when it came to volunteering to who goes first I hid well behind the others. The zipline wasn't that bad to be honest, I was strapped in and don't remember a lot of it apart from spinning around a lot.

Next the abseil. This was the first part where I had climb up to the platform used by abseilers, powerfanners and bungee jumpers (which thankfully I wasn't doing). I remember climbing flight after flight of metal steps which was really difficult when you're shaking like a leaf. I got to what I thought was the platform but was greeted by a sign saying "YOU'RE HALFWAY THERE". What made matter worse for me was a person being brought down from the platform, they couldn't go any further and were being accompanied back. I froze, seriously, I couldn't move at all.

I wish I had some advice of how I decided to go further but I have no idea. There was no moment of inspiration or injection of courage I just sort of thought I had no choice really, my wife and 2 kids were here supporting me and I wouldn't have heard the end of it had I done a runner!! Arriving at the top platform I did what everyone tells you not to, I looked down. I think it was only because I had an empty stomach that prevented me from throwing up over the side. I couldn't make out anyone on the ground, I was dizzy and could only hear the rather horrific screams of people jumping off - who for some bizarre reason were having the time of their lives.

The abseil person spotted me and called me over. They hooked up the ropes and told me the descent would be very slow and controlled. They told me nothing can go wrong and just enjoy it. Enjoy it? Pfft. As I was being lowered off the platform I lost control of my vocal chords (at least it wasn't my bowels), I was almost crying as I was suspended in mid air, with a lot of nothing but air underneath me making a rather audible whimper.

I reckon it took at least four hours to get down, that's how it felt anyway. I adopted a similar motion to rapidly milking a cow to literally inch down the rope tiny bit by tiny bit. I eventually got to the ground and was greeted by some staff asking me if I enjoyed it, no was the honest response. I didn't enjoy it one bit, hated it, there was no rush of excitement, I just wanted to be sick.

After the abseil I bumped into one of my group of three. They'd had to do the abseil in tandem with one of the helpers, they weren't doing the powerfan, they'd enough! Can't say I blamed them at all! The powerfan involved the same walk up to the platform, it wasn't any easier or any faster and if anything it seemed way higher than last time.

The powerfan platform was shared with the bungee jumpers. I walked over trying my best not to look down, I still did. Funnily enough my vision had now resembled a bungee, the ground sort of moving up and down, perhaps it was the nausea. Anyway, I got rigged up in my safety gear. The instructor spent an age telling me what was the plan, basically he was going to open a gate, I was going to hold on to a piece of a string and simply walk off making sure I look forwards at all times because if I look down I'll spin a little.

Just before we were opening the gate a call came over the radio, a bungee jumper had to go before me so I had the luxury of trying to remain calm for a few extra minutes. I watched the bungee jumper shaking my head. By now all my nerves had gone, I was shaking but I couldn't feel it, I was sweating and my stomach hurt really bad. It was time.

The gate was open, on the count of three I was to walk. 1...2...3...GOOOOOOOOOOOO

I was stood there. Slightly hunched over and bent at the knees, frozen. I told the instructor I couldn't do it. Every part of my body wouldn't move. I'm so sorry I said, I literally can't move. The instructor reminded me to breathe (fair point) and told me how I'd got this far and if I didn't do it I'd seriously regret it. Despite me thinking quite the contrary he said he'd been there himself and seen it many times.

I asked him for a favour. If he got to 3 on the next count could he push me off. I said if he gets to 3 and I haven't moved I won't do it and I'm happy for a nudge. He laughed, said sure and told me to get ready.

1....

That's all I heard and I went.

Seriously, I don't know how but I did it. I also have no idea what sound came out of me at that very point. It wasn't a roar of triumph, a scream of excitement or anything particularly inspiring. It was more like a very loud retch than anything else but hey, I don't think many people noticed.

I can't remember much else, I could hear the powerfan on the short journey down, I also ignored all instructions and looked down at the floor rapidly heading towards me and when I reached the bottom was almost horizontal. The instructors came over and I was buzzing. Seriously, it's the first time I'd experienced an adrealine rush. It was amazing but also knowing that I never had to do that again was very much at the front of my thoughts.

So that was it. I got a t-shirt and I'd love to say it cured my fear of heights but the week after at Alton Towers I was still limited to the Cyril the Squirrel ride and more than happy with that. I still don't do ladders. I conquered something however briefly and lived to tell tale but I think more than anything else I learnt to make sure people understand what I mean at all times!

There is a second part to this story, it's different and goes into a difficult time in my life but equally I hope can raise awareness and offers a bit of support and encouragement, you can read it here.

Breaking up with SQL Server

I was inspired to write this after reading a post from Dave Mason regarding breaking up with Big Tech companies. Yet again I haven't wr...