SQL Server with Mr. Denny


January 20, 2020  4:00 PM

Stop scheduling to go from testing straight to production

Denny Cherry Denny Cherry Profile: Denny Cherry

All too often I see the same basic pattern happening.  Software changes are written in dev, those changes to move QA, then the changes move to production.  The problem with this schedule is that if there’s a problem found in the QA process, there’s no time in the schedule for problems to be found in QA, which requires sending the software back to Dev, the problems fixed and then we try QA again.

If we don’t build time into the schedule to address problems that QA finds then we have one of three options.

  1. Release software with known issues to production
  2. Cancel the release and send everything back to development
  3. Do the release late and send the software package back to development, then QA

None of these are particularly good options as they involve either releasing known bad software (that’s not a good option as users will be mad) or missing the release date (that’s not a good option because users and/or management will be mad).

The better option is to plan into the schedule to have to send the package back to development to have problems adjusted.  Developers are human and make mistakes, it happens.  It takes time to fix the problems that are found. This is why we have QA. It isn’t to sign off that software is perfect, its to find problems in software so that they can be fixed.

Say that we are starting a Dev string on Feb 3rd, 2020 (it’s a Monday).  The sprint goes until Feb 14th, 2020 (it’s a Friday).  Testing in QA is scheduled for a week so it starts on Feb 20, 2020, and ends on Feb 24, 2020.  Then the production release is on Feb 27th, 2020 (the last Monday).

Now, what happens if a problem is found on Feb 24th?  Do we push the release date from Feb 27th, or do we release known bad software?  Neither of those options is going to be particularly popular options.

What we should have between testing and the production release is at least a few days, maybe another week for additional dev work and re-testing after QA happens.  If that time isn’t needed great, then the package sits for a week.  If the time is needed, then we have it. In either case, the release can happen on time and we can release known good software, instead of software with known bugs.

This sort of change will require signoff from above, but it won’t really change the process that the developers go through when building the software.  What it will do is slightly reduce the number of releases that can happen each year as each cycle is now a little bit longer then it was before.  But the end result from this will be more stable software, and a better result from each software release; and this is course the prefered end result.

Denny

January 13, 2020  4:00 PM

IT Career Energizer Podcast

Denny Cherry Denny Cherry Profile: Denny Cherry

A couple of weeks ago I was on the IT Career Energizer Podcast. During the course of the episode, we’ll cover some career highlights, where I think IT is doing in the next few years and all other sorts of things IT Career-related.

You can subscribe to the podcast on Apple (the episode is here) or you can get the podcast from Stitcher as well.

There’s a ton of more information available via the show notes.

Hopefully, you’ll find the podcast useful and entertaining.

Denny


January 6, 2020  4:00 PM

Our EGPAF Click to Donate Campaign has wrapped up for 2019

Denny Cherry Denny Cherry Profile: Denny Cherry

Over the month of December (from the 1st through the 24th) we had a donation program set up with the Elizabeth Glaser Pediatric AIDS Foundation.  To help us, all you had to do, was to click through to the page that we set up for the donation program.  This simple act would cause a $1 donation to be made. If you wanted to help out more (which several people did, and we thank you) then you could click through and donate more directly to EGPAF, and we’d then match those donations up to $10,000.  While we were out donation program our marketing firm, Mayfield Consulting was doing one as well which followed along with ours.

Between the two programs, we had a fantastic fundraiser, and we thank everyone for participating.  Between the two donation programs, I’m thrilled to say that we were able to raise $15,662 for the Elizabeth Glaser Pediatric AIDS Foundation.

Thanks again everyone for helping us make this fundraiser a great success.  I’m sure that EGPAF will be able to use these donations in order to help save more lives.  This is a great way to finish up 2019, I hope everyone has a great New Years and we’ll see everyone as we kick off the 20s in just a couple of days’ time.

If you haven’t had a chance to watch the video that we made with the team at EGPAF, the video is above.

Denny


December 23, 2019  4:00 PM

Dynamically Assigning an Availability Set to a VM in an ARM Template

Denny Cherry Denny Cherry Profile: Denny Cherry

Recently I was creating an ARM template for a client.  The idea for the ARM template was that we were going to create two VMs, and it would also create an Availability Set and assign the VMs to the Availability Set.  So that’s no problem.Cloudflare being the cloud

We then got a request to also create an ARM template for one VM without the Availability Set.  I didn’t want to create (and then have to manage) a second template. I wanted one template.  So I added a parameter to the ARM template called “SingleMachineInstall” which accepted “Yes” no “No” to the parameters section like this.

“SingleMachineInstall”: {
“type”: “string”,
“allowedValues”: [ “Yes”, “No” ],
“defaultValue”: “No”,
“metadata”: {
“description”: “Check this if this should be installed as a single VM. This will prevent the ILB, Availability Set and the second VM from being created.”
}
},

For all the objects that I didn’t want to create when this parameter had a value of “Yes” I simply added a condition statement to each object like this.

“condition”: “[equals(parameters(‘SingleMachineInstall’), ‘No’)]”,

Then came the complex part of this.  When there are two VMs being created, each VM needed to be dependent on the Availability Set. But when there’s only one VM, I’m not creating the Availability Set, so if the dependency is still there, the deployment will fail.  One thing that I found in my testing, is that you can set a resource to be dependant on the same resource multiple times.  So what I did in the dependsOn section of the VM template, I combined this with an IF statement. In the IF statement, I put down that if the Parameter is set to “No” then we pass in the resourceId for the Availability Set. if the Parameter is set for “Yes” then we pass in the NIC again, which makes the dependsOn succeed either way.

“dependsOn”: [
“[concat(parameters(‘VM1_Name’), ‘_nic0’)]”,
“[if(equals(parameters(‘SingleMachineInstall’), ‘No’), resourceId(‘Microsoft.Network/loadBalancers’, parameters(‘AvailabilitySet_Name’)), concat(parameters(‘VM1_Name’), ‘_nic0’))]”
],

The final thing that we needed to figure out was the properties.availabilitySet value within the Virtual Machine configuration.  The problem with this value is that it expects to have a sub-Id called id like this.

“availabilitySet”: {
“id”: “[resourceId(‘Microsoft.Compute/availabilitySets’, parameters(‘AvailabilitySet_Name’))]”
},

Now, this couldn’t be wrapped in a simple IF statement, because then the id that is being passed in, is a blank string, which throws an error message.

There’s another syntax for this parameter which came in really handy for this.  That syntax is to pass in the ID, without specifying that it is an id like is shown here.

“availabilitySet”: “[resourceId(‘Microsoft.Compute/availabilitySets’, parameters(‘AvailabilitySet_Name’))]”,

Now, this syntax is important to us because we can use this to help us not put in an Availability Set if the parameter is set to not create the Availability Set.

We create one additional thing to make this work, first we create a variable within the ARM template.  I called this variable “availabilitySet”.  Because of the way ARM works, no error will be thrown if there’s no Availability Set created.

“availabilitySet”: {
“id”: “[resourceId(‘Microsoft.Compute/availabilitySets’, parameters(‘AvailabilitySet_Name’))]”
}

Back within the VM section of the ARM template, we need to tell the ARM template to use the variable if it needs, and if it isn’t needed we send is a NULL value.  This way if we need an Availability Set, we specify the child value, otherwise, we pass in nothing.

“availabilitySet”: “[if(equals(parameters(‘SingleMachineInstall’), ‘No’), variables(‘availabilitySet’), json(‘null’))]”,

When I was able to do this, I was using “apiVersion”: “2019-03-01” so this may not work in later version of the API, so be warned about that.

When I was searching around on Google I couldn’t find any examples that showed how to do this. They may be out there, but I couldn’t find them.

Hopefully, this technique works for you in the few places that you need this sort of technique.

Denny


December 16, 2019  4:00 PM

Another Day, Another Ransomware Attack

Denny Cherry Denny Cherry Profile: Denny Cherry

This weekend New Orleans reported that they suffering a cyber attack.  In response to this, the city turned off all their workstations and servers while they tried to contain the issue.  While I have no issue with what the city of New Orleans had to do in order to contain the outbreak. You do what you need to do, in order to stop the outbreak.

What I do have an issue with is that production servers were impacted by this at all. Things like Ransomeware are going to happen but preparing for these sorts of problems is going to make it much easier to deal with these sorts of problems.  When it comes to something to Ransomeware we aren’t really that concerned with the workstations, we only really care about the servers as that’s where the data that we need to protect is.

The first thing that we want to do in order to protect our servers is to prevent normal users from being able to RDP to the servers.  We probably don’t even want the IT teams to be able to RDP to the servers directly.  What we’ll want to set up is a jump box and that’s the only machine in the server environment which we can RDP to.  From there we can RDP from the jump box to other servers.  We can probably secure RDP access from one server to another as well.

The same applies to file share access.  There should be no servers that users have network file share access to (or any other network access).  File servers are going to be the exception to this, and they should be treated differently than the other servers.  Those file servers that users have file share access to, should be treated just like the users are treated. File servers should have no RDP or file share access to the other servers in the environment.

Domain controllers should be treated similarly to file servers. Users and other servers will need file share (and other) access to the Domain Controllers in other for authentication to work as expected.  But users don’t need RDP access to the Domain Controllers.

On top of all of this, servers should not have access to connect to the Internet. The exception to this will be the Windows Update Server (WSUS) or whatever software is being used to patch the servers.  Unless there’s a specific requirement for software to have internet access, that access should be opened up. Other than that access from the server network to the internet should be completely closed down.

While these steps aren’t going to give you 100% protection from things like Ransomeware, but it’s going to give you a lot more protection than the “normal” setup where things are wide open.

Denny


December 9, 2019  4:00 PM

Microsoft wants bugs found in SQL Server and reported to Microsoft

Denny Cherry Denny Cherry Profile: Denny Cherry

There are two groups of people that use SQL Server. Those that submit bugs to Microsoft and those that blog about problems that they find.

Those that submit their feedback about bugs to Microsoft want the issues to be fixed.

Those that blog about potential bugs in order to be seen, just want to be famous.

Be the first group, not the second. Make SQL Server (or whatever product) better.

Denny


December 2, 2019  4:00 PM

DCAC Supporting Elizabeth Glaser Pediatric AIDS Foundation (@egpaf) #WorldAIDSDay – Redux

Denny Cherry Denny Cherry Profile: Denny Cherry

Tis the season and Denny Cherry & Associates Consulting has a quick way for you to make a difference. All you have to do, is click through to our donation webpage, and that’s it.  For clicking through, DCAC will donate $1 to Elizabeth Glaser Pediatric AIDS Foundation.

Every dollar accessed by your participation matters. Having assisted 30 million pregnant women at more than 5,000 clinics in 19 countries, The Elizabeth Glaser Pediatric AIDS Foundation continues to seek an end to global pediatric HIV/AIDS through prevention and treatment programs, research, and advocacy.

We’re working with the Elizabeth Glaser Pediatric AIDS Foundation in part because 500 children are newly infected with HIV because their families lack access to the health services they need to prevent transmission.  And this is something that everyone at DCAC wants to help solve.  We have come so far, but progress towards ending AIDS in children and youth is stalling. We must redouble our efforts or risk losing the progress we’ve gained!

Want to help out by DONATING MORE? EXCELLENT! We’re matching donations! Click through here to donate to EGPAF! DCAC will match every dollar you choose to donate through our link up to a total of $10,000 US for donations made between December 1st, 2019 through December 24th, 2019 at 11:59:59pm Pacific Time.

We announced this yesterday, which was World AIDS Day, but we wanted to announce it again today to make sure that as many people as possible see it.  We urge you to click through and make the $1 donation and if you can make your own donation which DCAC will match to the Elizabeth Glaser Pediatric AIDS Foundation.

Denny


December 1, 2019  4:00 PM

DCAC Supporting Elizabeth Glaser Pediatric AIDS Foundation (@egpaf) #WorldAIDSDay

Denny Cherry Denny Cherry Profile: Denny Cherry

Tis the season and Denny Cherry & Associates Consulting has a quick way for you to make a difference. All you have to do, is click through to our donation webpage, and that’s it.  For clicking through, DCAC will donate $1 to Elizabeth Glaser Pediatric AIDS Foundation.

Every dollar accessed by your participation matters. Having assisted 30 million pregnant women at more than 5,000 clinics in 19 countries, The Elizabeth Glaser Pediatric AIDS Foundation continues to seek an end to global pediatric HIV/AIDS through prevention and treatment programs, research, and advocacy.

We’re working with the Elizabeth Glaser Pediatric AIDS Foundation in part because 500 children are newly infected with HIV because their families lack access to the health services they need to prevent transmission.  And this is something that everyone at DCAC wants to help solve.  We have come so far, but progress towards ending AIDS in children and youth is stalling. We must redouble our efforts or risk losing the progress we’ve gained!

Want to help out by DONATING MORE? EXCELLENT! We’re matching donations! Click through here to donate to EGPAF! DCAC will match every dollar you choose to donate through our link up to a total of $10,000 US for donations made between December 1st, 2019 through December 24th, 2019 at 11:59:59pm Pacific Time.

We’re proud to be able to announce or donation page and matching fund on World AIDS Day, which is today December 1st, 2019 (which is why we are posting on a Sunday. We urge you to click through and make the $1 donation and if you can make your own donation which DCAC will match to the Elizabeth Glaser Pediatric AIDS Foundation.

Denny


November 25, 2019  4:00 PM

Let the Holidays Begin

Denny Cherry Denny Cherry Profile: Denny Cherry

This week begins the holiday season with Thanksgiving in the US being Thursday of this week, and Black Friday is Friday of this week.

Locked Bike

https://www.flickr.com/photos/123327536@N08/23891946434

Enjoy the holiday season starting this week, and for those in IT that are working on Friday to support Black Friday may you have a nice simple day.

Denny


November 18, 2019  4:00 PM

SQL Server 2019 Big Data and Licensing

Denny Cherry Denny Cherry Profile: Denny Cherry

One of the big features of SQL Server 2019 is the new feature called Big Data Cluster (BDC for short).  BDC doesn’t have its own licensing per se (it does, but only if you don’t get enough “free” licenses) as you get BDC free when you license what is called the head node.

The first thing to remember about BDC is that there’s this concept of a head node. This is what the users connect to and it runs good old fashioned SQL Server.

From a licensing perspective, you get the ability to run X number of BDC data cores when you purchase Y CPU cores of SQL Server 2019 for the head node.

The math for this is pretty straight forward.   If you purchase SQL Server 2019 Enterprise Edition for the head node, you get 8 BDC cores for each SQL Server 2019 core that you purchase for the head node.

If you purchase SQL Server 2019 Standard Edition for the head node, you get 1 BDC core for each SQL Server 2019 core that you purchase for the head node.

So what this means is that if you have 4 cores on the head node, and 32 BDC cores then there would be nothing extra to purchase if you purchase Enterprise Edition. If however, you purchase SQL Server 2019 Standard Edition for the head node then an additional 28 BDC cores need to be purchased.

The next question at this point is, how much do extra cores of BDC cost to run?  The cores are sold on a subscription basis, which comes to $400 per core, per year (and the licenses are sold in 2 packs).  So in our example of having SQL Server 2019 Standard Edition and needing 28 BDC cores would cost $11,200 per year to run BDC.  Now given the cost of SQL Server Enterprise Edition is $14,992 for four cores and SQL Server Standard Edition are $14,344 (plus $11,200) or $25,544 (for SQL and BDC) with a system such as this, buying Enterprise Edition is going to be the cheaper option.  Depending on the number of cores and the number of BDC cores the math here could get very interesting and will take some evaluating before selecting a license mode to select.

To make this easier, let’s look at a chart for the sample of 4 cores on the head node and 32 BDC cores (You’ll probably want SA on this which is an extra cost which I’m not including here).

License Type License Costs BDC Annual Costs First-Year Costs Additional Years Costs
Standard Edition $14,992 $11,200 $25,544 $11,200
Enterprise Edition $14,992 $0 $14,992 $0

As you can see, depending on how you scale this it could become an interesting converation.

Denny


Forgot Password

No problem! Submit your e-mail address below. We'll send you an e-mail containing your password.

Your password has been sent to: