Replacing a Meraki Switch

My Meraki rep gave me an offer I couldn’t refuse to replace my Meraki MS220-8P with a new MS120-8LP. One of the things I love about Meraki is the ease of configuring hardware before it even arrives. When Meraki Hardware ships you get an email with an Order number that when you import it in your console the hardware and the licenses will be imported. Then you configure the hardware so when it arrives and you plug it in it will phone home and download the config along with the prescribed firmware version.

And it’s easy as that.


Tracking down Failed Login Attempts in Active Directory

I had a recent experience with a client where a user account was getting locked out but the but the logs on the domain controller weren’t very helpful. Basically besides telling us the account was locked out they did nothing, no location, nothing.

After quite a bit of research on google I found this blog post . While Jack didn’t have the same issue his solution was exactly what I needed which was to turn on verbose logging of Netlogon,

From a command prompt run the following command nltest /dbflag:0x2080ffff

Review the log file generated at %windir%\debug\netlogon.log

When you are finished run the following command to disable verbose logging nltest /dbflag:0x0

More info can be found at this Microsoft Support Article

The verbose logging led me to the exact reason of the the lockouts. Which turned out to be a computer the user had forgot they had logged into.

Who do you use for upstream DNS?

There are so many good options for upstream DNS other than your internet provider I figured I would ask everyone, please post a comment below. Here are some of my favorites but its by no means an inclusive list. Wikipedia has a longer list here Public Recursive Name Server . My current favorite is followed by Google and OpenDNS and Quad9 I don’t actually use but its not a bad choice for home users.

There is by Cloudflare


No Filtering

IPv4: and

IPv6: 2606:4700:4700::1111 and 2606:4700:4700::1001

Google Public DNS by Google

No Filtering

IPv4: and

IPv6: 2001:4860:4860::8888 and 2001:4860:4860::8844

OpenDNS by Cisco

Filters Basic Security filtering + user defined policies

IPv4: and

IPv6: 2620:0:ccc::2 and 2620:0:ccd::2



Filers Malicious domains (phishing, malware, exploit kit domains)

IPv4: and

IPv6: 2620:fe::fe and 2620:fe::9

SQL 2016 Won't Send Mail

I’ve come across this problem a few times and always end up googling it so I figured I would make a post for my own benefit and also to help anyone else running into the issue.

Basically the RTM version of SQL Server 2016 has a bug in it where it doesn't reference the correct .NET version.

You can fix the issue by doing one of these work arounds.

1) Create a DatabaseMail.exe.config file and place it with DatabaseMail.exe under the Binn folder. The easiest way is to use Notepad and then to choose UTF-8 encoding when Saving the file.

         <?xml version="1.0" encoding="utf-8" ?>


         <startup useLegacyV2RuntimeActivationPolicy="true"> 

         <supportedRuntime version="v4.0"/>     

         <supportedRuntime version="v2.0.50727"/>



2) Run setup repair of SQL Server 2016. I don’t recommend this option.

3) Install .Net Framework 3.5.

4) Update SQL 2016 to SP1 and the Latest CU.

See this Microsoft KB for more details.

SQL DB Execute to a Role

Have you ever needed a less privileged user to execute Stored Procedures? Me too. Here is how you do it.

Run this against the database

-- Create a db_executor role
CREATE ROLE db_executor

-- Grant execute rights to the new role
GRANT EXECUTE TO db_executor

Then add the db_executor role to the users you want to be able to execute Stored Procedures.

Now you do need to be careful. You can be giving more rights than you want to do depending on what your procedures do but this still can be a good way to get that execute permission added.

iSCSI and SQL Corruption

I’m a heavy user of iSCSI and frequently advocate its use. For me its been reliable and has saved money. However Steve and I have over the last year worked with to clients where the use of iSCSI has caused an interesting corruption situation.

The first was a database corruption repair engagement where the database was actually corrupt but as we worked to repair the database we kept noticing new corruption in places where it hadn’t been. Quickly the engagement changed to helping the customer find the cause. We narrowed down on the storage. In this case the client has Dell Equallogic, Dell Switches, Dell Servers and VMware. It turned out that there was both a bad twinax cable AND really old firmware on the iSCSI switch. The combination of these was causing the problem. As soon as the firmware as updated and the cable replaced the issue stopped getting worse and we were able to fix the corruption.

The second instance was with Hyper V, Dell Equallogic and Dell Switches. The customer reported corruption in their database. In this case the database was significantly smaller and it only took a few minutes to run DBCC CheckDB instead of hours. We noticed that each time we ran CheckDB the database was corrupt but in a different way. Migrating the VM to a different server fixed the problem and no corruption repair was needed because the data on disk wasn’t actually corrupt so once iSCSI was fixed CheckDB came back clean.

However I noticed the switch firmware was also old in this case as well. A third client of ours has Dell Equallogic storage and the same SAN switches as customer two but has never had a problem. However they keep their firmware up to date and I know from past experience that specific Dell switch wasn’t a picture of stability in its early firmware versions.

So what did we learn. First regular DBCC Check DB’s are important, Second regular firmware and software updates are needed, Finally regular backups no matter how redundant or resilient a system are required.

SQL 2008 and 2008R2 End of Life

July 9, 2019 is coming faster than we think. That’s the day Microsoft will no longer support SQL 2008 and SQL2008R2. I know there is a thought out there of if its not broken don’t fix it but if your business depends on SQL Server running an unsupported version isn’t a good idea. On top of that the longer you wait the harder it will be to migration. Frequently software running on SQL will require a specific upgrade path and its possible you may need to jump 2 or 3 versions to get current making any migration take longer the longer you wait.

Its ok to ask for help Steve and I have lots of experience upgrading and migrating SQL Servers. Feel Free to reach out.

SQL 2008 Signature Edition from the Microsoft Store

SQL 2008 Signature Edition from the Microsoft Store

Home Office "Battlestation" Tour 2019

I figured now was a good time to share with everyone the hardware I use to handle my work for Stedman Solutions.

You can read about my Maple Desk here as for the chair I use an Office Master YS78 Chair with KR-200 Adjustable Arms. I can’t stress enough how important a good chair and desk are. I used to throw all my money into my computer and for years used a cheap sub $100 office chair which you can still see pictured in this photo now storing my backpack but I’m telling you during a long corruption repair having the flexibility to move your work surface up and down and a conformable chair is worth every penny.

Desk 1.jpg

My main workstation is a Apple 2018 15in MacBookPro with a 6C/12T Core I7-8850H, 16GB Ram, Radeon Pro 560X and 512GB SSD. Its the High end Base Model for 2018. I of course run macOS but also use VMware Fusion. I primarily use two virtual machines a Windows 10 VM and a RedHat Enterprise Linux VM.

I use an Apple Thunderbolt Display with a Thunderbolt 2 to 3 Adapter and a WASD Keyboards Code Keyboard with Cherry MX Brown switches. Once you use a Cherry MX Keyboard you won’t go back. At work I use a Das Keyboard 4 Professional with the same Cherry MX Brown switches.

For the Mouse I use a Logitech MX Anywhere 2 but I’m not 100 sold on it. I’m thinking of going back to the Apple Mouse.

I installed Red .2mm Reduction O Rings in the keyboard to cut down on noise. The above video allows you to hear the difference.


Much of my customer work is done via Remote Desktop to a Lenovo T440s with a 2C/4T Core I7-4600U, 8GB of Ram and a 256GB SSD. I’m running Windows 10, SQL 2017, Database Health and many other networking and database tools.


Finally we round out the tour. I’m using a Xerox Workcentre 3215 Printer and Scanner. Below the Xerox I have a Synology DS216+ with two 10TB Seagate IronWolf Drives. Its my main storage device which also sends Encrypted Backups to the Cloud.

For Networking I use the following,

1) Arris SURFboard SB8200 DOCSIS 3.1 Cable Modem

2) Meraki MX67 Firewall

3) Meraki MS220-8P Switch

4) Meraki MR33 Wireless Access Point

Cisco Meraki has its flaws mostly with the firewall (Read No IKEv2 or IPv6 or AnyConnect Support and no Network Objects) but it terms on something thats easy to setup, manage and manage remotely they are great.

I found mounting all the hardware on a piece of plywood mounted to the wall just like a network room in a small business works well and helps keep the cabling clean.

In closing I recommend Tripp Lite Isobar Surge Suppressors. They have always served me well and its pretty much the only suppressor I use. Their price premium over a cheaper model is a small price to pay for the extra protection they offer.

New Desk

Off my normally technical topics but I wanted to share about my new work desk. A Spalted Fiddleback Maple slap with live edges on the front and back the sides are smooth curved edges. I ordered a Uplift Desk frame with dual motors and the Memory Keypad.


A friend I now owe a lot to choose the slap for me and cut it down to size and finished it for me. We choose to fill the cracks with a copper flake colored epoxy which adds lots of intrigue to the cracks especially the large one on the front right-hand side. I’ve attached a slideshow below with pictures from start to finish.

Max SQL Memory Recommendations

I can’t take credit for this one. The credit goes to my friend Randolph. His post is at . He even has a script that will do it for you.

This leaves some ram for Windows to use and I’ve found its a good map to follow for production servers.

RAM Installed in System Max Server Memory
4 GB 2 GB
8 GB 5 GB
12 GB 8 GB
16 GB 11 GB
20 GB 14 GB
24 GB 18 GB
28 GB 21 GB
32 GB 25 GB
36 GB 28 GB
40 GB 32 GB
44 GB 35 GB
48 GB 39 GB
52 GB 42 GB
56 GB 46 GB
60 GB 49 GB
64 GB** 53 GB
68 GB 56 GB
72 GB 60 GB
76 GB 63 GB
80 GB 67 GB
84 GB 70 GB
88 GB 74 GB
92 GB 77 GB
96 GB 81 GB
100 GB 84 GB
104 GB 88 GB
108 GB 91 GB
112 GB 95 GB
116 GB 98 GB
120 GB 102 GB
124 GB 105 GB
128 GB** 109 GB
132 GB 112 GB
136 GB 116 GB
140 GB 119 GB
144 GB 123 GB
148 GB 126 GB
152 GB 130 GB
156 GB 133 GB
160 GB 137 GB
164 GB 140 GB
168 GB 144 GB
172 GB 147 GB
176 GB 151 GB
180 GB 154 GB
184 GB 158 GB
188 GB 161 GB
192 GB 165 GB
196 GB 168 GB
200 GB 172 GB
204 GB 175 GB
208 GB 179 GB
212 GB 182 GB
216 GB 186 GB
220 GB 189 GB
224 GB 193 GB
228 GB 196 GB
232 GB 200 GB
236 GB 203 GB
240 GB 207 GB
244 GB 210 GB
248 GB 214 GB
252 GB 217 GB
256 GB 221 GB
260 GB 224 GB
264 GB 228 GB
268 GB 231 GB
272 GB 235 GB
276 GB 238 GB
280 GB 242 GB
284 GB 245 GB
288 GB 249 GB
292 GB 252 GB
296 GB 256 GB
300 GB 259 GB
304 GB 263 GB
308 GB 266 GB
312 GB 270 GB
316 GB 273 GB
320 GB 277 GB
324 GB 280 GB
328 GB 284 GB
332 GB 287 GB
336 GB 291 GB
340 GB 294 GB
344 GB 298 GB
348 GB 301 GB
352 GB 305 GB
356 GB 308 GB
360 GB 312 GB
364 GB 315 GB
368 GB 319 GB
372 GB 322 GB
376 GB 326 GB
380 GB 329 GB
384 GB 333 GB
388 GB 336 GB
392 GB 340 GB
396 GB 343 GB
400 GB 347 GB
404 GB 350 GB
408 GB 354 GB
412 GB 357 GB
416 GB 361 GB
420 GB 364 GB
424 GB 368 GB
428 GB 371 GB
432 GB 375 GB
436 GB 378 GB
440 GB 382 GB
444 GB 385 GB
448 GB 389 GB
452 GB 392 GB
456 GB 396 GB
460 GB 399 GB
464 GB 403 GB
468 GB 406 GB
472 GB 410 GB
476 GB 413 GB
480 GB 417 GB
484 GB 420 GB
488 GB 424 GB
492 GB 427 GB
496 GB 431 GB
500 GB 434 GB
504 GB 438 GB
508 GB 441 GB
512 GB 445 GB
516 GB 448 GB
520 GB 452 GB
524 GB 455 GB
528 GB 459 GB
532 GB 462 GB
536 GB 466 GB
540 GB 469 GB
544 GB 473 GB
548 GB 476 GB
552 GB 480 GB
556 GB 483 GB
560 GB 487 GB
564 GB 490 GB
568 GB 494 GB
572 GB 497 GB
576 GB 501 GB
580 GB 504 GB
584 GB 508 GB
588 GB 511 GB
592 GB 515 GB
596 GB 518 GB
600 GB 522 GB
604 GB 525 GB
608 GB 529 GB
612 GB 532 GB
616 GB 536 GB
620 GB 539 GB
624 GB 543 GB
628 GB 546 GB
632 GB 550 GB
636 GB 553 GB
640 GB 557 GB
644 GB 560 GB
648 GB 564 GB
652 GB 567 GB
656 GB 571 GB
660 GB 574 GB
664 GB 578 GB
668 GB 581 GB
672 GB 585 GB
676 GB 588 GB
680 GB 592 GB
684 GB 595 GB
688 GB 599 GB
692 GB 602 GB
696 GB 606 GB
700 GB 609 GB
704 GB 613 GB
708 GB 616 GB
712 GB 620 GB
716 GB 623 GB
720 GB 627 GB
724 GB 630 GB
728 GB 634 GB
732 GB 637 GB
736 GB 641 GB
740 GB 644 GB
744 GB 648 GB
748 GB 651 GB
752 GB 655 GB
756 GB 658 GB
760 GB 662 GB
764 GB 665 GB
768 GB 669 GB
772 GB 672 GB
776 GB 676 GB
780 GB 679 GB
784 GB 683 GB
788 GB 686 GB
792 GB 690 GB
796 GB 693 GB
800 GB 697 GB
804 GB 700 GB
808 GB 704 GB
812 GB 707 GB
816 GB 711 GB
820 GB 714 GB
824 GB 718 GB
828 GB 721 GB
832 GB 725 GB
836 GB 728 GB
840 GB 732 GB
844 GB 735 GB
848 GB 739 GB
852 GB 742 GB
856 GB 746 GB
860 GB 749 GB
864 GB 753 GB
868 GB 756 GB
872 GB 760 GB
876 GB 763 GB
880 GB 767 GB
884 GB 770 GB
888 GB 774 GB
892 GB 777 GB
896 GB 781 GB
900 GB 784 GB
904 GB 788 GB
908 GB 791 GB
912 GB 795 GB
916 GB 798 GB
920 GB 802 GB
924 GB 805 GB
928 GB 809 GB
932 GB 812 GB
936 GB 816 GB
940 GB 819 GB
944 GB 823 GB
948 GB 826 GB
952 GB 830 GB
956 GB 833 GB
960 GB 837 GB
964 GB 840 GB
968 GB 844 GB
972 GB 847 GB
976 GB 851 GB
980 GB 854 GB
984 GB 858 GB
988 GB 861 GB
992 GB 865 GB
996 GB 868 GB
1000 GB 872 GB
1004 GB 875 GB
1008 GB 879 GB
1012 GB 882 GB
1016 GB 886 GB
1020 GB 889 GB
1024 GB 893 GB

** Standard Edition supports a maximum of 64 GB RAM, for SQL Server 2012 and below. SQL Server 2014 Standard Edition and higher supports up to 128 GB RAM.

SQL 2012 Standard Memory Limits

I’ve found there is a lot of confusion around the memory support of SQL 2012 Standard. Traditionally we see 2012 at 64GB and 2014 at 128GB and that is correct.

However like most things in technology it depends. Yes SQL 2012 Standard has the 64GB Limit but the Limit only applies to the buffer pool. Other SQL Server caches can consume more memory. I’d still recommend going to 2016 or 2017 where possible but if you are stuck with 2012 you can set your memory limit more than 64GB and still get some good from it.

Credit for this post goes to both Brent Ozar and Microsoft.

Rodents and Servers

Recent I was dusting off a lightly used Dell R720 for a client when to my horror I discovered a home for a mouse. This teaches me two things. One don’t leave a server in a storeroom. Two don’t ever take a card out and not replace the slot. This rodent squeezed his way in the hole left by the PCI slot and also chewed on some of the foam in the server all while making a nice nest over by a CPU.


There are four lights!

I’m not sure what is it with tech manufacturers these days. They have to make the LED’s brighter and brighter. Below you will see four switches. The bottom two Cisco units have resonable brightness LED’s but Dell EMC went over the top with the S4100 series. They want us to know those fans are working.

Whats funny though is that they are so bright you can hardly see. Plugging in the Ethernet cable and console cable while half blinded was well interesting. Another day in the life.

In this case four plus a link light.

In this case four plus a link light.

Captain Picard is right.

Captain Picard is right.

Microsoft Word Top Margin is Missing

I just had this issue last week and it took me much longer than I care to admit to figure it out so I figured I’d make a Blog Post about it.

As you can see from my screenshot below the Top Margin is missing. To fix the problem you have to mouse over to the very top of the page and then double click when it says Double Click to show white space.

Margin Word.jpeg

This Microsoft Support Article also describes how to fix the problem.



NEVER run the command above on a production database. As it says you will most likely loose data.



That syntax commands SQL to throw out any corrupted 8K Page. There can be lots of data in that page and there may be multiple pages corrupted. 

When dealing with SQL Server corruption it doesn’t matter if it is SQL Server 2000, 2005, 2008, 2008R2, 2012, 2014, 2016, 2017, or something newer, the very last option after every other option is exhausted is to use the REPAIR_ALLOW_DATA_LOSS, and to only do that if everything has been copied out of the corrupt tables that can be salvaged.

Here is a breakdown of the CHECKDB or CHECKTABLE options:

1) CHECKDB or CHECKTABLE without REPAIR_REBUILD, or REPAIR_ALLOW_DATA_LOSS. This reports on the corruption that is found with no attempt to fix it.

2) CHECKDB or CHECKTABLE with REPAIR_REBUILD. Attempts to fix corruption by rebuilding the corrupt data. Generally does not cause data loss, and generally doesn’t do very much. This may fix corruption if it is in a nonclustered index but then again it might not.

3) CHECKDB or CHECKTABLE with REPAIR_ALLOW_DATA_LOSS. Scans the database or table for corruption. If corruption is encountered, the page with the corruption is eliminated.  ALL DATA associated with that page of data is lost. This will usually fix corruption but it does that by throwing out every page with any corruption. An example would be fixing a dent in your car door by removing the entire door. 

Tips when dealing with SQL Server database corruption or errors reported from DBCC CHECKDB or CHECKTABLE.

1) Do Not Reboot. Rebooting will not fix data corruption, and if the corruption is in the part of the datafile needed to bring the database online, rebooting may make things worse.

2) Before attempting any type of repair be sure that you have a way to get back any data that could be lost during that repair.

3) Never run DBCC CHECKDB with REPAIR_ALLOW_DATA_LOSS on a production server. If you do as a last resort need to run with REPAIR_ALLOW_DATA_LOSS use it with CHECKTABLE, never with CHECKDB.

4) Ask for help. Talk with someone who has done this type of repair before. Steve and I can help. Please contact us here.  

If you run into SQL Corruption. We can help.

If you run into SQL Corruption. We can help.

Update, Please...

I recently read a blog post on my friend Randolph West blog about Windows Updates. Please read what he said here. I’d like to take a minute and both echo what Randolph said and expand on it.

Keeping your software up to date is important. I’ve heard all the excuses and even used them myself. I’m too busy, I don’t want anything to break, If it works why fix it and so on…. Yes I’ve had updates break things before but I ask you now what’s worse, fixing a problem because of an update or running the risk of getting so far behind that you risk running into that problem and many others or getting so far behind you no longer have a direct upgrade path to the latest version. I’m not saying be on bleeding edge just be at least somewhat current.

Common updates often forgotten about even when software updates are taken care of is firmware updates. Server, Storage, Switches, Firewalls, and Printers. Yes even printers need to be updated. Just recently ago a I ran into an issue with a client where old switch firmware on an iSCSI network likely caused SQL data corruption and even if it didn’t cause the corruption it was causing performance issues with dropped packets. This problem could have been avoided with a regular update schedule.

My final point is around support. Many vendors won’t support you in diagnosing a new issue until firmware is either up to date or close to it. So you time to diagnose and resolve an issue is only extended. I can’t tell you how nice it is to call in to support have them ask your version and the support rep to respond with “Thank you for staying current, no problem there” and then proceed with fixing your issue.

I know we are all busy but Please try to work some time in for those updates.



Steve and I recently repaired SQL Database Corruption for a customer who wasn’t running DBCC Check DB on a regular basis. Please don’t do this. DBCC Check DB both needs to be run on a regular basis AND you need to be monitoring the results.

It’s so important to know about corruption as close to when it happens as possible. If you aren’t checking for it you have the risk you out run your backups so when it is discovered you don’t have a backup that doesn’t contain the corruption and repair becomes more complex.

There are many excuses for not running DBCC Check DB regularly. I didn’t know about it, its too slow, … We’ll now you know about it and to respond about it taking to long to run you have a few options. First you should consider faster hardware if thats an option and second if that isn’t a possibility you can check specific tables for corruption daily and then check the whole database weekly or monthly.

I reference you back to an earlier post about what is the worse that can happen and can you life with it if you aren’t running DBCC Check DB. I can’t answer that for you but for me that answer is no. You need to be checking for corruption. My rule of thumb is once per day but there are certain circumstances where that isn’t possible so you work around it like I suggested above.

A future blog post will get into all the different options and how best to use DBCC Check DB.