Tuesday, January 27, 2009 5:12 PM
Brian S. Tucker
SMS 2003 to SCCM 2007 SP1 R2 Side by Side Migration X64 Style
There have been a few really good posts about how to do a side by side migration, but I ran across a bit of a different scenario recently and wanted to share the process with you if it fits into what you are looking to do. It's actually quite painless and you keep everything you have including collections, packages, advertisements, reports and queries.
Requirement: Perform a Side by Side upgrade from SMS 2003 with SQL 2000 on a X86 2003 server to Server 2003 Enterprise X64 & SQL 2005 X64
Problem: SMS 2003 is not only unsupported, but will NOT install on a X64 server. So, how do we accomplish this task?
While I had a few ideas, I finally came up with the following scenario that has worked 100% and will for you if this is your intended goal.
- Backup your current SMS 2003 server 100%.
- Build a standard Server 2003 box and load SQL 2005 SP2 (or SQL 2008 with the supported hotfix). Install all the IIS requirements that SMS 2003 requires.
- Install SMS 2003 SP(X) as a new primary server to match what you currently have as a SMS 2003 Central Primary. Configure all the settings. Create an address from the new server to the old and one on the old to the new. Add the Server$ name to the local admin group on each server and give the new server permission as required on the System container in AD. Change the settings on the new SMS server not to be a Central Primary and have it report to the old (current) Central Primary site code. Now you have your current Central Primary and a new child primary in the hierarchy. Allow the collections, packages and advertisements to transfer to the new child. Once all has been replicated, you can proceed.
- On the child primary, run the SCCM prerequisite checker and fix ALL warnings and or errors. Once you have all the prerequisites resolved, extend the AD schema for SCCM. Once SCCM is installed, configure the server as required. Make sure you don't have ANY overlapping boundaries between both sites.
- Delete the address you created on the SCCM and SMS boxes to break the hierarchy. Change the SCCM server from being a child primary to be a central primary. Wait for all the padlocks to remove on all the replicated objects. The collections, advertisements and packages will NOT be orphaned by this process. They will still hold all the ID's from the old SMS server.
- Now you have a Central Primary SCCM server with a new site code. At this stage, you have 2 central primary servers in your environment. Now we want to do the same process, but on the final X64 server with SQL X64 (optional, but suggested). On the X64 server, install SCCM the same way you did before and give it a unique site code. During the install process, make it a primary server... Once you have SCCM installed, do the same process you did on your last server by making it a child primary of the SCCM Central Primary. Allow time for the replication of all the objects, just like before. Once they are all there and padlocked, remove the addresses and make the X64 SCCM server a central primary again. That's the basics of the process, but here are a few more things you should know.
Note:
- As stated, all your collections, adverts and packages will be migrated with the SAME old ID's. This is actually good to keep things working. This entire process can almost be considered an "in-place" upgrade!
- Queries and Reports do not migrate. You will have to export them from the old SMS server into .mof files and import them on the SCCM server. Queries seem to import well, but if you have a lot of reports, you might want to export them in multiple files. If you had 1,000, they would export ok, but the import would hang forever. Watch out for duplicates from what was in SMS and what''s in reports and queries in SCCM.
- Another key thing to note is that for all objects: collections, packages, advertisements, reports and queries... if they are in a folder that you have made, they will not replicate or able to be exported. All replicated objects and imported objects will go direct to the root folder for that given object.
- Package source directories will remain as they were. If you package source was NOT on the SMS server, then you don't have to worry about anything. However, if they were on the old server, then you have to do a little fix. Copy the entire package source folder over to the new SCCM server. I have attached a script written by Francisco Merizalde (with his permission) which will simply change the server name for all packages. The command line is included in the attached text file.
- You can delete all collections for the ITMU if you had it installed with SMS as this will not be an option in this scenario. To continue patching, you will need to install WSUS 3.0 SP1 (current release at the time of this post) and setup your SUP role.
- Of course you will have to remove all the boundaries of your old SMS server and add them to your SCCM server.
- Since all your clients are still SMS 2003, they may not get the new site code until you decommission your SMS server. If the SMS server is still up and running, you can use one of the 3rd party tools to change the site code.
This was an interesting upgrade and I don't think that it's been documented this way, but it's easy and works 100%. If you have any questions, just post a comment. If I think of anything I missed in the process, I will update this post.
If the attachment is not listed, below are the instructions for the script.
Throw this in a .vbs file and run from the command line using cscript. Make sure and put the servername that should be the source for the packages after the script name on the commanline.Cscript <Script Name> <SERVER Name>i.e.cscript packagemodify.vbs SERVER123 (where SERVER123 is the new server you have copied the source to)
Copy code below this line---------------------------------------------------
Dim oWbemServices
If UCase(Right(Wscript.FullName, 11)) = "WSCRIPT.EXE" Then
Wscript.Echo "This script must be run under CScript."
Wscript.Quit
End If
If WScript.Arguments.Count <> 1 Then
WScript.Echo "Wrong number of arguments were passed."
WScript.Quit
End If
CONNSCCM()
For Each oPackage In oWbemServices.execquery("select * from sms_package")
sOldPathString = oPackage.pkgsourcepath
If InStr(sOldPathString,"\\") Then
iStart = InStr(3,sOldPathString,"\")
sNewPathString = Right(sOldPathString,(LEN(sOldPathString)-iStart))
sNewPathString = "\\" & WScript.Arguments(0) & "\" & sNewPathString
WScript.Echo "Setting Package Path for " & oPackage.Name & " from " & sOldPathString & " to " & sNewPathString
oPackage.pkgsourcepath = sNewPathString
oPackage.put_
End If
Next
WScript.Echo "Done"
Sub CONNSCCM()
Set oWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set oWbemServices = oWbemLocator.ConnectServer(".", "root\sms")
Set oSCCMProvLoc = oWbemServices.InstancesOf("SMS_ProviderLocation")
For Each oLoc In oSCCMProvLoc
If oLoc.ProviderForLocalSite = True Then
Set oWbemServices = oWbemLocator.ConnectServer(oLoc.Machine, "root\sms\site_" + oLoc.SiteCode)
End If
Next
End Sub
Filed under: Systems Management, SMS 2003, SMS 2003 SP3, SMS 2003 Reports, Intrinsic, WSUS 3.0, SCCM Start to Finsih Guide, Software Updates, CM 2007, SCCM SP1, SCCM Prerequisite Checker, SCCM 2007 R2, SQL 2005, System Center