如何编写用于 SharePoint Portal Server 2003 的备份和恢复应用程序

发布时间:2011-05-10 01:10:51   来源:文档文库   
字号:

如何编写用于 SharePoint Portal Server 2003 的备份和恢复应用程序

本页内容

简介

以编程方式备份和恢复站点

示例应用程序:代码演练

小结

其他资源

简介

Microsoft Office SharePoint Portal Server 2003 使用一组产品和技术 Microsoft Office 2003Microsoft SQL Server 2000 SP3 以及 Microsoft Windows SharePoint Services 使您能够创建连接整个组织的统一的门户站点。SharePoint Portal Server 2003 建立在 Windows SharePoint Services 体系结构的顶层,提供诸如企业集成、内容管理、组织、发布以及连网协作等其他功能。但是,由于 Windows SharePoint Services SharePoint Portal Server 2003 之间功能的差异,您应当仅使用 SharePoint Portal Server 工具来备份和恢复使用 SharePoint Portal Server 所创建的站点。

SharePoint Portal Server Data Backup and Restore 实用工具是用于备份和恢复使用 SharePoint Portal Server 2003 所创建站点的 SharePoint Portal Server 工具。在运行 SharePoint Portal Server 的服务器中,您可以从 All Programs 菜单上的 SharePoint Portal Server 组访问该实用工具。有关备份和恢复使用 SharePoint Portal Server 2003 所创建站点的信息,请参阅 Microsoft Office SharePoint Portal Server 2003 Administrator's Guide

返回页首

以编程方式备份和恢复站点

SharePoint Portal Server 2003 还提供备份和恢复 API,使客户和第三方能够开发自定义的备份和恢复应用程序。该 API 包含在 mssctlbm.dll mssitlbm.dll 之中,它们是作为 SharePoint Portal Server 2003 中的私有程序集提供的。您可以从 SharePoint Portal Server 2003 光盘的下列路径找到备份和恢复 API

\Products\Applications\Server\SharePoint Portal Server 2003\RTM\SPS\Files\PFiles\SPS\Bin

spsbackup.dll 中,SharePoint Portal Server 2003 还提供其他非托管代码 API,这些 API 提供备份和恢复运行索引服务(以前称为索引服务器)的计算机的 IStream 接口。此外,SharePoint Portal Server 对象模型包含对使用 PortalSite 对象的 PrepareSiteForBackup() Restore() 方法进行备份和恢复的支持。

本文随附的备份和恢复示例应用程序 (SPSBackupSample.exe) 说明如何使用备份和恢复 API 来备份和恢复 SharePoint Portal Server 站点和任何 Windows SharePoint Services 站点(如果他们安装在 SharePoint Portal Server Web 服务器上)。备份和恢复 API 具有与 SPSBackupSample.exe 相同的基本功能。该示例是使用 Microsoft Visual C++ 7.1 编写的。

由于 Microsoft SharePoint Products and Technologies 2003 SDK 中可找到的 SharePoint Portal Server 2003 文档没有讲述备份和恢复 API 问题,因此可以通过本文帮助您使用 API 来编写自己的备份和恢复应用程序。但是,您应当 使用本文随附的示例(本文开始时提供的下载链接)作为原型应用程序;该示例不是专门为用于产品环境而设计的。

运行备份和恢复示例

在我们深入研究该代码之前,您应当运行示例应用程序并查看其工作方式。下载 SPSBackupSample.EXE 并在运行 SharePoint Portal Server 2003 Platform SDK 的计算机上生成该应用程序 (SPSBackupSample)。您应当仅在运行 SharePoint Portal Server 2003 的前端 Web 服务器上使用该示例。

要运行示例

1.

启动备份过程:在命令提示符窗口中,键入 \SPSBackupSample –b,然后按下 Enter

2.

完成备份时恢复站点:键入 \SPSBackupSample –r,然后按下 Enter

在应用程序备份和恢复站点时,系统会提示您输入备份和恢复位置及一些其他详细信息。

备份文档库(基于 Web 存储系统)

要配置该示例的备份组件以备份文档库(基于 Web 存储系统),您需要创建一个新的 COM+ 包,并在服务器上注册 WSSBackup.dll,在该服务器上将文档库组件安装于您的场拓扑结构中。您可以找到包含在下载代码中的 WSSBackup.dll

要使用 COM+ 配置备份组件

1.

Windows 资源管理器中,在 Administrative Tools 下面,指向 Component Services,再指向 Computers,然后单击正在运行文档库组件的计算机名。右键单击 COM+ Applications,单击 New,然后单击 Application

2.

使用下列详细信息创建新的应用程序:

Name: WSSBackup

Activation Type:服务器应用程序

Identity:具有适当权限可以备份 Microsoft Exchange Server 的域帐户。

3.

在创建应用程序之后,将其展开,右键单击 Components,指向 New Component,然后单击 Install New Component(s)。浏览 WSSBackup.dll

返回页首

示例应用程序:代码演练

下列节提供为备份和恢复示例而编写的代码演练 (SPSBackupSample.exe),以说明备份和恢复 API 的功能和使用。

您可以使用本文和代码示例作为创建您自己的备份和恢复应用程序的参考或入门点。

在您阅读下列操作指南时,在 Microsoft Visual Studio .NET 中,打开 C++ 解决方案文件 SPSBackupSample.sln 并参考其代码。

备份服务器场

BackupMode() 方法是在备份和恢复示例应用程序 (SPSBackupSample.exe) 中执行备份的主要途径。在命令提示符窗口中,键入 \SPSBackupSample –b 并按下 Enter,调用该方法。

本节描述 BackupMode() 方法的操作。在 .cpp 文件中,搜索 void BackupMode() 找到该方法。

下列步骤说明 BackupMode() 方法备份服务器场所遵循的过程。

要备份服务器场

1.

创建 TopologyManager 对象的一个实例。

TopologyManager * tm = new TopologyManager();

2.

检查支持的拓扑结构。

使用 TopologyManager 对象的 IsSupportedTopology 标志确保支持该场的拓扑结构。

if(false == tm->IsSupportedTopology)

确保备份应用程序正在前端 Web 服务器上运行。

bool IsFEW(TopologyManager *tm)

3.

(有关相关示例代码,请参阅 CheckAndAcquireLock() 函数。)锁定拓扑管理器。获取独占锁定,这样就不会在该场上执行其他管理操作。

即使使用独占锁定,用户也可以访问该场中的任何站点或门户站点。如果您没有获取独占锁定,该场在备份过程中具有完整功能,其他用户可以创建新的门户站点和文档工作区站点。这可能导致备份映像不是该场的完整复制。

tm ->Lock->Acquire())

检查使用该方法返回的 Boolean 值以确保给予了这种锁定。如果没有给予这种锁定,请用户强制锁定。但是,此时要小心确保完成解除锁定的过程。

(tm ->Lock->Acquire(true))

4.

要在备份来自门户站点的任何数据之前确保门户站点数据的一致性,请调用 ps->PrepareForBackup()

5.

要备份服务器场中每个门户站点的数据库,通过 tm ->PortalSites 集合枚举。

iEnum = static_cast(psc->GetEnumerator());

while(iEnum->MoveNext())

集合中的每个 PortalSite 对象都具有三个属性(表示三种数据库)。这些属性是:SiteDatabaseServiceDatabase 以及 UserProfileDatabase。每个 PortalSite 对象也具有我们感兴趣的三个其他属性:IsFederatedIsCentral 以及 ID

(bool) ps->IsFederated

Indicates whether the portal site consumes shared services

(bool) ps->IsCentral

Indicates whether the portal site provides shared services

(Guid) ps->ID

ID of the PortalSite object. We check the ID during restore.

A portal site cannot be restored if it already exists.

6.

对于您备份的每个 PortalSite 对象,在备份元数据中存储 IsFederatedIsCentral 以及 ID 属性。

* Sample XML Metadata

IsCentral="False" PortalID="4de04d81-ab32-4308-bc5f-0f93eb709fc4">

ImageName="testPort1_SITE.bak" />

ImageName="testPort1_SERV.bak" />

ImageName="testPort1_PROF.bak" />

7.

使用您选择的 SQL 备份方法,使用连接字符串和数据库名称备份 SharePoint Portal Server 数据库。

8.

出于性能原因,缓存 ID 以用于随后的检索。循环访问不同集合会导致对数据库的多次往返。代码示例使用 Hashtable 对象的一个实例缓存这些 ID

9.

在虚拟服务器上备份任何其他内容数据库,过程如下。

1.

获取对门户站点的 SPVirtualServer 对象的引用。

SPVirtualServer * spPSVS = ps->VirtualServer->GetSPVirtualServer();

2.

循环访问 SPVirtualServer->ContentDatabases 集合并保存下列属性的状态。

(string) Name

(int) WarningSiteCount

(int) MaximumSiteCount

3.

备份物理数据库。

* Sample metadata for content databases.

WarningSiteCount="300" MaximumSiteCount="500" />

10.

备份搜索数据库和运行索引服务的服务器。

1.

在门户站点没有共享时仅备份搜索。

if(false == ps->IsFederated)

2.

标识场上的活动索引管理服务器。

// Collect all of the Indexing Service information for the farm

while(iIndexEnum->MoveNext())

{

IndexService *is = static_cast(iIndexEnum->Current);

// Only back up if the Indexing Service is active

if(is->IsActive())

3.

提供下列元数据。

对管理服务器名进行索引:

(string) IndexService->Server->Name

它是否为一个任务服务器:

(bool)is->Server->IsJobServer

实际搜索应用程序的 GUID/字符串 ID

(string) ps->SearchApplicationName

11.

(有关相关的示例代码,请参阅 BackupSearchApplication() 函数)锁定运行索引服务的活动服务器,避免同时发生其他备份。调用 SearchAdminClass 类的 AcquireBackupPermission() 方法。如果锁定失败,解除对运行索引服务的计算机的锁定,不进行备份。

有关更多信息,请参阅 C++ 解决方案文件中的 LockIndexServers 函数,如下所示:

bool LockIndexServers(SearchAdminClass * sAdmin, List * al)

12.

对于您备份的每个门户站点,您必须循环访问每个活动索引服务并调用 CSPSBackupClass 类的 BackupToStream() 方法。

1.

要创建 CSPSBackup 的一个实例,设置对 mssctlbm.dll 的引用。

spsBackup = new CSPSBackupClass();

2.

对每个要备份的索引管理服务器调用 BackupToStream

spsBackup->BackupToStream(ServerName, objPStream , "",

SearchApplicationName);

(string) ServerName Name of server running Indexing Service to

back up the search application from.

IStream *) objPStream An Implementation of IStream to write the

data. Pass an empty string.

(string) SearchApplicationName The GUID/String ID for the

server running Indexing Service.

13.

BackupToStream 是一个异步方法。在其执行时,调用 spsBackup->GetBackupStatus() 检索备份的当前状态,并据此更新您的用户界面。

GetBackupStatus(ActiveIndexServerName,ps->SearchApplicationName,

&nBackupState, &nLastError, &dLastTime, &nPercentCompleted);

下列枚举包含您必须在应用程序中定义的 nBackupState 的值。

// Enum for the various states from GetBackupStatus()

typedef enum tagSPSBackupState

{

SPSBACKUPSTATE_IDLE = 0,

SPSBACKUPSTATE_BACKUP = 1,

SPSBACKUPSTATE_RESTORE = 2

}SPSBackupState;

14.

备份来自每个索引管理服务器的搜索计划配置。这是一个无需分析的 XML BLOB

SearchFarmConfig *sfc = new SearchFarmConfig();

String * sBackupSchedules = sfc->BackupSchedules(IndexServerName,

portalSiteObject);

15.

调用您以前锁定的每个索引服务的 ReleaseBackupPermission

警告 如果执行该步骤失败,在重新启动搜索服务之前,运行索引服务的每台服务器上的 Microsoft SharePoint Portal Server 搜索 (SharePointPSSearch) 服务均不允许您备份或恢复。

有关参考,请参阅 C++ 解决方案文件中的下列函数。

void ReleaseIndexServers(SearchAdminClass * sAdmin, List * al)

*Sample backup metadata for indexes:

ImageName="testing123IndexServerA4de04d81-ab32-4308-bc5f-

0f93eb709fc4.stream" IsJobServer="True">

** Scheduled Tasks XML BLOB goes here – left out for clarity.

]]>

16.

(有关相关的示例代码,请参阅 BackupWSS() 函数。)备份任何不是 SharePoint Portal Server 2003 信息的 Windows SharePoint Services 虚拟服务器信息。

1.

创建 SPGlobalAdmin 对象的一个实例。

SPGlobalAdmin * spGA = new SPGlobalAdmin();

2.

循环访问 SPGlobalAdmin->VirtualServers 集合。

3.

针对 TopologyManager->PortalSites 集合的 VirtualServerID,对集合中的每个 VirtualServer VirtualServerID 进行比较。如果它不是门户站点的部分并且其状态不等于 SPVirtualServerState::NotAdministrable,则备份其状态(htCachedVSIds 是以前使用的哈希表,在该表中缓存门户站点的虚拟服务器 ID)。

if(!htCachedVSIds->ContainsKey(spVS->VirtualServerId.ToString())

&& SPVirtualServerState::NotAdministrable != spVS->State &&

SPVirtualServerState::NeedExtend != spVS->State)

4.

保存来自当前 SPVirtualServer 对象的元数据。代码示例使用该元数据备份标识;恢复时您可以对其进行修改。

(string) Description

(string) Url

5.

循环访问 SPVirtualServer->Prefixes 集合,并保存每个前缀的状态(排除/包含)。

(string) Name

(int) Type

6.

循环访问 SPVirtualServer->ContentDatabases 集合并保存下列属性的状态。

(string) Name

(int) WarningSiteCount

(int) MaximumSiteCount

7.

备份物理数据库。

* Sample metadata for stand-alone Windows SharePoint Services virtual servers.

ID="4f68ef73-4606-48bd-9a2e-a943a19e44e3">

ImageName="STS_someServer_770673706.bak"

WarningSiteCount="9000" MaximumSiteCount="15000" />

17.

(有关相关的示例代码,请参阅 BackupSSO() 函数。)备份 Microsoft Single Sign-On 服务数据库。

1.

要标识 Single Sign-On 数据库,使用 tm ->GlobalProperties->SSODatabaseConnectionString 属性。如果没有配置数据库,则该字符串为空。

2.

如果有连接字符串,则备份 Single Sign-On 数据库。

3.

要确定是否设置加密密钥,请检查 SingleSignon::Configuration::DoesMasterSecretExist (bool) 属性。

4.

要获取备份加密密钥,使用 SingleSignon::Configuration::MasterSecret (static unsigned char __gc[]) 属性。

* Sample metadata for Single Sign-On

TicketTimeoutMin="2" PurgeAuditDays="10" />

18.

(有关相关的示例代码,请参阅 BackupLegacyDocLib() 函数。)备份旧式文档库。

Exchange Streaming API 用于备份文档库(基于 Web 存储系统)。有关更多信息,请参阅 Microsoft Exchange Server SDK 中的 Backup and Restore

1.

如果场没有共享,请确定 tm->GlobalProperties->DefaultDocumentService 是否不为空。如果不为空,使用 IsActive 属性检查其活动状态。在该场中仅有一个基于 Web 存储系统的 DocumentService,因此,在其中存在 DocumentService 的元数据的日志记录将使您了解是否要对其进行恢复。

if(false == IsFarmFederated && NULL != tm->GlobalProperties-

>DefaultDocumentService)

DocumentService * ds = static_cast(tm-

>GlobalProperties- >DefaultDocumentService);

if(ds->IsActive())

2.

如果 DocumentService 为活动,则备份存储组“SharePoint Portal Server Group”。此外,查看使用 HrESE API 的代码示例 WSSBackup(下载提供)。(有关更多信息,请参阅 Microsoft Exchange Server SDK 中的Backup and Restore)。

恢复 Exchange Server 之后,调用 OnRestoreComplete() 方法通知 SharePoint Portal Server 2003Exchange Server 数据库已经恢复,并创建文档库所需的 Internet 信息服务 (IIS) 虚拟目录。

导入包含 CTahoeBackupManager 接口的组件。

#import "C:\Program Files\SharePoint Portal Server\BIN\pkmpi.dll"

no_namespace raw_interfaces_only

IDMRestorePtr pDMRestore;

// Tell SharePoint Portal Server we are through with Restore

pDMRestore.CreateInstance(__uuidof(CTahoeBackupManager));

hr = pDMRestore->OnRestoreComplete();

3.

循环访问 TopologyManager->DocumentWorkspaces 集合,并将文档工作区站点的每个 Name 的属性保存到用于执行恢复操作的备份的元数据。

Metadata

(string) Name

* Sample XML metadata

19.

完成备份后,解除锁定。

tm->Lock->Release(true);

现在,您已经完成在场中备份站点所需执行的这些步骤。下列节描述如何恢复场。

恢复场

RestoreMode() 方法是在示例应用程序中执行恢复的主要途径。在命令提示符窗口中键入 \SPSBackupSample –r 并按下 Enter 时调用该方法。

本节描述 RestoreMode() 方法的操作。要找到该方法,在 .cpp 文件中搜索 void RestoreMode()

下列步骤说明 RestoreMode() 方法恢复服务器场的过程。

要恢复服务器场

1.

创建 TopologyManager 对象的一个实例。

TopologyManager * tm = new TopologyManager();

2.

检查支持的拓扑结构。

1.

使用 TopologyManager 对象的 IsSupportedTopology 标志确保支持该场的拓扑结构。

if(false == tm->IsSupportedTopology)

2.

确保备份应用程序正在前端 Web 服务器上运行。

bool IsFEW(TopologyManager *tm)

3.

锁定 TopologyManager。获取独占锁定,这样就不会在该场上执行其他管理操作。

尽管使用独占锁定,用户仍然能够访问该场中的任何站点或门户站点。

tm ->Lock->Acquire())

检查使用该方法返回的 Boolean 值,以确保给予了锁定。如果没有给予这种锁定,请用户强制锁定。但是,要非常小心地确保完成解除锁定过程。

(tm ->Lock->Acquire(true))

4.

获取场共享服务配置。获取用于 TopologyManager->GlobalProperties->IsCentral TopologyManager->GlobalProperties->IsFederated 的值。

IsFarmCentral = tm->GlobalProperties->IsCentral;

IsFarmFederated = tm->GlobalProperties->IsFederated;

5.

缓存拓扑结构。枚举 tm->DatabaseServices tm->IndexServices 集合并缓存信息。

尽管该步骤不是必需的,但是它有助于减少对数据库的往返。参考下列代码示例中的注释。

// Enumerate and cache servers running Indexing Service in the farm

// Enumerate and cache the database servers in the farm

p

< class=' _5'>

6.

锁定正在运行索引服务的服务器。

警告 您必须在调用 Restore() 方法之前锁定正在运行索引服务的服务器。在调用 Restore() 之后锁定服务器会导致您的应用程序和尝试获取锁定的 SPSAdmin. 服务之间的竞争情形。锁定活动索引管理服务器,这样在使用 SearchAdminClass 类的 AcquireBackupPermission() 方法的同时就不会发生其他的恢复操作。如果在适当数量的重试后锁定失败,则解除服务器锁定,也不进行门户站点的恢复。

bool LockIndexServers(SearchAdminClass * sAdmin, List * al)

p

< class=' _5'>

7.

确定是否能够恢复门户站点。您可以使用下列伪代码逻辑来恢复门户站点。无论是在提供门户站点,还是在使用门户站点,共享服务都会严重影响其是否恢复和如何恢复。有关更多信息,请参阅下列代码示例中的注释。

/* Start Of Restore Matrix */

使用下列恢复矩阵来确定何时以及是否能够恢复门户站点。

1. 恢复矩阵

备份/目标

独立

内部场的共享子场

场之间的共享子场

主控

独立

**

***

** 在其已经是此场的父门户站点时。如果存在现有父门户站点,则可以将其作为子门户站点进行恢复。

*** 应当自动将其本身设为父门户站点。

MasterPortalExists =

TopologyManager.GlobalProperties.MasterPortalSite <> NULL

IsFarmCentral = TopologyManager->GlobalProperties->IsCentral

IsFarmFederated = TopologyManager->GlobalProperties->IsFederated

IsPortalCentral = PortalSite->IsCentral

IsPortalFederated = PortalSite->IsFederated

' A farm that is NOT using shared services

If IsFarmCentral = false and IsFarmFederated = false Then

If IsPortalFederated = True Then

' Cannot restore without being in a farm

' configured for shared services

Else

' Restore normally

End If

End if

' A farm that provides shared services

If IsFarmCentral = true Then

'If the portal site was a parent portal site

If IsPortalCentral = True Then

'Call restore and set

'TopologyManager.GlobalProperties.MasterPortalSite

' = NewPortalSite if the portal site was

'If the portal site was a child portal site

Else If IsPortalFederated = True Then

If MasterPortalExists Then

'Restore and skip search Restore

Else

'Cannot Restore unless parent portal site exists

End If

' A portal site that was formerly independent

Else If IsPortalCentral = false AND IsPortalFederated = false Then

If MasterPortalExists = false Then

If No Portal in backup is Marked IsPortalCentral then

'Offer to promote to parent

End If

If PromoteToMaster = true Then

'Call Restore and set

'TopologyManager.GlobalProperties.MasterPortalSite

'= NewPortalSite

Else

'Cannot Restore unless parent portal exists

End If

End If

End If

End If

' A farm that consumes shared services from another farm –

' Inter Federated

If IsFarmFederated = true Then

If MasterFarmConnectionString <> NULL and MasterConfigurationDatabase <> NULL Then

'Call Restore – in this Restore case all portal sites will.

'be child portal sites so skip search Restore

End If

End If

p

< class=' _5'>

8.

(有关相关的示例代码,请参阅 RestorePortal() 函数。)检查现有门户站点。确保在调用 Restore() 方法之前不存在门户站点。如果您尝试通过现有门户站点进行恢复,Restore() 会引发一个异常。有关如何检查现有门户站点的示例,参阅下列代码。

PortalSite * GetPortalByID(TopologyManager *tm, String *ID).

* To delete the portal site, call the Delete method of the

TopologyManager object's PortalSites collection object.

ps = PortalSite to delete

fDeleteDatabases = bool whether to delete the

underlying databases or not.

tm->PortalSites->Delete(ps, fDeleteDatabases);

如果将 Delete() 方法的第二个参数设为 true,并且内容数据库是不可访问的(例如,服务器已停机),则不会清理任何内容。要解决此问题,您可以在清理配置数据库的异常处理程序中取消扩展虚拟服务器。有关示例,参阅下列示例函数。

void DeletePortal(TopologyManager *tm, PortalSite *ps, bool fDeleteDatabases)

p

< class=' _5'>

9.

缓存现有门户站点 ID。循环访问和缓存每个 PortalSite tm->PortalSites ID 属性。该代码示例使用称为 htVSID 的哈希表来存储现有 ID

p

< class=' _5'>

10.

获取有效的目标虚拟服务器。

1.

循环访问目标计算机上的现有虚拟服务器。

(SPGlobalAdmin) spGA

spGA->VirtualServers – collection of VirtualServers

2.

对每个服务器进行测试,以查看其是否为可扩展以及是否为现有 PortalSite 的部分。

if(SPVirtualServerState::NeedExtend == spVS->State &&

!htVSIDs->ContainsKey(spVS->VirtualServerId.ToString()))

3.

为潜在恢复目标保存可用服务器。

List) alIISVServers

alIISVServers->Add(spVS);

p

< class=' _5'>

11.

从用户收集恢复信息。

PortalURL。应在其上恢复该门户站点的虚拟服务器的 URL。如果这是一个迁移,该 URL 可能与已备份的不同。您应当仅允许在第 8 个步骤中从该列表中选择其中一个虚拟服务器。

如果用户在第 8 个步骤中选择删除目标数据库,则执行第 12 个步骤。

VirtualServerURL. 在第 10 个步骤中选择。

服务数据库和数据库名称的目标数据库服务器。目标数据库服务器应当限于第 5 个步骤中缓存的 SQL Server 计算机。

配置文件数据库和数据库名称的目标数据库服务器。目标数据库服务器应当限于第 5 个步骤中缓存的 SQL Server 计算机。

站点数据库和数据库名称的目标数据库服务器。目标数据库服务器应当限于第 5 个步骤中缓存的 SQL Server 计算机。

p

< class=' _5'>

12.

如果用户选择删除目标数据库,则将该数据库恢复至选定的数据库服务器。

p

< class=' _5'>

13.

恢复门户站点调用 PortalSite 对象的静态 Restore 方法。

1.

Restore 方法采用下列输入参数:

PortalUrl 门户站点的 URL

VSUrl 扩展以寄宿该站点的虚拟服务器。

SiteDBServer 在其中恢复(或已驻留)站点数据库的服务器名。

SiteDBName 站点数据库的数据库名称。

ServiceDBServer 在其中恢复(或已驻留)服务数据库的服务器名。

ServiceDBName 服务数据库的数据库名称。

ProfilesDBServer 在其中恢复(或已驻留)用户配置文件数据库的服务器名。

ProfilesDBName 用户配置文件数据库的数据库名称。

PortalSite * newPS = PortalSite::Restore(PortalUrl, new Uri(VSUrl),

SiteDBServer, SiteDBName, ProfilesDBServer, ProfilesDBName,

ServiceDBServer, ServiceDBName);

2.

如果门户站点创建成功,则将新门户站点的 Status 属性设为 TopologyStatus::Online 并调用 Commit() 方法,并传递 true

newPS->Status = TopologyStatus::Online;

newPS->Commit(true);

p

< class=' _5'>

14.

恢复内容数据库。收集用于每个单个内容数据库及数据库名称的目标数据库服务器。

警告 目标数据库服务器应当限于第 5 个步骤中缓存的 SQL Server 计算机。

1.

恢复数据库。

2.

使用其 Add 方法将内容数据库信息添加到该门户站点的 SPVirtualServer 对象的 ContentDatabases 集合中;nWarningSiteCount nMaximumSiteCount 来自于备份中保存的元数据。

spVS->ContentDatabases->Add(dbServer, dbName, "", "",

nWarningSiteCount, nMaximumSiteCount, 0);

p

< class=' _5'>

15.

(有关相关的示例代码,请参阅 RestoreSearchApplication() 函数。)恢复搜索数据库和正在运行索引服务的服务器。

如果门户站点没有共享,并且索引被锁定,则仅恢复搜索(从第 6 个步骤)。

if(false == tp->_isPortalFederated && true ==

fIndexServersLocked)

1.

对于要备份的每个独立或父门户站点,循环访问每个活动索引服务并调用 CSPSBackup 类的 RestoreFromStream.() 方法。

如果您要更改搜索服务器上的恢复路径,则将 sRestorePath 更改为用户选择的位置。

ActiveIndexServerName 包含索引管理服务器(将从其中备份应用程序)名称的字符串。

pStream = IStream = your IStream implementation

backedUpSearchApplicationName = SearchApplicationName for

search application you previously backed up.

spsBackup->RestoreFromStream.(ActiveIndexServerName,

Marshal::GetObjectForIUnknown(pStream), "", true, sRestorePath,

backedUpSearchApplicationName);

索引恢复规则:

1. 目标索引服务必须是活动的(使用 IsActive)。

2. 如果正在恢复的映像来自正在运行索引服务的服务器(也是任务服务器),该映像 必须 恢复到目标场中的任务服务器。

3. 如果您正在恢复常规索引(不是任务服务器),确保没有将同一个 SearchApplication 的两个映像恢复到索引管理服务器。例如,如果您从 IndexA IndexB 进行备份,您无法将两者均恢复到 IndexC(不允许合并索引)。

2.

恢复已备份的任何自定义搜索计划。

SearchFarmConfig *sfc = new SearchFarmConfig();

sfc->RestoreSchedules(IndexServerName, PortalSiteObject,

ScheduleXMLThatWasBackedUp);

3.

RestoreFromStream. 是一个异步方法。在其执行时,调用下列代码来检索恢复操作的当前状态。

spsBackup->GetBackupStatus()

GetBackupStatus(ActiveIndexServerName,ps->SearchApplicationName,

&nBackupState, &nLastError, &dLastTime, &nPercentCompleted);

4.

在恢复操作期间,如果没有更改门户站点的 URL,则传播这些索引。如果已经更改,则忽略该步骤,因为 SPSAdmin. 服务必须重新对这些索引进行组织并将其传播。

5.

在恢复所有门户站点后,调用 ReleaseBackupPermission() 解除对每个索引管理服务器的锁定。

p

< class=' _5'>

16.

(有关相关的示例代码,请参阅 RestoreSSO() 函数。)如果场无法启用共享的服务,则恢复 Single Sign-On 数据库。

1.

使用正确的信息调用 ConfigureSecretServer 方法。

SingleSignon::Configuration::ConfigureSecretServer(SSOAdminAccount,

SSOApplicationAdminAccount, SSODBServer, SSODBName,

nTicketTimeout, nAuditPurge);

2.

要恢复加密密钥,调用下列代码来确定是否重新加密数据。

SingleSignon::Configuration::RestoreMasterSecret(sKey, fReEncrypt);

fReEncrypt = boolean

p

< class=' _5'>

17.

(有关相关的示例代码,请参阅 RestoreWSS() 函数。)恢复任何已备份的独立的 Windows SharePoint Services 虚拟服务器。

1.

获取该服务器上可以进行恢复的所有虚拟服务器列表。要执行该操作,循环访问 SPGlobalAdmin->VirtualServers 集合。任何具有 SPVirtualServerState::NeedExtend 状态的虚拟服务器都可用作恢复目标。

2.

使用户可以选择恢复到哪个虚拟服务器。

3.

用户选择虚拟服务器后,调用 OpenVirtualServer(new Uri(newUrl)) 传递用户选定的 URL

4.

如果调用成功,则扩展虚拟服务器。

spGA->ExtendVirtualServer(new Uri(newUrl), false,

TopologyManager::DefaultApplicationPoolName, false, NULL, NULL);

5.

SPVirtualServer 对象中清除现有的任何前缀。

// Clear any existing prefixes

int nPrefixCount=0;

String *strPrefixes[] = __gc new String*[spVS->Config->Prefixes->Count];

for(nPrefixCount=0;nPrefixCount < spVS->Config->Prefixes->Count; nPrefixCount++)

{

strPrefixes[nPrefixCount] = spVS->Config->Prefixes->Item[nPrefixCount]->Name;

}

spVS->Config->Prefixes->Delete(strPrefixes);

6.

使用其 Add 方法将已备份的前缀(排除和包含)信息添加到新的 SPVirtualServer 对象的 Prefix 集合中。

7.

将备份的内容数据库恢复到 SQL Server 计算机。

8.

使用其 Add 方法将内容数据库信息添加到 SPVirtualServer 对象的 ContentDatabases 集合中。

p

< class=' _5'>

18.

(有关相关的示例代码,请参阅 RestoreLegacyDocLib() 函数。)检查备份旧式文档库的元数据。如有,则使用可在 Microsoft Exchange Server SDK 中的 Backup and Restore记录的 HrESE API 将其恢复。

p

< class=' _5'>

19.

在恢复旧式文档库后,枚举您的元数据来检查备份文档工作区站点。对于要备份的每个文档工作区站点,通过枚举当前场的 TopologyManager->DocumentWorkspaces 集合来查看配置数据库中是否已存在工作区站点。如果不存在,则使用下列代码(该代码将文档工作区站点添加到场的配置数据库中)创建一个新的 DocumentWorkspace 对象。

// Url = http://newDocumentServer/doclibName ds = tm-

>DefaultDocumentService

DocumentWorkspace * dw = new DocumentWorkspace(backedUPName,

Url, ds);

Then call

tm->DocumentWorkspaces->Add(dw);

p

< class=' _5'>

20.

循环访问以前锁定的、正在运行索引服务的服务器,并调用 ReleaseBackupPermission()

p

< class=' _5'>

21.

完成恢复操作时调用 tm->Lock->Release()

返回页首

小结

本文中的备份和恢复示例说明如何以编程方式开发 SharePoint Portal Server 2003 故障恢复或迁移解决方案。您不应使用本示例作为实际产品的备份解决方案的替代。但是,它非常适合于用作自定义或第三方 ISV 解决方案的原型。

返回页首

其他资源

Microsoft Exchange Server SDK 中的Microsoft SharePoint Products and Technologies2003 SDK

Microsoft Office SharePoint Portal Server 2003Administrator's Guide

Backup and Restore

本文来源:https://www.2haoxitong.net/k/doc/0e0aa534a32d7375a417802b.html

《如何编写用于 SharePoint Portal Server 2003 的备份和恢复应用程序.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式