<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Shai Perednik.com</title>
	<atom:link href="http://shaiperednik.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://shaiperednik.com</link>
	<description>Data Center Transformation &#38; Cloud Architect</description>
	<lastBuildDate>Thu, 14 Feb 2013 03:19:48 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Funny text!</title>
		<link>http://shaiperednik.com/2013/01/funny-text/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=funny-text</link>
		<comments>http://shaiperednik.com/2013/01/funny-text/#comments</comments>
		<pubDate>Thu, 10 Jan 2013 00:55:30 +0000</pubDate>
		<dc:creator>Shai Perednik</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://shaiperednik.com/?p=4182</guid>
		<description><![CDATA[Got this text back today from our driver at work picking up equipment. ????]]></description>
				<content:encoded><![CDATA[<p><a href="http://i0.wp.com/shaiperednik.com/wp-content/uploads/2013/01/20130109-195351.jpg" rel="lightbox[4182]"><img src="http://i0.wp.com/shaiperednik.com/wp-content/uploads/2013/01/20130109-195351.jpg" alt="20130109-195351.jpg" class="alignnone size-full" data-recalc-dims="1" /></a></p>
<p>Got this text back today from our driver at work picking up equipment.  ????</p>
<p><a href="http://shaiperednik.com/2013/01/funny-text/" rel="bookmark">Funny text!</a> originally appeared on <a href="http://shaiperednik.com">Shai Perednik.com</a> on January 9, 2013.</p>
]]></content:encoded>
			<wfw:commentRss>http://shaiperednik.com/2013/01/funny-text/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create.js – InPage Editing for Content Management Systems Using HTML5</title>
		<link>http://shaiperednik.com/2012/12/create-js-inpage-editing-for-content-management-systems-using-html5/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=create-js-inpage-editing-for-content-management-systems-using-html5</link>
		<comments>http://shaiperednik.com/2012/12/create-js-inpage-editing-for-content-management-systems-using-html5/#comments</comments>
		<pubDate>Sat, 29 Dec 2012 20:20:01 +0000</pubDate>
		<dc:creator>System</dc:creator>
				<category><![CDATA[My Clippings]]></category>

		<guid isPermaLink="false">http://shaiperednik.com/2012/12/create-js-inpage-editing-for-content-management-systems-using-html5/</guid>
		<description><![CDATA[Automatically pulled from Google Starred    Thinking about strategies of how to best edit web content, we will rather quickly agree that the so-called inline or inpage editing is the best way to do it. Inline editing means the editing of web contents right inside their original layout. Still this best way is supported by [...]]]></description>
				<content:encoded><![CDATA[<p>Automatically pulled from <a href="http://www.google.com/reader/shared/user/12161643044555212799/state/com.google/starred">Google Starred</a></p>
<table width="650">
<tr>
<td width="650">
<div>
      <img src="http://i2.wp.com/shaiperednik.com/wp-content/plugins/wp-o-matic/cache/825129b364_advertisement.gif" alt="" border="0" data-recalc-dims="1" /><br />
      <a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=noupe-rss&amp;position=1"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=noupe-rss&amp;position=1" border="0" alt="" /></a> <a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=noupe-rss&amp;position=2"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=noupe-rss&amp;position=2" border="0" alt="" /></a> <a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=noupe-rss&amp;position=3"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=noupe-rss&amp;position=3" border="0" alt="" /></a>
    </div>
</td>
</tr>
</table>
<p><a href="http://www.noupe.com/javascript/create-js-inpage-editing-for-cms-74252.html"><img src="http://i0.wp.com/shaiperednik.com/wp-content/plugins/wp-o-matic/cache/7369e44053_create-js.png?resize=550%2C474" alt="" title="create-js" data-recalc-dims="1" /></a></p>
<p>Thinking about strategies of how to best edit web content, we will rather quickly agree that the so-called inline or inpage editing is the best way to do it. Inline editing means the editing of web contents right inside their original layout. Still this best way is supported by only very few systems. The project Create.js provides a module for almost every CMS out there to relatively easily implement exactly this, inline editing of any content.</p>
<p><a href="http://www.noupe.com/javascript/create-js-inpage-editing-for-cms-74252.html">Go to Source</a></p>
<p><a href="http://shaiperednik.com/2012/12/create-js-inpage-editing-for-content-management-systems-using-html5/" rel="bookmark">Create.js – InPage Editing for Content Management Systems Using HTML5</a> originally appeared on <a href="http://shaiperednik.com">Shai Perednik.com</a> on December 29, 2012.</p>
]]></content:encoded>
			<wfw:commentRss>http://shaiperednik.com/2012/12/create-js-inpage-editing-for-content-management-systems-using-html5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fresh and Free WordPress Themes Released In December 2012</title>
		<link>http://shaiperednik.com/2012/12/fresh-and-free-wordpress-themes-released-in-december-2012/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=fresh-and-free-wordpress-themes-released-in-december-2012</link>
		<comments>http://shaiperednik.com/2012/12/fresh-and-free-wordpress-themes-released-in-december-2012/#comments</comments>
		<pubDate>Tue, 25 Dec 2012 19:21:53 +0000</pubDate>
		<dc:creator>System</dc:creator>
				<category><![CDATA[My Clippings]]></category>

		<guid isPermaLink="false">http://shaiperednik.com/2012/12/fresh-and-free-wordpress-themes-released-in-december-2012/</guid>
		<description><![CDATA[Automatically pulled from Google Starred    We have come to the end of another fine month. For WordPress users, December 2012 marked the release of WordPress 3.5 Beyond that, many new themes were also released in December, and in this round-up, we shall be taking a look at them. Go to Source]]></description>
				<content:encoded><![CDATA[<p>Automatically pulled from <a href="http://www.google.com/reader/shared/user/12161643044555212799/state/com.google/starred">Google Starred</a></p>
<table width="650">
<tr>
<td width="650">
<div>
      <img src="http://i1.wp.com/shaiperednik.com/wp-content/plugins/wp-o-matic/cache/d9e021b3eb_advertisement.gif" alt="" border="0" data-recalc-dims="1" /><br />
      <a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=noupe-rss&amp;position=1"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=noupe-rss&amp;position=1" border="0" alt="" /></a> <a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=noupe-rss&amp;position=2"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=noupe-rss&amp;position=2" border="0" alt="" /></a> <a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=noupe-rss&amp;position=3"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=noupe-rss&amp;position=3" border="0" alt="" /></a>
    </div>
</td>
</tr>
</table>
<p><a href="http://www.noupe.com/wordpress/fresh-and-free-wordpress-themes-from-december-2012-74059.html"><img src="http://i2.wp.com/shaiperednik.com/wp-content/plugins/wp-o-matic/cache/fb68504d5b_clean-retina.png?resize=550%2C313" alt="" title="Clean Retina" data-recalc-dims="1" /></a></p>
<p>We have come to the end of another fine month. For WordPress users, December 2012 marked the release of <a href="http://www.noupe.com/wordpress/wordpress-3-5-first-look-yay-or-nay-73836.html">WordPress 3.5</a> Beyond that, many new themes were also released in December, and in this round-up, we shall be taking a look at them.</p>
<p><a href="http://www.noupe.com/wordpress/fresh-and-free-wordpress-themes-from-december-2012-74059.html">Go to Source</a></p>
<p><a href="http://shaiperednik.com/2012/12/fresh-and-free-wordpress-themes-released-in-december-2012/" rel="bookmark">Fresh and Free WordPress Themes Released In December 2012</a> originally appeared on <a href="http://shaiperednik.com">Shai Perednik.com</a> on December 25, 2012.</p>
]]></content:encoded>
			<wfw:commentRss>http://shaiperednik.com/2012/12/fresh-and-free-wordpress-themes-released-in-december-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Indoor parking?</title>
		<link>http://shaiperednik.com/2012/12/indoor-parking/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=indoor-parking</link>
		<comments>http://shaiperednik.com/2012/12/indoor-parking/#comments</comments>
		<pubDate>Sat, 22 Dec 2012 15:10:34 +0000</pubDate>
		<dc:creator>Shai Perednik</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://shaiperednik.com/?p=4172</guid>
		<description><![CDATA[We decided to take our chances and venture out.]]></description>
				<content:encoded><![CDATA[<p><a href="http://i0.wp.com/shaiperednik.com/wp-content/uploads/2012/12/20121222-100916.jpg" rel="lightbox[4172]"><img src="http://i0.wp.com/shaiperednik.com/wp-content/uploads/2012/12/20121222-100916.jpg" alt="20121222-100916.jpg" class="alignnone size-full" data-recalc-dims="1" /></a></p>
<p>We decided to take our chances and venture out.</p>
<p><a href="http://shaiperednik.com/2012/12/indoor-parking/" rel="bookmark">Indoor parking?</a> originally appeared on <a href="http://shaiperednik.com">Shai Perednik.com</a> on December 22, 2012.</p>
]]></content:encoded>
			<wfw:commentRss>http://shaiperednik.com/2012/12/indoor-parking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Everything see mind fine</title>
		<link>http://shaiperednik.com/2012/12/everything-see-mind-fine/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=everything-see-mind-fine</link>
		<comments>http://shaiperednik.com/2012/12/everything-see-mind-fine/#comments</comments>
		<pubDate>Sat, 22 Dec 2012 13:51:57 +0000</pubDate>
		<dc:creator>Shai Perednik</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://shaiperednik.com/?p=4169</guid>
		<description><![CDATA[&#8230;this morning. Till we stepped out. I&#8217;ll post more soon..]]></description>
				<content:encoded><![CDATA[<p><a href="http://i2.wp.com/shaiperednik.com/wp-content/uploads/2012/12/20121222-085048.jpg" rel="lightbox[4169]"><img src="http://i2.wp.com/shaiperednik.com/wp-content/uploads/2012/12/20121222-085048.jpg" alt="20121222-085048.jpg" class="alignnone size-full" data-recalc-dims="1" /></a></p>
<p>&#8230;this morning. Till we stepped out. I&#8217;ll post more soon..</p>
<p><a href="http://shaiperednik.com/2012/12/everything-see-mind-fine/" rel="bookmark">Everything see mind fine</a> originally appeared on <a href="http://shaiperednik.com">Shai Perednik.com</a> on December 22, 2012.</p>
]]></content:encoded>
			<wfw:commentRss>http://shaiperednik.com/2012/12/everything-see-mind-fine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SiriProxy Plugins</title>
		<link>http://shaiperednik.com/2012/11/siriproxy-plugins/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=siriproxy-plugins</link>
		<comments>http://shaiperednik.com/2012/11/siriproxy-plugins/#comments</comments>
		<pubDate>Mon, 26 Nov 2012 18:25:04 +0000</pubDate>
		<dc:creator>Shai Perednik</dc:creator>
				<category><![CDATA[Musings]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[siri]]></category>
		<category><![CDATA[Siriproxy]]></category>

		<guid isPermaLink="false">http://shaiperednik.com/?p=4161</guid>
		<description><![CDATA[Just built my siriproxy server last night in Ubuntu 12.10 and another Debian host running DNSMasq. I&#8217;ll post links and instructions soon. Here&#8217;s a good list of siri proxy plugins! Where&#8217;s the knock knock joke plugin? https://github.com/plamoni/SiriProxy/wiki/Plugins]]></description>
				<content:encoded><![CDATA[<p>Just built my <a href="http://shaiperednik.com/tag/siriproxy/" class="st_tag internal_tag" rel="tag" title="Posts tagged with Siriproxy">siriproxy</a> server last night in Ubuntu 12.10 and another Debian host running DNSMasq. I&#8217;ll post links and instructions soon. </p>
<p>Here&#8217;s a good list of <a href="http://shaiperednik.com/tag/siri/" class="st_tag internal_tag" rel="tag" title="Posts tagged with siri">siri</a> proxy plugins!  Where&#8217;s the knock knock joke plugin? <img src='http://i0.wp.com/shaiperednik.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' data-recalc-dims="1" /><br />
 <a href="https://github.com/plamoni/SiriProxy/wiki/Plugins">https://github.com/plamoni/SiriProxy/wiki/Plugins</a></p>
<p><a href="http://shaiperednik.com/2012/11/siriproxy-plugins/" rel="bookmark">SiriProxy Plugins</a> originally appeared on <a href="http://shaiperednik.com">Shai Perednik.com</a> on November 26, 2012.</p>
]]></content:encoded>
			<wfw:commentRss>http://shaiperednik.com/2012/11/siriproxy-plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DPM Reporting Platform &#8211; Get-SQLData.ps1</title>
		<link>http://shaiperednik.com/2012/11/dpm-reporting-platform-get-sqldata-ps1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dpm-reporting-platform-get-sqldata-ps1</link>
		<comments>http://shaiperednik.com/2012/11/dpm-reporting-platform-get-sqldata-ps1/#comments</comments>
		<pubDate>Sat, 24 Nov 2012 16:07:30 +0000</pubDate>
		<dc:creator>Shai Perednik</dc:creator>
				<category><![CDATA[Microsoft Data Protection Manager]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Collector]]></category>
		<category><![CDATA[Data Protection Manager]]></category>
		<category><![CDATA[DPM]]></category>
		<category><![CDATA[GetData]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[System Center Data Protection Manager]]></category>

		<guid isPermaLink="false">http://shaiperednik.com/?p=4155</guid>
		<description><![CDATA[In conjunction with my earlier post outlining the DPM reporting platform, http://shaiperednik.com/2012/11/microsoft-data-protection-manager-enterprise-reporting-platform/,  here is the heart of the tool.  This script does all the collecting of data and exporting it to something usable. Note that an important part of the script is the line commented &#8220;#Get all the DPM servers from the DPMServers table.&#8221; In this [...]]]></description>
				<content:encoded><![CDATA[<p>In conjunction with my earlier post outlining the <a href="http://shaiperednik.com/tag/dpm/" class="st_tag internal_tag" rel="tag" title="Posts tagged with DPM">DPM</a> <a href="http://shaiperednik.com/tag/reporting-platform/" class="st_tag internal_tag" rel="tag" title="Posts tagged with Reporting Platform">reporting platform</a>, <a href="http://shaiperednik.com/2012/11/microsoft-data-protection-manager-enterprise-reporting-platform/">http://shaiperednik.com/2012/11/microsoft-data-protection-manager-enterprise-reporting-platform/</a>,  here is the heart of the tool.  This script does all the collecting of data and exporting it to something usable.</p>
<p>Note that an important part of the script is the line commented &#8220;#Get all the DPM servers from the DPMServers table.&#8221;</p>
<pre class="brush: sql; title: ; notranslate">SELECT * FROM [DtsDpm].[dbo].[DpmServers]</pre>
<p>In this command the script connects to a specified <a href="http://shaiperednik.com/tag/sql/" class="st_tag internal_tag" rel="tag" title="Posts tagged with SQL">SQL</a> instance and retrieves all the DPM servers.  This table is setup with a server name, dpmdb name, ip, and script group.  So you will need to adjust this portion of the script to collect the DPM servers in your environment.</p>
<pre class="brush: powershell; title: ; notranslate">$SourceInstanceName = 'SQLServerWithDPMServersTable'</pre>
<p>&nbsp;</p>
<p>Save the below script as Get-SQLData.ps1.  See the help in the script for how to run it.</p>
<pre class="brush: powershell; title: ; notranslate">&lt;/pre&gt;
&lt;#

.SYNOPSIS

Runs provided SQL query against DPM servers.

.DESCRIPTION

The Script assumes that you have a SQL Database setup with a table with your DPM servers.  Also requires SQL mgmt studio.

The SQL query must include the following.  If omitted you will not know which data belongs to what DPM server.

SERVERPROPERTY('MachineName') as DPMServerName, GetDate() as DateID

.NOTES

Additional Notes, eg

File Name  : Get-SQLData.ps1

Author     : Shai Perednik shaiss@gmail.com

Requires   : <a href="http://shaiperednik.com/tag/powershell/" class="st_tag internal_tag" rel="tag" title="Posts tagged with PowerShell">PowerShell</a> V2

.LINK

A hyper link, eg

http://ShaiPerednik.com

.EXAMPLE

-SQLScriptPath &quot;E:\Scripts\SQL\Get-Extents.sql&quot; -csvFilePath &quot;e:\Scripts\SQL\Results\Get-SQLData.csv&quot; -ScriptGroup 4 -verbose

Will run on ScriptGroup 4 only and enable verbose logging.

.INPUTTYPE

Documentary text, eg:

Input type  [Universal.SolarSystem.Planetary.CommonSense]

Appears in -full

.RETURNVALUE

Documentary Text, e,g:

Output type  [Universal.SolarSystem.Planetary.Wisdom]

Appears in -full

.PARAMETER SQLScriptPath

[Required] The path to the .sql file

Example &quot;E:\Scripts\SQL\Get-Agents2.sql&quot;

.PARAMETER DataType

[Optional] What kind of data is being collected?  This is important as it will determine what SQL table the data goes into.

Possible options are Agents, DiskUsage

If this is omitted, nothing will be inserted into SQL and only a csv will be outputted

.PARAMETER csvFilePath

[Optinal] Path to where to output the .csv file with data returned from the query.

Example &quot;e:\Scripts\SQL\Results\Get-DiskUsage.csv&quot;

If excluded output will be saved to current directory as output.csv

.PARAMETER ScriptGroup

[Optional] Will run the query provided in SQLScriptPath against a group of servers defined in the DPMServersTable.

.NOTES

Script uses SQL Server Management Objects (SMO). SMO is installed with SQL Server Management Studio and is available

as a separate download: http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=ceb4346f-657f-4d28-83f5-aae0c5c83d52

Version History

v0.0.5   - Shai Perednik - Initial Release

Know <a href="http://shaiperednik.com/tag/issues/" class="st_tag internal_tag" rel="tag" title="Posts tagged with Issues">Issues</a>

1.  Invoke-SQLCmd -Inputfile requires a full path including the drive letter.

If full path is not specified, file is looked for in the users document directory, regardless of current path.

2.  No SQL Insert for DiskUsage

3.  Get-RecoveryPoints needs to delete all data in the table first before the insert.

#&gt;

&amp;nbsp;

Param(

[Parameter(Position=0, Mandatory=$true)][String]$SQLScriptPath,

[Parameter(Position=1, Mandatory=$false)][String]$DataType,

[Parameter(Position=2, Mandatory=$false)][String]$csvFilePath,

[Parameter(Position=3, Mandatory=$false)][Int]$ScriptGroup

)

&amp;nbsp;

#Load the SQL PSSnapins

Add-PSSnapin SqlServerCmdletSnapin100 -ErrorAction SilentlyContinue

Add-PSSnapin SqlServerProviderSnapin100 -ErrorAction SilentlyContinue

&amp;nbsp;

#Below trys taken from http://gallery.technet.microsoft.com/ScriptCenter/c193ed1a-9152-4bda-b5c0-acd044e68b2c/  &quot;Add-SqlTable&quot;

try {add-type -AssemblyName &quot;Microsoft.SqlServer.ConnectionInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91&quot; -EA Stop}

catch {add-type -AssemblyName &quot;Microsoft.SqlServer.ConnectionInfo&quot;}

&amp;nbsp;

try {add-type -AssemblyName &quot;Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91&quot; -EA Stop}

catch {add-type -AssemblyName &quot;Microsoft.SqlServer.Smo&quot;}

&amp;nbsp;

#*=============================================================================

#* FUNCTION LISTINGS

#*=============================================================================

# Function: funInsertIntoSQL

# Created: [10/22/2012]

# Author: Shai Perednik

# Arguments:

# =============================================================================

# Purpose: Runs provided query against SQL

#

#

# =============================================================================

&amp;nbsp;

Function funInsertIntoSQL

{

Param ([string]$query, [int]$ResultsCount, [string]$SQLServerInstanceName, [int]$i)

Write-Verbose -Message &quot;Runing query $query&quot;

Write-Verbose -Message &quot;Inserting record $i of $ResultsCount&quot;

$InsertResults = Invoke-Sqlcmd -Query $query -ServerInstance $SQLServerInstanceName

$ResultsRemaining = $ResultsCount - $i

Write-Verbose -Message &quot;$ResultsRemaining records remaining to insert&quot;

}

&amp;nbsp;

####________________End Functions________________####

&amp;nbsp;

####________________Start Script________________####

&amp;nbsp;

#Get all the DPM servers from the DPMServers table.

$SourceInstanceName = 'SQLServerWithDPMServersTable'

if ($ScriptGroup) {

$query = &quot;SELECT * FROM [msdbdpm].[dbo].[DpmServers] WHERE [ScriptGroup] = $ScriptGroup&quot;

} else {

$query = &quot;SELECT * FROM [msdbdpm].[dbo].[DpmServers]&quot;

}

$instanceNameList = Invoke-Sqlcmd -Query $query -ServerInstance $SourceInstanceName

&amp;nbsp;

$query = get-content $SQLScriptPath

$results = @()

$i = 1

&amp;nbsp;

foreach($instanceName in $instanceNameList)

{

$DPMServerName = $instanceName.DpmServer

#check if host is alive first before quering it's SQL.

write-verbose &quot;Pinging $DPMServerName before running SQL on it&quot;

if (test-connection -computername $DPMServerName -quiet -Count 1)

{

$instanceName = $instanceName.DpmServer + &quot;\&quot; + $instanceName.sqlinstancename

write-verbose -Message &quot;Executing query against server: $instanceName&quot;

write-verbose -Message &quot;Query $Query&quot;

$cmd= Invoke-Sqlcmd -InputFile $SQLScriptPath -ServerInstance $instanceName -QueryTimeout 5

if ($cmd -ne $null) {

$results += $cmd

}

}

}

&amp;nbsp;

if ($csvFilePath) {

# Output to CSV if CSV path provided

write-verbose &quot;Saving Query Results in CSV format to $csvFilePath...&quot;

$results | export-csv  $csvFilePath -NoTypeInformation

} else{

# Output to output.csv to current directory since no custom path was provided

write-verbose &quot;Saving Query Results in CSV format to output.csv...&quot;

$results | export-csv  output.csv -NoTypeInformation

}

&amp;nbsp;

#if a $DataType is provided this insert into SQL, otherwise skip over this step.

if ($DataType){

$ResultsCount = $results.Count

#Use select case to determine where/how to insert the data

switch ($DataType) {

&quot;Agent&quot; {

$QueryTable = 'vm_DPM_Agents'

Write-Verbose -Message &quot;Writing Data to $QueryTable on $instanceName&quot;

foreach ($item in $results) {

$query = &quot;INSERT INTO [msdbdpm].[dbo].[$QueryTable]`

([AgentID]`

,[DPMServerName]`

,[DateID]`

,[ServerName]`

,[Version])`

VALUES`

(NewID()`

,`'&quot; + $item.DPMServerName + &quot;`'`

,`'&quot; + $item.DateID + &quot;`'`

,`'&quot; + $item.ServerName + &quot;`'`

,`'&quot; + $item.Version + &quot;`')`

GO&quot;

funInsertIntoSQL -query $query -ResultsCount $ResultsCount -SQLServerInstanceName $SourceInstanceName -i $i

#                                                             Write-Verbose -Message &quot;Runing query $query&quot;

#                                                             Write-Verbose -Message &quot;Inserting record $i of $ResultsCount&quot;

#                                                             $InsertResults = Invoke-Sqlcmd -Query $query -ServerInstance $SourceInstanceName

#                                                             $ResultsRemaining = $ResultsCount - $i

#                                                             Write-Verbose -Message &quot;$ResultsRemaining records remaining to insert&quot;

$i++

}

break

}

&quot;DiskUsage&quot; {

break

}

&quot;RecoverPoints&quot; {

#format should be &quot;RecoveryPointID&quot;,&quot;DPMServerName&quot;,&quot;DateID&quot;,&quot;DatasourceName&quot;,&quot;serverName1&quot;,&quot;NewestRecoveryPoint&quot;,&quot;OldestRecoveryPoint&quot;,&quot;RecoveryPoints&quot;,&quot;ServerId&quot;,&quot;ServerName&quot;,&quot;NetbiosName&quot;,&quot;DomainName&quot;,&quot;IsRG&quot;

#NewID(),&quot;DPMServerA&quot;,&quot;10/22/2012 5:05:06 PM&quot;,&quot;C:\&quot;,&quot;ClientServerA.example.com&quot;,&quot;10/20/2012 5:06:22 PM&quot;,&quot;9/23/2012 5:06:57 AM&quot;,&quot;55&quot;,&quot;944d9cca-6995-4f7d-97bc-040baa454dd4&quot;,&quot;ClientServerA.example.com&quot;,&quot;ClientServerA&quot;,&quot;example.com&quot;,&quot;False&quot;

#insert into vw_DPM_RecoveryPointDisk values(NewID(),'DPMServerA','10/22/2012 11:42:44 PM','C:\','ClientServerA.example.com','10/20/2012 5:06:22 PM','9/23/2012 5:06:57 AM','55','944d9cca-6995-4f7d-97bc-040baa454dd4','ClientServerA.example.com','ClientServerA','example.com','False')

$QueryTable = 'vw_DPM_RecoveryPointDisk'

Write-Verbose -Message &quot;Writing Data to $QueryTable on $instanceName&quot;

foreach ($item in $results) {

$query =&quot;INSERT INTO [msdbdpm].[dbo].[$QueryTable]`

([RecoveryPointID]`

,[DPMServerName]`

,[DateID]`

,[DatasourceName]`

,[serverName1]`

,[NewestRecoveryPoint]`

,[OldestRecoveryPoint]`

,[RecoveryPoints]`

,[ServerId]`

,[ServerName]`

,[NetbiosName]`

,[DomainName]`

,[IsRG])`

VALUES`

(NewID()`

,`'&quot; + $item.DPMServerName + &quot;`'`

,`'&quot; + $item.DateID + &quot;`'`

,`'&quot; + $item.DatasourceName + &quot;`'`

,`'&quot; + $item.serverName1 + &quot;`'`

,`'&quot; + $item.NewestRecoveryPoint + &quot;`'`

,`'&quot; + $item.OldestRecoveryPoint + &quot;`'`

,`'&quot; + $item.RecoveryPoints + &quot;`'`

,`'&quot; + $item.ServerId + &quot;`'`

,`'&quot; + $item.ServerName + &quot;`'`

,`'&quot; + $item.NetbiosName + &quot;`'`

,`'&quot; + $item.DomainName + &quot;`'`

,`'&quot; + $item.IsRG + &quot;`')`

&quot;

funInsertIntoSQL -query $query -ResultsCount $ResultsCount -SQLServerInstanceName $SourceInstanceName -i $i

#                                                                             Write-Verbose -Message &quot;Runing query $query&quot;

#                                                                             Write-Verbose -Message &quot;Inserting record $i of $ResultsCount&quot;

#                                                                             $InsertResults = Invoke-Sqlcmd -Query $query -ServerInstance $SourceInstanceName

#                                                                             $ResultsRemaining = $ResultsCount - $i

#                                                                             Write-Verbose -Message &quot;$ResultsRemaining records remaining to insert&quot;

$i++

}

break

}

default {

Write-Host &quot;DataType is Undifined&quot;

break

}

}

}

####________________End Script________________####
&lt;pre&gt;
</pre>
<p><a href="http://shaiperednik.com/2012/11/dpm-reporting-platform-get-sqldata-ps1/" rel="bookmark">DPM Reporting Platform &#8211; Get-SQLData.ps1</a> originally appeared on <a href="http://shaiperednik.com">Shai Perednik.com</a> on November 24, 2012.</p>
]]></content:encoded>
			<wfw:commentRss>http://shaiperednik.com/2012/11/dpm-reporting-platform-get-sqldata-ps1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Data Protection Manager Enterprise Reporting Platform</title>
		<link>http://shaiperednik.com/2012/11/microsoft-data-protection-manager-enterprise-reporting-platform/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=microsoft-data-protection-manager-enterprise-reporting-platform</link>
		<comments>http://shaiperednik.com/2012/11/microsoft-data-protection-manager-enterprise-reporting-platform/#comments</comments>
		<pubDate>Sat, 24 Nov 2012 15:32:25 +0000</pubDate>
		<dc:creator>Shai Perednik</dc:creator>
				<category><![CDATA[Microsoft Data Protection Manager]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Data Collector]]></category>
		<category><![CDATA[DPM]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[Reporting Platform]]></category>
		<category><![CDATA[System Center Data Protection Manager]]></category>

		<guid isPermaLink="false">http://shaiperednik.com/?p=4151</guid>
		<description><![CDATA[After working with DPM for the last 2 years I decided to put together this framework for collecting data across DPM servers in an enterprise environment. At the heart of the tool is a PowerShell based script that runs a provided SQL script against a set of servers.  I will post this this script as [...]]]></description>
				<content:encoded><![CDATA[<div>
<p>After working with <a href="http://shaiperednik.com/tag/dpm/" class="st_tag internal_tag" rel="tag" title="Posts tagged with DPM">DPM</a> for the last 2 years I decided to put together this framework for collecting data across <a href="http://shaiperednik.com/tag/dpm/" class="st_tag internal_tag" rel="tag" title="Posts tagged with DPM">DPM</a> servers in an <a href="http://shaiperednik.com/tag/enterprise/" class="st_tag internal_tag" rel="tag" title="Posts tagged with Enterprise">enterprise</a> environment. At the heart of the tool is a <a href="http://shaiperednik.com/tag/powershell/" class="st_tag internal_tag" rel="tag" title="Posts tagged with PowerShell">PowerShell</a> based script that runs a provided <a href="http://shaiperednik.com/tag/sql/" class="st_tag internal_tag" rel="tag" title="Posts tagged with SQL">SQL</a> script against a set of servers.  I will post this this script as others I have shortly.  Look for the &#8220;<a href="http://shaiperednik.com/tag/reporting-platform/" class="st_tag internal_tag" rel="tag" title="Posts tagged with Reporting Platform">Reporting Platform</a>&#8221; tag.</p>
<p>Here is a link to the document in docx format thats pasted below.</p>
<p><a href="http://shaiperednik.com/wp-content/uploads/2012/11/Reporting-Platform.docx">http://shaiperednik.com/wp-content/uploads/2012/11/Reporting-Platform.docx</a></p>
<p>Table of Contents</p>
<p>1                 Introduction. 3</p>
<p>2                 Terminology. 3</p>
<p>2.1        Recovery Point Objective (RPO) 3</p>
<p>2.2        Recovery Time Objective (RTO) 3</p>
<p>2.3        <a href="http://shaiperednik.com/tag/data-protection-manager/" class="st_tag internal_tag" rel="tag" title="Posts tagged with Data Protection Manager">Data Protection Manager</a> (DPM) 3</p>
<p>2.4        Data Backup. 3</p>
<p>2.5        Data Archive. 3</p>
<p>2.6        Long Term Protection (LT) 3</p>
<p>2.7        Short Term Protection (ST) 3</p>
<p>2.8        Protection Group (PG) 3</p>
<p>2.9        SQL Server Reporting Services (SSRS) 4</p>
<p>2.10     Internet Information Services (IIS) 4</p>
<p>2.11     Data Protection Manager Database (DPMDB) 4</p>
<p>2.12     Datasource. 4</p>
<p>2.13     PowerGUI 4</p>
<p>3                 Architecture. 4</p>
<p>3.1        Servers required. 4</p>
<p>3.1.1       SQL Server 5</p>
<p>3.1.2       SSRS. 5</p>
<p>3.1.3       Web Server 5</p>
<p>3.1.4       <a href="http://shaiperednik.com/tag/collector/" class="st_tag internal_tag" rel="tag" title="Posts tagged with Collector">Collector</a> Server 5</p>
<p>3.1.5       Management Server 5</p>
<p>3.2        Components 5</p>
<p>3.2.1       Data Collectors 5</p>
<p>3.2.2       Data Collection Queries 6</p>
<p>3.2.3       Reports 6</p>
<p>3.2.4       Scheduled Tasks 7</p>
<p>3.2.5       Forms 7</p>
<p>3.2.6       SQL Databases 8</p>
<p>3.2.7       SQL Tables 8</p>
<p>3.3        Requirements/Prerequisites 8</p>
<p>3.3.1       Active Directory. 8</p>
<p>3.3.2       SQL Server Authentication. 8</p>
<p>3.3.3       Firewall/Security Rules 8</p>
<p>4                 Deployment 9</p>
<p>4.1        Server setup. 9</p>
<p>4.1.1       SQL Server 9</p>
<p>4.1.2       SSRS. 9</p>
<p>4.1.3       Web Server 9</p>
<p>4.1.4       Collector Server 9</p>
<p>4.1.5       Management Server 9</p>
<p>5                 Appendix. 10</p>
<p>5.1        Notes 10</p>
<p>5.1.1       Versioning. 10</p>
<p>5.1.2       Next Phase. 10</p>
<p>5.2        ToDo’s 10</p>
<p>5.2.1       Create Deployment package. 10</p>
<p>5.2.2       Complete Deployment Section. 10</p>
<p>Table of Figures</p>
<p>Table 1 – DPM Reporting Platform Server Roles 5</p>
<p>Table 2 &#8211; Scheduled intervals for data collectors 7</p>
<p>Table 3 – Firewall rules for SQL communication. 9</p>
<h1></h1>
<p><br clear="all" /></p>
<h1>1         Introduction</h1>
<p>The purpose of this document is to detail the components and deployment of the Microsoft Data Protection Manager Reporting Platform.</p>
<h1>2         Terminology</h1>
<p>In this document the following abbreviations, acronyms and terminology will be used:</p>
<h2>2.1       Recovery Point Objective (RPO)</h2>
<p>This refers to the point in time that the application should be recovered to.  In other words, how much data can be lost?  If the data is very volatile the RPO might be 15 minutes but if the data changes infrequently the RPO might be 24 hours.</p>
<h2>2.2       Recovery Time Objective (RTO)</h2>
<p>This refers to amount of time permitted to recover the data or system.  If the system is one of 5 systems that are load balanced the RTO might be 8 hours, but if the system or data is critical the RTO might only be 1 hour.</p>
<h2>2.3       Data Protection Manager (DPM)</h2>
<p>This is the backup software of choice, the current version is 2012 and the vendor is Microsoft.</p>
<h2>2.4       Data Backup</h2>
<p>Though a common term it is important to understand that in this document Backup or Data Backup refer to protecting data currently stored and accessible on systems.  This does not refer to data that needs to be retained for legal or other purposes but that does not reside on any systems.</p>
<h2>2.5       Data Archive</h2>
<p>In this document Archive, Archival etc refers to data that must be retained for longer than 6 months as defined by the business.  This might be backups taken at after year end procedures, Audit files that have been completed or eRooms that are being removed.</p>
<h2>2.6       Long Term Protection (LT)</h2>
<p>This term is pertinent refers to backups that are taken to tape in MS DPM, and also at times refers to backup jobs being a “long term protection” job or “LT” job, which simply means that the backup job is being done to tape.</p>
<h2>2.7       Short Term Protection (ST)</h2>
<p>This term is pertinent refers to backups that are taken to disk in MS DPM, and also at times refers to backup jobs being a “short term protection” job or “ST” job, which simply means that the backup job is being done to disk.</p>
<h2>2.8       Protection Group (PG)</h2>
<p>This term is pertinent to MS DPM 2010, and is the name given to the traditional “Backup Job” it is a collection of servers, files selections on those servers, and polices that are used to back up a given set of data.</p>
<h2>2.9       SQL Server Reporting Services (SSRS)</h2>
<p>A server-based report generation software system from Microsoft.  Administered via a web interface ,it can be used to prepare and deliver a variety of interactive and printed reports.</p>
<h2>2.10  Internet Information Services (IIS)</h2>
<p>Web server application and set of feature extension modules created by Microsoft for use with Microsoft Windows . IIS 7.5 supports HTTP, HTTPS, FTP, FTPS, SMTP and NNTP. It is an integral part of the Windows Server family of products, as well as certain editions of Windows XP, Windows Vista and Windows 7. IIS is not turned on by default when Windows is installed.</p>
<h2>2.11  Data Protection Manager Database (DPMDB)</h2>
<p>This is the default install database holding all DPM data.  While there is no published schema, the data is available and can be mined.</p>
<h2>2.12  Datasource</h2>
<p>This could be a:</p>
<ul>
<li>SQL Database</li>
<li>SharePoint configuration Database and it’s content databases</li>
<li>Windows Share</li>
<li>Local/SAN File system Volume</li>
<li>System State</li>
<li>Bare Metal Backup</li>
</ul>
<h2>2.13  PowerGUI</h2>
<p>Not a requirement but a recommended tool for developing PowerShell scripts.  Available at http://powergui.org/</p>
<h1>3         Architecture</h1>
<p>This section details the architecture of the reporting platform.</p>
<h2>3.1       Servers required</h2>
<p>These are servers that are required for the reporting platform.</p>
<p>Table 1 – DPM Reporting Platform Server Roles</p>
<table style="width: 585px;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="143">
<p align="center"><strong>Role</strong></p>
</td>
<td valign="top" width="124">
<p align="center"><strong>Suggested Name</strong></p>
</td>
<td valign="top" width="115">
<p align="center"><strong>Suggested IP</strong></p>
</td>
<td valign="top" width="99">
<p align="center"><strong>Physical/VM</strong></p>
</td>
<td valign="top" width="105">
<p align="center"><strong>CPU/Memory</strong></p>
</td>
</tr>
<tr>
<td valign="top" width="143">
<p align="center">SQL Server</p>
</td>
<td valign="top" width="124">
<p align="center">SERVER5</p>
</td>
<td valign="top" width="115">
<p align="center">xxx.xxx.xxx.105</p>
</td>
<td valign="top" width="99">
<p align="center">VM</p>
</td>
<td valign="top" width="105">
<p align="center">2/4</p>
</td>
</tr>
<tr>
<td valign="top" width="143">
<p align="center">Collector Server</p>
</td>
<td valign="top" width="124">
<p align="center">SERVER4</p>
</td>
<td valign="top" width="115">
<p align="center">xxx.xxx.xxx.104</p>
</td>
<td valign="top" width="99">
<p align="center">VM</p>
</td>
<td valign="top" width="105">
<p align="center">1/2</p>
</td>
</tr>
<tr>
<td valign="top" width="143">
<p align="center">SSRS Server</p>
</td>
<td valign="top" width="124">
<p align="center">SERVER3</p>
</td>
<td valign="top" width="115">
<p align="center">xxx.xxx.xxx.103</p>
</td>
<td valign="top" width="99">
<p align="center">VM</p>
</td>
<td valign="top" width="105">
<p align="center">1/2</p>
</td>
</tr>
<tr>
<td valign="top" width="143">
<p align="center">Management Server</p>
</td>
<td valign="top" width="124">
<p align="center">SERVER2</p>
</td>
<td valign="top" width="115">
<p align="center">xxx.xxx.xxx.102</p>
</td>
<td valign="top" width="99">
<p align="center">VM</p>
</td>
<td valign="top" width="105">
<p align="center">1/2</p>
</td>
</tr>
<tr>
<td valign="top" width="143">
<p align="center">Web Server</p>
</td>
<td valign="top" width="124">
<p align="center">SERVER1</p>
</td>
<td valign="top" width="115">
<p align="center">xxx.xxx.xxx.101</p>
</td>
<td valign="top" width="99">
<p align="center">VM</p>
</td>
<td valign="top" width="105">
<p align="center">1/2</p>
</td>
</tr>
</tbody>
</table>
<h3>3.1.1    SQL Server</h3>
<p>Server should be running Windows Server 2008 Standard R2 SP1 and SQL Server Standard with the latest service pack at minimum.</p>
<p>Server’s role is to serve the SQL databases required to make the platform operational.</p>
<p>Optional, at a later time should resources constraints become an issue on this server, a secondary SQL server may be added to serve as the data warehouse for historical data.</p>
<h3>3.1.2    SSRS</h3>
<p>Server should be running Windows Server 2008 Standard R2 SP1 at a minimum.</p>
<p>Server’s role will be to display reports using SSRS.</p>
<h3>3.1.3    Web Server</h3>
<p>Server should be running Windows Server 2008 Standard R2 SP1 at a minimum.</p>
<p>Server’s role is to serve the reports generated from the SQL data and to serve any custom forms or reports that our outside the scope of SSRS.</p>
<h3>3.1.4    Collector Server</h3>
<p>Server should be running Windows Server 2008 Standard R2 SP1 at a minimum.</p>
<p>Server’s role will be to run collection scripts against DPM servers and either output that data into SQL, using the SQL server described in this section, or to a flat file on a local or remote file system.</p>
<h3>3.1.5    Management Server</h3>
<p>Server should be running Windows Server 2008 Standard R2 SP1 and latest Visual Studio suite at a minimum.</p>
<p>This server’s role is to hold the development tools needed to build/test new scripts or any other tools.  It will also serve as a central location to administer and monitor the other servers in the platform listed in this section.</p>
<h2>3.2       Components</h2>
<p>These are the components in the reporting platform.</p>
<h3>3.2.1    Data Collectors</h3>
<p>Data collectors should be written as PowerShell scripts that can execute a supplied SQL query against a collection of DPM servers.</p>
<p><em>*For data collection scheduling see “</em><em>Scheduled Tasks</em><em>” section </em><em>3.2.4</em><em> on page </em><em>10</em><em>.</em></p>
<h3>3.2.2    Data Collection Queries</h3>
<p>SQL queries validated against individual DPMDB databases should be saved as .sql files and supplied to the <a href="http://shaiperednik.com/tag/data-collector/" class="st_tag internal_tag" rel="tag" title="Posts tagged with Data Collector">data collector</a> script.</p>
<p>It is vital that all SQL SELECT queries begin with the statement below.  This will ensure that all data collected from multiple servers is easily identified both in a flat file or when added to the SQL database.</p>
<p>SELECT SERVERPROPERTY(&#8216;MachineName&#8217;) as DPMServerName</p>
<p>,GetDate() as DateID</p>
<p>Some basic required queries are:</p>
<h4>3.2.2.1    Agent Information</h4>
<p>Collects all data from [DPMDB].[dbo].[vw_DPM_Agents]</p>
<h4>3.2.2.2    Disk Information</h4>
<p>Collects all data from [DPMDB].[dbo].[tbl_SPM_Disk]</p>
<h4>3.2.2.3    Recovery Points</h4>
<p>Collects all data from [DPMDB].[dbo].[vw_DPM_RecoveryPointDisk]</p>
<p>Important points when collecting data from this SQL view.  This is a supplied view with DPM and has some caveats.</p>
<ul>
<li>CASE WHEN DatasourceName = &#8216;Non VSS DataSource Writer&#8217; THEN &#8216;System Protection&#8217; ELSE DatasourceName END</li>
<li>WHERE ErrorCode=0  and Creationtime &gt; dateadd(month, -1,getdate()) and status=2<br />
Creationtime is set here as we want to collect the total recovery points and the latest data for the last 30 days.</li>
<li>GROUP BY ServerName,DatasourceName<br />
This allows for a rollup of the data.</li>
</ul>
<p>This is not the ideal collector due to the caveats above and a custom one should be created to collect all actual recovery points as this table also includes failed recovery point attempts which can throw of data.</p>
<h4>3.2.2.4    Extents</h4>
<p>Collects all data from [DPMDB].[dbo].[tbl_SPM_Extent]</p>
<h4>3.2.2.5    Replica Disk Usage</h4>
<p>Collects all data from [DPMDB].[dbo].[vw_DPM_Disk_Usage_Replica]</p>
<h3>3.2.3    Reports</h3>
<p>Reports should be created using SSRS if possible.  Different reports should be created to target different audiences.</p>
<p>Various reports should be created at specific target groups.</p>
<h4>3.2.3.1    Application owners/customers</h4>
<p>These reports should be easily read so that application owners can easily monitor their server’s backup health.</p>
<h5>3.2.3.1.1     Backup Health Report last 24 hours</h5>
<p>Report would allow the user to select and subscribe to specific filters:</p>
<ul>
<li>Application</li>
<li>Lifecycle</li>
<li>Physical Location</li>
<li>Success/Fail or both</li>
</ul>
<h5>3.2.3.1.2     Datasource health report</h5>
<p>User would be able to drill down to a datasource level and see available recovery points for that datasource.</p>
<p>Optional, using the Web Server and forms component the user would then be able to select this datasource, or specific data under it, for restoration.</p>
<h4>3.2.3.2    Management</h4>
<p>Reports would be more metrics based with historical data and future projections.  The goal is to give management a high level insight into the environments health, requirements, and growth.  This could also be used by other teams and administrators to proactively mitigate possible outages or failures due to current unforeseen problems.</p>
<h4>3.2.3.3    Administrators</h4>
<p>These reports would give the DPM administrators insights into the environments health and would be based closely on the collectors above with some joined reports to bring specific data into correlation.</p>
<p>Additional reports could be created to present a dashboard style view to help guide administrators to remediating problematic areas first.</p>
<h3>3.2.4    Scheduled Tasks</h3>
<p>Scheduled tasks will need to be created on the Data Collector server to run the specified queries at specific schedules.  These tasks should be setup to use a service account.</p>
<p>Different data collectors will need to run at different intervals based on the “Data Collection Queries” in section 3.2.2 on page 8.  Some guidance on collection intervals below:</p>
<p>Table 2 &#8211; Scheduled intervals for data collectors</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="319"><strong>Collector</strong></td>
<td valign="top" width="319"><strong>Interval (Every n hours)</strong></td>
</tr>
<tr>
<td valign="top" width="319"><strong>Agent Information</strong></td>
<td valign="top" width="319">12 (= twice per day)</td>
</tr>
<tr>
<td valign="top" width="319"><strong>Disk Information</strong></td>
<td valign="top" width="319">12 (= twice per day)</td>
</tr>
<tr>
<td valign="top" width="319"><strong>Recovery Points</strong></td>
<td valign="top" width="319">1 (=hourly)</td>
</tr>
<tr>
<td valign="top" width="319"><strong>Extents</strong></td>
<td valign="top" width="319">168 (=once a week)</td>
</tr>
<tr>
<td valign="top" width="319"><strong>Replica Disk Usage</strong></td>
<td valign="top" width="319">24 (= once per day)</td>
</tr>
</tbody>
</table>
<h3>3.2.5     Forms</h3>
<p>Forms can be created for any action to be taken based on collected data.</p>
<p>An example would be a form that allows submitting a restoration request for specific data with a known available recovery point.</p>
<h3>3.2.6    SQL Databases</h3>
<p>The SQL Databases should be separated.</p>
<h4>3.2.6.1    Platform Database:  Holds tables required for the operation and function of the reporting platform</h4>
<h4>3.2.6.2    Data Collection Database: Holds all collected data.</h4>
<h3>3.2.7    SQL Tables</h3>
<p>SQL tables are not limited but should at minimum should be:</p>
<h4>3.2.7.1    Platform Database</h4>
<h5>3.2.7.1.1     DPM Servers</h5>
<p>Table should provide all the information required to access DPM servers and collect data from them:</p>
<ul>
<li>Server Name</li>
<li>Server IP</li>
<li>DPM SQL Instance Name</li>
<li>Grooming period
<ul>
<li>aka how long should collected data be retained</li>
<li>This value would act as a server level default and can be overridden by a global default or a specified value provided by a script.</li>
</ul>
</li>
</ul>
<h4>3.2.7.2    Data Collection Database</h4>
<p>Tables in this database should mimic the tables they collect data from on the individual DPM server.  This allows for easy identification at a later point of collected data.</p>
<p>All calculations and data manipulation should be done under views.  This will easy any future updates made to DPM database and therefore any collected data.</p>
<h2>3.3       Requirements/Prerequisites</h2>
<h3>3.3.1    Active Directory</h3>
<p>A service account will need to be created for the Data Collectors to run under.</p>
<h3>3.3.2    SQL Server Authentication</h3>
<p>All DPM servers must be reconfigured to allow read-only login to SQL for the service account created in section 3.3.1.</p>
<p>The SQL Server detailed in section 3.1.1, “SQL Server”, should allow read/write access to the service account created in section 3.3.1.</p>
<h3>3.3.3    Firewall/Security Rules</h3>
<p>Per the Microsoft support article KB287932, <a href="http://support.microsoft.com/kb/287932">http://support.microsoft.com/kb/287932</a>, port 1433 must be opened to allow remote communication.</p>
<p>Port 1433 should be opened per the table below:</p>
<p>Table 3 – Firewall rules for SQL communication</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="215"><strong>Source</strong></td>
<td valign="top" width="229"><strong>Destination</strong></td>
</tr>
<tr>
<td valign="top" width="215"><strong>Collector Server</strong></td>
<td valign="top" width="229">DPM Servers</td>
</tr>
<tr>
<td valign="top" width="215"><strong>Collector Server</strong></td>
<td valign="top" width="229">SQL Server</td>
</tr>
<tr>
<td valign="top" width="215"><strong>SSRS</strong></td>
<td valign="top" width="229">SQL Server</td>
</tr>
<tr>
<td valign="top" width="215"><strong>Management Server</strong></td>
<td valign="top" width="229">SQL Server</td>
</tr>
<tr>
<td valign="top" width="215"><strong>Web Server</strong></td>
<td valign="top" width="229">SQL Server</td>
</tr>
</tbody>
</table>
<h1></h1>
<h1>4         Deployment</h1>
<p>This section details the deployment of the reporting platform.  This section will be developed as the tool is initial deployed.</p>
<h2>4.1       Server setup</h2>
<p>Follow “Table 1 – DPM Reporting Platform Server Roles” on page 8 and deploy those servers with the suggested settings in the tables.  Note that these are minimum guidelines and should be changed according to the environment</p>
<h3>4.1.1    SQL Server</h3>
<ol>
<li>Install SQL 2008 standard or enterprise.  Do not install SSRS</li>
<li>If using sample scripts provided in the deployment package, run provided queries to create the necessary tables.</li>
<li>SQL service should be set to run as service account setup in section 3.3.1, “Active Directory”</li>
<li>Install SSRS from SQL 2008 Installer</li>
<li>Install IIS</li>
<li>Setup scheduled tasks per the intervals defined in Table 2 “- Scheduled intervals for data collectors” on page 11.</li>
<li>Copy any sample scripts from deployment package.</li>
<li>Install DPM Management Console.  Will be used for PowerShell collectors are written utilizing DPM Cmdlets</li>
<li>Install SQL Management Studio</li>
<li>Install DPM Management Console.  Will be used for PowerShell collectors are written utilizing DPM Cmdlets</li>
<li>Install PowerGUI<em> (optional)</em></li>
</ol>
<h3>4.1.2    SSRS</h3>
<h3>4.1.3    Web Server</h3>
<h3>4.1.4    Collector Server</h3>
<h3>4.1.5    Management Server</h3>
<h1>5         Appendix</h1>
<h2>5.1       Notes</h2>
<h3>5.1.1    Versioning</h3>
<p>Specific software versions are mentioned throughout the document and may be substituted at deployment time for the latest version available.  Using the latest version would require an update to this document and notations of any deviations from the version used, mentioned below.</p>
<h3>5.1.2    Next Phase</h3>
<p>While automation using Orchestrator, PowerShell, or SCOM can be built upon this reporting tool, it is outside the scope of this document at the current revision.</p>
<h2>5.2       ToDo’s</h2>
<h3>5.2.1    Create Deployment package</h3>
<p>This package should include:</p>
<ul>
<li>Sample .sql collectors described in section 3.2.2, “Data Collection Queries”, on page 9.</li>
<li>CREATE TABLE queries needed for the “Data Collection Queries” insertion of records into the SQL Server.</li>
<li>Sample PowerShell scripts used to collect data from single servers</li>
<li>Sample PowerShell script to run a .ps1 file against multiple DPM servers</li>
</ul>
<h3>5.2.2    Complete Deployment Section</h3>
</div>
<p><a href="http://shaiperednik.com/2012/11/microsoft-data-protection-manager-enterprise-reporting-platform/" rel="bookmark">Microsoft Data Protection Manager Enterprise Reporting Platform</a> originally appeared on <a href="http://shaiperednik.com">Shai Perednik.com</a> on November 24, 2012.</p>
]]></content:encoded>
			<wfw:commentRss>http://shaiperednik.com/2012/11/microsoft-data-protection-manager-enterprise-reporting-platform/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#8217;s Wrong with Microsoft Data Protection Manager?</title>
		<link>http://shaiperednik.com/2012/11/whats-wrong-with-microsoft-data-protection-manager/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=whats-wrong-with-microsoft-data-protection-manager</link>
		<comments>http://shaiperednik.com/2012/11/whats-wrong-with-microsoft-data-protection-manager/#comments</comments>
		<pubDate>Thu, 22 Nov 2012 14:30:09 +0000</pubDate>
		<dc:creator>Shai Perednik</dc:creator>
				<category><![CDATA[Microsoft Data Protection Manager]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[DPM]]></category>
		<category><![CDATA[Faults]]></category>
		<category><![CDATA[Issues]]></category>
		<category><![CDATA[Resolution]]></category>

		<guid isPermaLink="false">http://shaiperednik.com/?p=4117</guid>
		<description><![CDATA[Below is the list I&#8217;ve put together of what I believe is wrong with DPM along with some suggestions on how I think they could be fixed. Intro While SCOM 2012 allows you to monitor and run commands against these hosts, the focus is still on managing individual DPM servers from a central location. IE [...]]]></description>
				<content:encoded><![CDATA[<p><span style="font-family: helvetica;">Below is the list I&#8217;ve put together of what I believe is wrong with <a href="http://shaiperednik.com/tag/dpm/" class="st_tag internal_tag" rel="tag" title="Posts tagged with DPM">DPM</a> along with some suggestions on how I think they could be fixed.</span></p>
<h1>Intro</h1>
<p><span style="font-family: helvetica;">While SCOM 2012 allows you to monitor and run commands against these hosts, the focus is still on managing individual DPM servers from a central location. IE if a backup fails on server A and another B, they don&#8217;t necessarily have any correlation and have to be managed separately.</span></p>
<p><span style="font-family: helvetica;">The central console is designed for monitoring and not much else. In an <a href="http://shaiperednik.com/tag/enterprise/" class="st_tag internal_tag" rel="tag" title="Posts tagged with Enterprise">enterprise</a> solution the central console should manage and schedule the job to most efficiently adapt the load on the environment. It should also be able to manage storage as a collective whole and reallocate jobs to where resources are available. In short, distributed backups should fashion similar to distributed virtualization where there is no single point of failure and the environment is adaptable to increased load.</span></p>
<h2><span style="font-family: helvetica;">Workflow</span></h2>
<p><span style="font-family: helvetica;">Managing 8000 datasources is difficult at best. Even worse when filtering the failures, even at 5% is still 400 failures to manage. Datasources are often failures on their own and cannot be correlated to other failures. Each failure must be worked out individually and each one requires deep knowledge of DPM and every underlying component that plays in the backup procedure.</span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">Diagram specific steps to be taken and logic paths to resolve common problems. This has been completed and aids new engineers in troubleshooting DPM. However, not all steps can be outlined and require a deeper logic process.</span></p>
<h2><span style="font-family: helvetica;">Monitoring</span></h2>
<h3><span style="font-family: helvetica;">Problem</span></h3>
<p><span style="font-family: helvetica;">Monitoring is available on a per server basis where each must be individually managed, configured, and analyzed. SCOM2012 provides a central collection of alerts and states for monitoring, however, the views built in are not practical for our size of environment and will have to be heavily customized for internal administration. The focus on monitoring is still on a per server basis, where the admin must focus on <a href="http://shaiperednik.com/tag/issues/" class="st_tag internal_tag" rel="tag" title="Posts tagged with Issues">issues</a> that may be affecting an entire server.</span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">The SCOM 2012 console will help in monitoring the overall environment, but many custom views will have to be created to properly monitor various aspects of the environment. Customized dashboards should be setup for each DPM engineer allowing to focus on their area of responsibility.</span></p>
<h2><span style="font-family: helvetica;">Reporting</span></h2>
<h3><span style="font-family: helvetica;">Problem</span></h3>
<p><span style="font-family: helvetica;">Reporting is available on a per server basis where each must be individually managed, configured, and analyzed. </span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;"> Today we rely on scripts developed internally to collect data from all DPM servers and publish reports the application teams use to track there backups. However, due to firewall rules across domains we are unable to collect data on non-trusted domains. We need to get these firewall rules and ports opened so that we can collect data across all environments. We need to put together a detailed list of reports and their fields that we need to improve administration of DPM and then develop those reports.</span></p>
<h2><span style="font-family: helvetica;">Capacity Planning</span></h2>
<h3><span style="font-family: helvetica;">Problem</span></h3>
<p><span style="font-family: helvetica;">DPM has no built in tools to forest usage and analyze historical data. While some built in reports provide current and data dated few weeks back this lacks in two areas. One, the data is collected in each individual DPM server, and two does not have any manipulation tools for forecasting and trending data.</span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">I will focus on this area an evaluate the tools we have in place that we can make better projections and plan our build outs more efficiently. Possibility of using Metreon Athene.<br />
</span></p>
<h2><span style="font-family: helvetica;">Self Healing of Failed Backups</span></h2>
<p><span style="font-family: helvetica;">We have consistently found that running a scheduled consistency check address inconsistent backups, yet the built in auto consistency check runs as soon as the DataSource becomes inconsistent. In many cases what caused the inconsistency is still an issue and simply waiting 30 min before running the consistency check would bring the DataSource on track. Microsoft DPM has shared a registry hack that will change this behavior to multiple consistency checks after a failure, but has warned us that this comes at a tedious hit to performance.</span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">We will test out the affects of the registry hack provided by Microsoft as an initial option. However, DPM will need to improve it&#8217;s failure handling to improve this aspect. DPM should be able to query for VSS writer health, ping for connectivity, and other basic triage steps before requiring manual intervention. When a DPM engineer is engaged, we should be confident that DPM has exhausted all possible automated methods and be provided with a simple log of what was tried and what was failed. DPM also needs to be able to be integrated better into Microsoft and third party tools. IE DPM should be able to read into the SCOM database and know an alerts been raised that will caused backups to fail, wait for the alert to be cleared, then try the backup job. Similar to that, we should have the ability to integrate DPM into Inventory system so that the application is aware of intended reboot due to patching or a decommission and therefore disable backups.</span></p>
<h2><span style="font-family: helvetica;">Secondary Protection</span></h2>
<p><span style="font-family: helvetica;">Setting up a secondary DPM server involves manually selecting the same datasources on the secondary as exist on the primary. However, when working on the secondary, enumerating available datasources on the primary takes approximately 10 minutes per datasources. A Microsoft ticket has been opened to address this, however it is apparent this is simply a fault of the reliance on the diskshadow enumeration.</span></p>
<p><span style="font-family: helvetica;">Any changes made to the primary must also be made on the secondary. Nothing happens automatically and the admin must consistently ensure that the Primary and Secondary are in sync, therefore increasing the workload twice fold.</span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">I am still working out this aspect with the Microsoft DPM Support team, however am confident and have been told by MS Support, that this is an architectural problem as there are minimal issues when replicating a small DPM server with under 20 DataSources. DPM will need to drastically change in this area to be able to automatically adapt the secondary to what&#8217;s happened on the primary. We need to have the ability to say everything on server A gets replicated to Server B, but also have the flexibility to get granular and exclude certain datasources from replication. Reporting will also need to be improved so that we have detailed reports of what&#8217;s getting replicated and what is not.</span></p>
<h2><span style="font-family: helvetica;">Granularity of Detail for FileSystem Backups</span></h2>
<h3><span style="font-family: helvetica;">Problem</span></h3>
<p><span style="font-family: helvetica;">When DPM is set to backup a volume or folder it reports that folder as backed up but provides no detail on the items below it in the built in reports.</span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">Since the data is available in the Restore GUI via the catalog it should be exposed in the <a href="http://shaiperednik.com/tag/sql/" class="st_tag internal_tag" rel="tag" title="Posts tagged with SQL">SQL</a> backend and either Microsoft develop reports or provide us with the <a href="http://shaiperednik.com/tag/sql/" class="st_tag internal_tag" rel="tag" title="Posts tagged with SQL">SQL</a> schema so that we can develop reports and pass that data to the app teams (they have requested this level of detail).</span></p>
<h2><span style="font-family: helvetica;">SharePoint</span></h2>
<p><span style="font-family: helvetica;">The SharePoint team has put together articles how to backup/recover SharePoint, <a href="http://technet.microsoft.com/en-us/library/cc261687.aspx">http://technet.microsoft.com/en-us/library/cc261687.aspx</a>. However, the VSS writer should expose all the aspects of a service application or web app instead of relying on the SharePoint and DPM admin to ensure all the pieces are in place.</span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">See email below:</span></p>
<blockquote><p>The SharePoint team has put together articles how to backup/recover SharePoint, <a href="http://technet.microsoft.com/en-us/library/cc261687.aspx">http://technet.microsoft.com/en-us/library/cc261687.aspx</a>. However, many are in agreement that much of this work can and should be handled by the SharePoint VSS writer. As an example, the VSS writer should expose all the aspects of a service application or web app. The DPM admin could setup DPM to protect the farm which would then backup all content and applications. Should the SharePoint admin need a restore, they would simply look to DPM to handle a restore in place or to another server. Similar to what we can do with SQL today.</p>
<p>Another simple example is SharePoint configurations which some are stored in databases and some in the file system. Today we backup the entire volume and all SQL databases to ensure we get all of these files. It would be far more efficient if the SP VSS Writer exposed the location of these files. Then DPM could back them up accordingly.</p>
<p>I’ve included a diskshadow writer dump that shows what each writer is exposing. While the SharePoint VSS writer puts out a lot of information, there are three questions.</p>
<ol>
<li>Can the VSS writer be expanded to include more information</li>
<li>Can the VSS writer be expanded to allow more control over built in SharePoint functions, IE service app backups.</li>
<li>Is DPM fully utilizing all of the information put out by the writer and using it to its full extent.</li>
</ol>
<p>Hope this provides enough details to get the discussions started. This can only improve the DPM and SharePoint products multifold!</p></blockquote>
<p><span style="font-family: helvetica;"><br />
</span></p>
<h2><span style="font-family: helvetica;">SQL</span></h2>
<p><span style="font-family: helvetica;">When backing up SQL databases in native backup mode DPM does not do any checks on the DB. When the DBAs run backups they have a step that runs a DBCC (consistency check) before backing up.</span></p>
<p><span style="font-family: helvetica;">On the backend DPM utilizes SQL server, however, does a poor job of maintaining the backend. A recent check of a fairly new DPM host, ServerA, showed a significant amount of it&#8217;s databases as fragmented over the acceptable 30% fragmentation threshold.</span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">DPM in it&#8217;s maintenance tasks should include online and offline maintenance of the SQL backend. There should be built in tools that allow the DPM admin to run these maintenance tasks and schedule more intensive offline commands to run at specific times. </span></p>
<h2><span style="font-family: helvetica;">GUI</span></h2>
<p><span style="font-family: helvetica;">There are inconsistencies in the GUI. For example, if you&#8217;ve setup system protection, then go back and setup volume protection, DPM will warn that you need to setup system protection.</span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">There needs to be more time spent on debugging the GUI and ensuring simple bugs like the above don&#8217;t happen.</span></p>
<h2><span style="font-family: helvetica;">De-duplication</span></h2>
<p><span style="font-family: helvetica;">DPM has no de-duplication built in and as a result we are backing up many of the same files 1000s of times across our environments or the same data day after day. Windows Server 2012 features built in de-duplication, <a href="http://blogs.technet.com/b/filecab/archive/2012/05/21/introduction-to-data-deduplication-in-windows-server-2012">http://blogs.technet.com/b/filecab/archive/2012/05/21/introduction-to-data-deduplication-in-windows-server-2012</a>.aspx which I&#8217;ve been told is being investigated for the next major release of DPM.</span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">Microsoft will need to work closely with storage and de-duplication vendors to provide a hardware solution that is supported. Since DPM holds the data catalog, there is a fine line that needs to be determined as to which product manages the de-duplication and reconstitution. Most hardware solutions can present a CIFS or NFS share, neither of which DPM is able to manage in it&#8217;s built in storage pool.</span></p>
<h2><span style="font-family: helvetica;">Reliance on other technologies</span></h2>
<p><span style="font-family: helvetica;">DPM heavily relies on other technologies to do the heavy lifting. VSS writers to enumerate data available to backup, Diskshadow to enumerate the contents of the VSS writers, Windows Server Backup, WMI, SAMBA, amongst others. While this allows DPM to be nimble and rely on other products, it also means that troubleshooting DPM involves troubleshooting these other technologies. The engineer must not only be heavily versed in DPM, but all the intricacies of how these Microsoft components work together.</span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">The individual components are a strong point to the Windows platform as each is responsible for it&#8217;s own. However, to properly manage failed backups DPM needs to do a better job of reporting on the state and managing these individual services, ie restart a service if needed. Since these are all Microsoft products, the DPM team should be able to utilize private APIs allowing the DPM product to better communicate and work with these tools. This can been interpreted also as a lack of communication between internal teams as the DPM team should be pushing other teams to expose more through there VSS writers. Exchange, for example, doesn&#8217;t even have a VSS writer.</span></p>
<h2><span style="font-family: helvetica;">Reboots Required</span></h2>
<p><span style="font-family: helvetica;">Any time an agent is upgraded or reinstalled a pending reboot flag is thrown in the registry and DPM gui. We have been able to clear this pending reboot flag hundreds of times with no impact to backup reliability or performance. Yet this flag if un-cleared will cause all backups and communication to the client to fail.</span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">DPM should not be raising pending reboot flags where it&#8217;s not needed. The GUI should offer the user a warning and an option to clear the flag.</span></p>
<h2><span style="font-family: helvetica;"><a href="http://shaiperednik.com/tag/powershell/" class="st_tag internal_tag" rel="tag" title="Posts tagged with PowerShell">PowerShell</a></span></h2>
<p><span style="font-family: helvetica;">The DPM PowerShell is a powerful snap in that allows for pulling data out of DPM. However, when trying to do this remotely the DPM SnapIn version must match that of the host, down to the minor version. IE version 3.0.7706.0 will not communicate with 3.0.8158.0 or vise versa. Therefore scripting cross-servers becomes inhibitive as we must maintain a console for each versions.</span></p>
<p><span style="font-family: helvetica;">Adding Agents, creating/modifying protection groups, amongst other CUD, create/update/delete, operations have proven difficult if not nearly impossible without a deep knowledge of PowerShell and DPM innards.</span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">The DPM SnapIn should be version agnostic. If using API calls not available due to the target being an old version, the system should throw an error or revert to a deprecated command set or workaround.</span></p>
<p><span style="font-family: helvetica;">Regarding CUD operations , Microsoft needs to better document how to handle batch operations and automate the many manual steps it takes through the GUI. Sample scripts should be provided of common tasks done through the GUI.</span></p>
<h2><span style="font-family: helvetica;">Tape Handling</span></h2>
<p><span style="font-family: helvetica;">Similar to the lack of central management mentioned above, tape handling is also left to be handled by individual servers. Microsoft has made an attempt to remediate this with library sharing, however this is still a problem area as various DPM server simply share a tape library. DPM server A is aware that it doesn&#8217;t own tape A, but it doesn&#8217;t know who owns it. Nor can it read and identify the contents of that tape against the shared library.</span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">This part of the product will depend on a central management console and commander that will be aware of all the tape jobs and be able to assign them to available media servers. This requires a large shift away from the single node architecture of present DPM and a move towards a centralized platform with a command head.</span></p>
<h2><span style="font-family: helvetica;">Agnostic Operation</span></h2>
<p><span style="font-family: helvetica;">Along the lines of tape handling above, DPM servers are not aware of what the other one does. Because there is no central management to control each server, it is left up to the DPM admin to best distribute the load across the DPM servers and storage array. Another issue arises when a DPM server is unavailable as all backups on that server fail until that host is fixed. In a centralized environment the central manger would recognize that backups are at risk due to failed hardware and migrate jobs to a healthy server to continue backups. Backups on the storage backend might be lost but at least jobs can seamlessly continue to run. Another problem is when the server is down due to windows issues, the storage pool is inaccessible and although the data is intact, the DPM server that holds the catalog cannot be accessed. While we can build another server and load the original catalog this is additional time that we cannot execute backups or restores.</span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">Similar solution to the tape handling above.</span></p>
<h2><span style="font-family: helvetica;">Auto-Grow</span></h2>
<p><span style="font-family: helvetica;">While the auto-grow feature of DPM2010 was a huge improvement allowing replica and recovery volumes to grow DPM still handles this growth inefficiently and is limited by the OS (Windows Server 2012 will lift this limitation). When a backup job fails due to lack of disk, DPM grows the replica or recovery volume by 20% and then leaves the job in a failed state till the next cycle which might be next hour or next day. Each time a volume grows it consumes the total of extents available at the OS level. As that limit is approached performance takes a exponential impact until the limit is reached and the host rebuilt.</span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">When a volume auto-grows the backup job should restart automatically and not wait till the next scheduled job. Another point is when auto-growing it should not be a firm 20% but calculation based on historical growth of the datasource and projected growth.</span></p>
<h2><span style="font-family: helvetica;">Remote Desktop Login</span></h2>
<h3><span style="font-family: helvetica;">Problem</span></h3>
<p><span style="font-family: helvetica;">Login takes significant time due to enumeration of volumes</span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">Delay the disk enumeration upon login. This is a windows specific issue and not DPM, but as a result DPM administration suffers. This problem can be circumvented in DPM 2012 with the remote console utility.</span></p>
<h2><span style="font-family: helvetica;">SQL Self Service Restore</span></h2>
<h3><span style="font-family: helvetica;">Problem</span></h3>
<p><span style="font-family: helvetica;">Setup tool on the DPM server</span></p>
<p><span style="font-family: helvetica;">Each SQL Server Instance must be added to the self-service recovery option by name. There is no dropdown allowing the user to choose existing databases already protected on the DPM server. Also, an entire SQL Server cannot be added with a wildcard.</span></p>
<p>&nbsp;</p>
<p><a href="http://i1.wp.com/shaiperednik.com/wp-content/uploads/2012/11/1.jpg" rel="lightbox[4117]"><img class="aligncenter size-full wp-image-4140" title="1" src="http://i1.wp.com/shaiperednik.com/wp-content/uploads/2012/11/1.jpg?resize=540%2C82" alt="" data-recalc-dims="1" /></a></p>
<p><span style="font-family: helvetica;">Using the SQL Server names presented in the GUI fails. Running the suggested Get-Datasources cmdlet produces the same results as the GUI:</span></p>
<p><a href="http://i2.wp.com/shaiperednik.com/wp-content/uploads/2012/11/2.jpg" rel="lightbox[4117]"><img class="aligncenter size-full wp-image-4141" title="2" src="http://i2.wp.com/shaiperednik.com/wp-content/uploads/2012/11/2.jpg?resize=960%2C521" alt="" data-recalc-dims="1" /></a></p>
<p><em><span style="font-family: helvetica;">Note that various entries above do not work, including all other names in the cluster and excluding/including the SQL Instance name. Since it’s the default MSSQLSERVER instance, the GUI excludes the instance name in various places. Also, permissions have been verified working in SQL MGMT Studio for the DPM Service account and my account.</span></em></p>
<p><a href="http://i1.wp.com/shaiperednik.com/wp-content/uploads/2012/11/3.jpg" rel="lightbox[4117]"><img class="aligncenter size-full wp-image-4142" title="3" src="http://i1.wp.com/shaiperednik.com/wp-content/uploads/2012/11/3.jpg?resize=645%2C753" alt="" data-recalc-dims="1" /></a></p>
<p>&nbsp;</p>
<h4><span style="font-family: helvetica;">Recovery Wizard</span></h4>
<p><span style="font-family: helvetica;">SQL admin must know which DPM server to connect to for recovery. No way to query by SQL instance since there is no centralized database of SQL ; DPM host attachments.</span></p>
<p><span style="font-family: helvetica;"> <a href="http://shaiperednik.com/wp-content/uploads/2012/11/4.png" rel="lightbox[4117]"><br />
</a><br />
</span></p>
<p><span style="font-family: helvetica;"> Welcome page is blank. Shouldn&#8217;t the welcome page have text on there guiding the user through the process?</span></p>
<p><span style="font-family: helvetica;"> <a href="http://i0.wp.com/shaiperednik.com/wp-content/uploads/2012/11/5.png" rel="lightbox[4117]"><img class="aligncenter size-full wp-image-4126" title="5" src="http://i0.wp.com/shaiperednik.com/wp-content/uploads/2012/11/5.png?resize=715%2C576" alt="" data-recalc-dims="1" /></a><br />
</span></p>
<p><span style="font-family: helvetica;">Available Restore path if the user chooses to restore to another SQL server is limited to pre-defined SQL servers setup in the DPM console. User is not able to choose another server. </span></p>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">Setup tool on the DPM server</span></p>
<p><span style="font-family: helvetica;">The setup tool should provide the user with an enumerated list of SQL servers they can add. Similar to the enumeration when adding a SQL server into protection or restoring of SQL data.</span></p>
<p><span style="font-family: helvetica;"><a href="http://i1.wp.com/shaiperednik.com/wp-content/uploads/2012/11/5.jpg" rel="lightbox[4117]"><img class="aligncenter size-full wp-image-4144" title="5" src="http://i1.wp.com/shaiperednik.com/wp-content/uploads/2012/11/5.jpg?resize=374%2C293" alt="" data-recalc-dims="1" /></a><br />
</span></p>
<h4><span style="font-family: helvetica;">Restore Wizard</span></h4>
<p><span style="font-family: helvetica;">If a generic user is running this process then this is an acceptable behavior. However, if a DBA is running the process and authenticated, since the tool does allow for permissions groups, then the DBA should be allowed to restore to any SQL server. At minimum to any SQL server connected to that DPM server.</span></p>
<h2><span style="font-family: helvetica;">Retention Period</span></h2>
<h3><span style="font-family: helvetica;">Problem</span></h3>
<p><span style="font-family: helvetica;">Retention period in the GUI is displayed as X number of days:</span></p>
<p><span style="font-family: helvetica;"> <a href="http://i1.wp.com/shaiperednik.com/wp-content/uploads/2012/11/7.png" rel="lightbox[4117]"><img class="aligncenter size-full wp-image-4128" title="7" src="http://i1.wp.com/shaiperednik.com/wp-content/uploads/2012/11/7.png?resize=480%2C137" alt="" data-recalc-dims="1" /></a></span></p>
<p><a href="http://i1.wp.com/shaiperednik.com/wp-content/uploads/2012/11/8.png" rel="lightbox[4117]"><img class="aligncenter size-full wp-image-4121" title="8" src="http://i1.wp.com/shaiperednik.com/wp-content/uploads/2012/11/8.png?resize=396%2C424" alt="" data-recalc-dims="1" /></a></p>
<p><span style="font-family: helvetica;">However, as we have observed the data is retained in this example as 1 recovery point per day for 30 days. The days can be non consecutive. 2 examples to better illustrate the problem:</span></p>
<ol>
<li value="1"><span style="font-family: helvetica;">If backups are missed on some days they do not count towards the 30 number above since there is no recovery point that day. Therefore, in this case you could have data on disk for X number of days missed + the number of days of successful backups.</span>
<ol>
<li value="1">EX. 30 successful recovery points</li>
<li>10 days missed</li>
</ol>
<ol>
<li value="3"><span style="font-family: helvetica;">Oldest recovery point would be today minus 40 days.</span></li>
</ol>
</li>
</ol>
<ol>
<li value="2"><span style="font-family: helvetica;">Another option is where retention is set to 30 days, but instead of choosing everyday, you choose Sunday only. Note that this is a recommended setup for system state and other low churn non-critical data. You would therefore have a backup for 30 days, but since there&#8217;s only 1 backup per week, that equals 30 weeks of backups!</span>
<ol>
<li value="1">EX. 30 Successful recovery points</li>
</ol>
<ol>
<li value="2"><span style="font-family: helvetica;">1 Recovery Point per week ~ 1 recovery point per day once a week</span></li>
</ol>
<ol>
<li value="3"><span style="font-family: helvetica;">Oldest recovery point 30 weeks old.</span></li>
</ol>
</li>
</ol>
<p><span style="font-family: helvetica;">While #2 is not a huge problem and requires more logic when setting up, it does pose a similar problem to #1 where if backups are missed, the retention now gets extended. </span></p>
<p><span style="font-family: helvetica;">#1 however is a big problem for 3 reasons:</span></p>
<ol>
<li value="1"><span style="font-family: helvetica;">Certain applications are only approved to retain 30 calendar days of data by legal and security teams. So #1 above causes us to regularly break this policy and deviate into violation.</span></li>
</ol>
<ol>
<li value="2"><span style="font-family: helvetica;">Since data is retained longer then its been planned for this often throws of disk utilization projections and causes excess use of data. Since old backups out of SLA are not expiring and new backups require more disk space, we constantly find ourselves adding more disk.</span></li>
<li><span style="font-family: helvetica;">There is no way within the GUI or PowerShell to manually expire old backups of a particular datasource. While this might be possible via SQL, it is not supported, nor do we know how to do this.</span></li>
</ol>
<h3><span style="font-family: helvetica;">Proposed Solution</span></h3>
<p><span style="font-family: helvetica;">There are several options in which this could be remediated:</span></p>
<ol>
<li value="1"><span style="font-family: helvetica;">A GUI/PowerShell option could be provided per data source to manually expire data older than x number of days on a datasource.</span></li>
<li><span style="font-family: helvetica;">Change the behavior or allow the user to choose weather retention is:</span>
<ol>
<li value="1">30 calendar days &lt;;&#8211;Prefered</li>
<li>30 days of available recovery points</li>
</ol>
</li>
</ol>
<p><a href="http://shaiperednik.com/2012/11/whats-wrong-with-microsoft-data-protection-manager/" rel="bookmark">What&#8217;s Wrong with Microsoft Data Protection Manager?</a> originally appeared on <a href="http://shaiperednik.com">Shai Perednik.com</a> on November 22, 2012.</p>
]]></content:encoded>
			<wfw:commentRss>http://shaiperednik.com/2012/11/whats-wrong-with-microsoft-data-protection-manager/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Determine what MSA a LUN is Attached to</title>
		<link>http://shaiperednik.com/2012/11/how-to-determine-what-msa-a-lun-is-attached-to/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-to-determine-what-msa-a-lun-is-attached-to</link>
		<comments>http://shaiperednik.com/2012/11/how-to-determine-what-msa-a-lun-is-attached-to/#comments</comments>
		<pubDate>Sat, 17 Nov 2012 15:41:14 +0000</pubDate>
		<dc:creator>Shai Perednik</dc:creator>
				<category><![CDATA[Storage]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Data Protection Manager]]></category>
		<category><![CDATA[Disks]]></category>
		<category><![CDATA[HP DSMSAN]]></category>
		<category><![CDATA[LUNs]]></category>
		<category><![CDATA[MSA]]></category>

		<guid isPermaLink="false">http://shaiperednik.com/?p=4094</guid>
		<description><![CDATA[One of the difficult things I&#8217;ve found is after assigning 20 LUNS to a DPM server, you sometimes need to reclaim some of those disks back into the storage pool. In our environment we use an HP MSA P2000, but the steps below might be similar to other SAN devices. *Note the mention of MSAStorageDetails.ps1, [...]]]></description>
				<content:encoded><![CDATA[<p>One of the difficult things I&#8217;ve found is after assigning 20 <a href="http://shaiperednik.com/tag/luns/" class="st_tag internal_tag" rel="tag" title="Posts tagged with LUNs">LUNS</a> to a <a href="http://shaiperednik.com/tag/dpm/" class="st_tag internal_tag" rel="tag" title="Posts tagged with DPM">DPM</a> server, you sometimes need to reclaim some of those <a href="http://shaiperednik.com/tag/disks/" class="st_tag internal_tag" rel="tag" title="Posts tagged with Disks">disks</a> back into the storage pool. In our environment we use an HP <a href="http://shaiperednik.com/tag/msa/" class="st_tag internal_tag" rel="tag" title="Posts tagged with MSA">MSA</a> P2000, but the steps below might be similar to other SAN devices.</p>
<p><em>*Note the mention of MSAStorageDetails.ps1, this will be posted shortly.</em></p>
<p>The disk# in DPM matches the disk # in windows. In this case #2</p>
<p style="text-align: center;"><a href="http://i2.wp.com/shaiperednik.com/wp-content/uploads/2012/11/clip_image002.jpg" rel="lightbox[4094]"><img class="alignleft size-full wp-image-4098" title="clip_image002" src="http://i2.wp.com/shaiperednik.com/wp-content/uploads/2012/11/clip_image002.jpg?resize=1196%2C427" alt="" data-recalc-dims="1" /></a></p>
<p>Even after removing it from the pool the dpm cli still sees it: $disk = Get-DPMDisk DPMSERVERNAME| sort netdiskid</p>
<p style="text-align: center;"><a href="http://i0.wp.com/shaiperednik.com/wp-content/uploads/2012/11/11.jpg" rel="lightbox[4094]"><img class="aligncenter size-full wp-image-4146" title="1" src="http://i0.wp.com/shaiperednik.com/wp-content/uploads/2012/11/11.jpg?resize=1157%2C446" alt="" data-recalc-dims="1" /></a></p>
<p>But obviously can’t remove it as it’s really not in the pool:</p>
<p style="text-align: center;"><a href="http://i2.wp.com/shaiperednik.com/wp-content/uploads/2012/11/clip_image006.jpg" rel="lightbox[4094]"><img class="size-full wp-image-4100 aligncenter" title="clip_image006" src="http://i2.wp.com/shaiperednik.com/wp-content/uploads/2012/11/clip_image006.jpg?resize=897%2C95" alt="" data-recalc-dims="1" /></a></p>
<p>(Note I removed disk #2 from the pool and formatted it with the name F)</p>
<p><a href="http://i1.wp.com/shaiperednik.com/wp-content/uploads/2012/11/clip_image008.jpg" rel="lightbox[4094]"><img class="aligncenter size-full wp-image-4101" title="clip_image008" src="http://i1.wp.com/shaiperednik.com/wp-content/uploads/2012/11/clip_image008.jpg?resize=393%2C421" alt="" data-recalc-dims="1" /></a></p>
<p>In the HP DSM Manager the disk # is still #2 but it’s name is MPIODisk1</p>
<p><a href="http://i0.wp.com/shaiperednik.com/wp-content/uploads/2012/11/clip_image010.jpg" rel="lightbox[4094]"><img class="aligncenter size-full wp-image-4102" title="clip_image010" src="http://i0.wp.com/shaiperednik.com/wp-content/uploads/2012/11/clip_image010.jpg?resize=1012%2C413" alt="" data-recalc-dims="1" /></a></p>
<p>Using the MSA collection script @ E:\Scripts\ssh\Get-MSAStorageDetails.ps1 -List .\msalist.csv –XMLFormat and notepad++ to search the results for the LUNID 60CFF0010E35497AECB4E1000</p>
<p>Note that the letters in the middle are what matters: “E35497AECB4E” in this case which matches the exists in the WWN field.</p>
<p><a href="http://i2.wp.com/shaiperednik.com/wp-content/uploads/2012/11/clip_image012.jpg" rel="lightbox[4094]"><img class="aligncenter size-full wp-image-4103" title="clip_image012" src="http://i2.wp.com/shaiperednik.com/wp-content/uploads/2012/11/clip_image012.jpg?resize=373%2C222" alt="" data-recalc-dims="1" /></a></p>
<p>&lt;PROPERTY name=&#8221;wwn&#8221; type=&#8221;string&#8221;&gt;600C0FF00010E35497AECB4E01000000&lt;/PROPERTY&gt;</p>
<p>And scrolling up in the object we can find the volume name,diskgroup, and use the filename for the MSA the lun is attached to.</p>
<p><a href="http://i1.wp.com/shaiperednik.com/wp-content/uploads/2012/11/21.jpg" rel="lightbox[4094]"><img class="aligncenter size-full wp-image-4147" title="2" src="http://i1.wp.com/shaiperednik.com/wp-content/uploads/2012/11/21.jpg?resize=721%2C217" alt="" data-recalc-dims="1" /></a></p>
<p>You can compare the WWN to the Serial Number</p>
<p><a href="http://i1.wp.com/shaiperednik.com/wp-content/uploads/2012/11/31.jpg" rel="lightbox[4094]"><img class="aligncenter size-full wp-image-4148" title="3" src="http://i1.wp.com/shaiperednik.com/wp-content/uploads/2012/11/31.jpg?resize=647%2C516" alt="" data-recalc-dims="1" /></a></p>
<p>&nbsp;</p>
<p>I off-lined the disk on the host and cleared the mapping on the MSA</p>
<p>MPIODisk1 is no longer listed on the HP DSMManager or in the DPM CLI</p>
<p><a href="http://i2.wp.com/shaiperednik.com/wp-content/uploads/2012/11/clip_image018.jpg" rel="lightbox[4094]"><img class="aligncenter size-full wp-image-4096" title="clip_image018" src="http://i2.wp.com/shaiperednik.com/wp-content/uploads/2012/11/clip_image018.jpg?resize=187%2C164" alt="" data-recalc-dims="1" /></a></p>
<p><a href="http://i2.wp.com/shaiperednik.com/wp-content/uploads/2012/11/41.jpg" rel="lightbox[4094]"><img class="aligncenter size-full wp-image-4149" title="4" src="http://i2.wp.com/shaiperednik.com/wp-content/uploads/2012/11/41.jpg?resize=1149%2C156" alt="" data-recalc-dims="1" /></a></p>
<p>Disk can now safely be deleted from the MSA</p>
<p><a href="http://shaiperednik.com/2012/11/how-to-determine-what-msa-a-lun-is-attached-to/" rel="bookmark">How to Determine what MSA a LUN is Attached to</a> originally appeared on <a href="http://shaiperednik.com">Shai Perednik.com</a> on November 17, 2012.</p>
]]></content:encoded>
			<wfw:commentRss>http://shaiperednik.com/2012/11/how-to-determine-what-msa-a-lun-is-attached-to/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 5/50 queries in 0.099 seconds using disk: basic
Object Caching 3955/4060 objects using disk: basic

 Served from: shaiperednik.com @ 2013-05-23 19:47:16 by W3 Total Cache -->