Joe Johnson

Strategic Technology Executive

Joe Johnson

Strategic Technology Executive

Download Resume Contact Joe
! Home

Rename a Server Core Install or Hyper-V Host Computer

Joe Johnson - 18/05/2010

I recently needed to rename a Hyper-V server (which is essentially a server core install of Windows Server 2008 R2). It took so doing, but I found the command.

[code]Netdom renamecomputer oldname /newname:newname /userd:someuser /passwordd:*[/code]

Replace the computer names with valid ones and a domain admin user, and the command will prompt for your password. That’s it, reboot and you’re set!

Remove Exchange 2007 Public Folder Database Forcibly

Joe Johnson - 06/05/2010

I’ve been beating my head against the wall for a week on trying to forcibly remove a corrupted Exchange 2007 install on one of my servers. The AD Configuration tree became corrupted and a restore did not fix it, so I rebuilt a new server and migrated the mailboxes there. Problem solved! Except, now how do I remove the old server…when I try to uninstall, I get warned that Public Folder database still has replicas. Well, the only way to get rid of that is to replicate them to another server, but that’s not possible with this crippled server.

Solution? Delete the database from the configuration partition of Active Directory manually. To do so, you need to launch an ADSI edit session in the MMC and add the ADSI snap-in. This requires the Server 2003 Resource Kit Tools or the Remote Server Admin features for AD in Server 2008 and Server 2008 R2. I usually go to a domain controller to do this, as it has the ADSI plugin already installed.

Once connected, expand the tree to your server in question. You’ll find the storage group with your public folder store listed:

There, you will find the store in the right-hand pane:

All set! I successfully uninstalled Exchange 2007 from this server as soon as that was done. Since it contained no vaild public folders, I didn’t care if any data was lost. But be careful, it will ruin your public folder stores if you have not successfully and verifiably replicated the public folders to your new server.

Anonymous LiveMeeting in OCS 2007 R2

Joe Johnson - 16/04/2010

This one drove me nuts for four days before I figured out what was going on. A client is deploying OCS 2007 R2 in their environment and ditching WebEx and GoToMeeting, as well as the other conferencing and collaboration features of the product.

However, the main goal of getting users outside of the organization to access meetings was just making me rip my hair out. No matter what I did, each time I tried to join a meeting it would pop up and demand credentials on the client’s domain. All three of my external test machines did the same thing and I could not, for the life of me, figure out why.

A quick search did reveal some permissions issues, and I corrected them according to KB 2018725, and they are running Windows Server 2008 Standard x64. After setting the permissions, though, I still had issues.

Finally, I managed to find a Microsoft forum post that explained it all. When I was testing the external access with the MOC client, I was logging in to the client’s network as my domain user. That was pre-populating the user information in LiveMeeting with my SIP URI information on the client’s domain. Deleting the account info instantly fixed the issue on all three test boxes. In addition, three new user machines that had never before connected to OCS were able to connect to a LiveMeeting session without any errors or prompts.

Good luck!

Upload SQL Backup File via FTPS

Joe Johnson - 05/03/2010

Recently, a client was looking to backup the primary database for one of their acquisitions to their home office. Because of security concerns, they can’t combine the users on the office network with their corporate network until their team can fully integrate the systems, but a full, regular off-site backup is needed ASAP. Since the local staff doesn’t include any technical people, instead we chose to utilize FTPS to push the file offsite after the backup.

Requirements:
– cURL (I used the 32-bit version of 7.20)
– OpenSSL DLLs (libeay32.dll and ssleay32.dll)
– An SSL-enabled FTP server (we use IIS 7 with a commercial certificate)

Steps:
To setup this job, I installed the cURL executable into the c:\windows\system32 folder of the remote SQL machine. I then copied the two DLLs above into the c:\windows folder. It took a bit of trial and error to figure out the DLL path, but this one worked like a charm.

Once the install was completed, I went in and added a job to the system that backs up the database to local media, overwriting any existing backups and verifying the media when complete. Then, it will launch a batch file (code below) to FTP the file to our corporate office. Here’s the job:

[sql]
USE [msdb]
GO
/****** Object: Job [CorpBackup] Script Date: 03/05/2010 12:13:51 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object: JobCategory [[Uncategorized (Local)]]] Script Date: 03/05/2010 12:13:51 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]’ AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N’JOB’, @type=N’LOCAL’, @name=N'[Uncategorized (Local)]’
IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback</p>
<p>END</p>
<p>DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N’CorpBackup’,
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=3,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N’No description available.’,
@category_name=N'[Uncategorized (Local)]’,
@owner_login_name=N’SUBSIDIARY\jjohnson’,
@notify_email_operator_name=N’Corp IT’, @job_id = @jobId OUTPUT
IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback
/****** Object: Step [Backup The Database] Script Date: 03/05/2010 12:13:51 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N’Backup The Database’,
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=3,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N’TSQL’,
@command=N’BACKUP DATABASE [Subsidiary_Engine_SQL] TO DISK = N”K:\Corp\remote.bak” WITH NOFORMAT, INIT, NAME = N”Subsidiary_Engine_SQL-Full Database Backup”, SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N”Subsidiary_Engine_SQL” and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N”Subsidiary_Engine_SQL” )
if @backupSetId is null begin raiserror(N”Verify failed. Backup information for database ””Subsidiary_Engine_SQL”” not found.”, 16, 1) end
RESTORE VERIFYONLY FROM DISK = N”K:\Corp\remote.bak” WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
GO
‘,
@database_name=N’master’,
@flags=0
IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback
/****** Object: Step [FTP To Corp] Script Date: 03/05/2010 12:13:52 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N’FTP To Corp’,
@step_id=2,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N’CmdExec’,
@command=N’c:\scripts\backup.bat’,
@flags=0
IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N’Weekly’,
@enabled=1,
@freq_type=8,
@freq_interval=33,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=1,
@active_start_date=20100305,
@active_end_date=99991231,
@active_start_time=234500,
@active_end_time=235959
IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)’
IF (@@ERROR &lt;&gt; 0 OR @ReturnCode &lt;&gt; 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION
EndSave:
[/sql]

This job, if you look closer, will email our operator account and alert us to the success or failure of the job. We only need the backup about once a week, so we schedule the job for Friday night. When the job is complete, we can move the backup file off to a better location manually, just as a way to confirm we have it.

The batch script, c:\scripts\backup.bat, contains the command to upload the file to our FTPS server. One of the reasons I put curl.exe in the c:\windows\system32 folder is because it’s a cheap and easy way to circumvent the need for a full path. As an old colleague used to say, “It’s not that I don’t mind work, I’m just efficiently lazy.” Here’s the code for the script (munged, obviously, since it has our account password and FTPS site):

[code]
curl -T K:\Corp\remote.bak –ftp-ssl -k -u remotebackup:SomeP@ssword! ftp://ftps.corpdomain.com/
[/code]

Comclustion:
And that’s it, the file is uploaded automatically per the schedule we set in the SQL job. I get an email if it works or if it fails, and we have managed to get a backup regularly that doesn’t rely on non-technical users handling backup media or controlling off-site rotations. Use the script, the job, and hopefully it will help!

Path to SQLCMD

Joe Johnson - 20/01/2010

At a major client we use SQL Server 2008 Enterprise Edition on Windows Server 2008 Enterprise Edition, all 64-bit. After 20 minutes of searching, I couldn’t find the actual path to sqlcmd.exe for a script I am writing. Tired of relying on Windows Search to find the executable path, I’m making sure I do my part to ensure it is widely known to those people who don’t seem to know (despite Microsoft and most of the MVPs seeming to think it’s a given to know the path without ever using it).

C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE

“Change your expectation for appreciation and the world changes instantly.” -Tony Robbins

©2018, Joe Johnson