Dela via


Beroenden mellan komponenter som hanteras av olika skrivare

Det finns situationer där data från en skrivare är beroende av data som hanteras av en annan skrivare. I dessa fall bör du säkerhetskopiera eller återställa data från båda skrivarna.

VSS hanterar det här problemet genom begreppet explicit skrivarkomponentberoende och IVssWMDependency gränssnitt.

En skrivare lägger till ett eller flera beroenden när dokumentet skrivarmetadata skapas med hjälp av metoden IVssCreateWriterMetadata::AddComponentDependency. Skrivaren skickar metoden namnet och den logiska sökvägen för den beroende komponenten (som den hanterar), samt namnet och den logiska sökvägen och skrivarklass-ID (GUID som identifierar klassen) för komponenten som den är beroende av.

När det här beroendet har upprättats informerar det beställaren om att både den beroende komponenten och målen för dess beroenden måste delta under alla säkerhetskopierings- eller återställningsåtgärder.

En viss komponent kan ha flera beroenden, vilket kräver att den och alla dess beroende mål deltar i säkerhetskopieringen och återställningen tillsammans.

Den beroende komponenten och/eller målen för dess beroenden kan inkluderas antingen uttryckligen eller implicit i en säkerhetskopiering eller återställning.

Den explicita beroendemekanismen för skrivarkomponenter bör inte användas för att skapa ett beroende mellan två komponenter på samma skrivare. Urvalsreglerna kan tillhandahålla samma funktioner effektivare utan risk för cirkulära beroenden.

Till exempel kan IVssCreateWriterMetadata::AddComponentDependency användas för att definiera beroendet av komponenten writerData (med logisk sökväg "") för författaren MyWriter på komponenten internetData (med en logisk sökväg av "Anslutningar") för en författare med namnet InternetConnector med ett skrivklass-ID X. (Även om det är möjligt för flera författare med samma klass-ID att vara på systemet samtidigt, förvirring undviks eftersom kombinationen av logisk sökväg och komponentnamn är unik i systemet under VSS.)

En skrivare lägger till flera beroenden till en viss komponent genom att anropa IVssCreateWriterMetadata::AddComponentDependency upprepas med olika komponenter från olika skrivare. Antalet andra komponenter som en viss komponent är beroende av kan hittas genom att undersöka cDependencies medlem i VSS_COMPONENTINFO struktur.

En skrivare eller begärande hämtar instanser av gränssnittet IVssWMDependency med IVssWMComponent::GetDependency. IVssWMDependency- returnerar komponentnamnet, den logiska sökvägen och klass-ID:t för författaren som hanterar komponenten som är målet för beroendet.

Beroendemekanismen föreskriver inte någon särskild prioritetsordning mellan den beroende komponenten och målen för dess beroenden. Som nämnts ovan betyder allt ett beroende att när en viss komponent antingen säkerhetskopieras eller återställs måste komponenten eller komponenterna som den är beroende av säkerhetskopieras eller återställas också. Den exakta implementeringen av beroendet är enligt säkerhetskopieringsprogrammets gottfinnande.

I fallet ovan beror till exempel komponenten writerData (logisk sökväg "") på komponenten InternetConnector (logisk sökväg "Anslutningar"). En begärande kan tolka detta på något av följande sätt:

  • Om den beroende komponenten, writerData, väljs (implicit eller explicit) för säkerhetskopiering eller återställning måste beställaren (antingen implicit eller explicit) välja målet för sitt beroende, internetData
  • Om målet för dess beroende, internetData, inte har valts för säkerhetskopiering, bör den beroende komponenten, writerData, inte väljas.

Men när utvecklarna utvecklar stöd för beroenden bör de vara medvetna om att det inte finns något sätt för en skrivare att avgöra om en av dess komponenter är ett mål för ett beroende.

Deklarera fjärrberoenden

Ett distribuerat program är ett program som kan konfigureras att använda en eller flera datorer i taget. Vanligtvis körs programmet på en eller flera programserverdatorer och kommunicerar med (men kanske eller kanske inte körs på) en eller flera databasserverdatorer. Den här konfigurationen kallas ibland för en distribution med flera system. Ofta kan samma program också konfigureras för att köras på en enda dator som kör både en programserver och en databasserver. En sådan konfiguration kallas för en distribution med ett enda system. I båda konfigurationerna har programservern och databasservern var och en sina egna oberoende VSS-skrivare.

Om en komponent som hanteras av programmets skrivare i en distribution med flera system är beroende av en fjärrkomponent som hanteras av databasserverns skrivare kallas detta för ett fjärrberoende. (En distribution med ett enda system har däremot endast lokala beroenden.)

Som ett exempel på en distribution med flera system bör du överväga en programserver som använder en SQL Server-databasserver som ett datalager. Programspecifika data, som innehåller webbdelar, webbinnehållsfiler och IIS-metabasen, finns på en eller flera datorer som kallas webbservrar på klientsidan. Det faktiska SQL-datalagret, som innehåller konfigurationsdatabasen och flera innehållsdatabaser, finns på en eller flera andra datorer, som kallas serverdelsdatabasservrar. Var och en av klientwebbservrarna innehåller samma programspecifika innehåll och konfiguration. Var och en av serverdelsdatabasservrarna kan vara värd för någon av innehållsdatabaserna eller konfigurationsdatabasen. Programmet körs endast på klientwebbservrarna, inte på databasservrarna. I den här konfigurationen har programmets VSS-skrivare fjärrberoenden på de komponenter som hanteras av SQL-skrivaren.

En skrivare kan deklarera ett fjärrberoende genom att anropa metoden AddComponentDependency, som väntar på "\\RemoteComputerName\", där RemoteComputerName är namnet på den dator där fjärrkomponenten finns, till den logiska sökvägen i parametern wszOnLogicalPath. Värdet för RemoteComputerName kan vara en IP-adress eller ett datornamn som returneras av funktionen GetComputerNameEx.

Windows Server 2003: En skrivare kan inte deklarera fjärrberoenden förrän Windows Server 2003 med Service Pack 1 (SP1).

För att identifiera ett beroende anropar en begärande GetWriterId, GetLogicalPathoch GetComponentName metoder för IVssWMDependency-gränssnittet. Beställaren måste undersöka komponentnamnet som GetComponentName returnerar i parametern pbstrComponentName. Om komponentnamnet börjar med "\\" måste beställaren förutsätta att det anger ett fjärrberoende och att den första komponenten efter "\\" är RemoteComputerName som angavs när skrivaren heter AddComponentDependency. Om komponentnamnet inte börjar med "\\" bör beställaren anta att det anger ett lokalt beroende.

Om det finns ett fjärrberoende måste beställaren säkerhetskopiera fjärrkomponenten när den säkerhetskopierar den lokala komponenten. Om du vill säkerhetskopiera fjärrkomponenten ska beställaren ha en agent på fjärrdatorn och initiera säkerhetskopieringen på fjärrdatorn.

Strukturera fjärrberoenden

Det är viktigt att förstå att ett beroende inte är en komponent i sig själv. En komponent är nödvändig för att hålla beroendet.

I följande exempel visas två sätt att strukturera en uppsättning beroenden.

Example 1:
    Writer 1
        Component A
            File A
            File B
            Dependency (SQL/MSDE Writer, Component X, "\")
            Dependency (SQL/MSDE Writer, Component Y, "\")

Example 2:
    Writer 2
        Component A
            File A
            File B
        Component B
            Dependency (SQL/MSDE Writer, Component X, "\")
            Dependency (SQL/MSDE Writer, Component Y, "\")

I exempel 1 lagras beroendena av komponent A. Eftersom endast komponenter kan väljas, inte enskilda filer, måste strukturering av komponent A:s beroenden på det här sättet kräva att hela komponenten, både filerna och beroendena, alltid måste säkerhetskopieras och återställas tillsammans. De kan inte säkerhetskopieras eller återställas individuellt.

I exempel 2 innehåller separata komponenter (komponenterna A och B) var och en av beroendena. I det här fallet kan de två komponenterna väljas oberoende av varandra och därför säkerhetskopieras och återställas oberoende av varandra. Genom att strukturera beroendena på det här sättet blir ett distribuerat program mycket mer flexibelt när det gäller att hantera sina fjärrberoenden.

Stöd för fjärrberoenden

En begärande kan ge fullständigt eller partiellt stöd för fjärrberoenden.

För att ge fullständig support bör beställaren göra följande vid säkerhetskopierings- och återställningstiden.

Vid säkerhetskopieringen måste beställaren starta säkerhetskopian på klientdelsdatorn (lokal), fastställa de beroenden som finns och buffrar ytterligare säkerhetskopieringsjobb för att samla in serverdelsdatabaserna. Beställaren måste vänta tills säkerhetskopieringsjobben på fjärrdatorn har slutförts innan den anropar IVssBackupComponents::SetBackupSucceeded och IVssBackupComponents::BackupComplete metoder. Om beställaren väntar tills säkerhetskopieringen av serverdelskomponenterna har slutförts innan den anropar BackupComplete, skapar detta en enklare återställningsbar säkerhetskopia för en skrivare som implementerar ytterligare förbättringar, till exempel topologilåsning, till exempel, under säkerhetskopieringen. Följande procedur beskriver vad beställaren bör göra:

  1. På den lokala datorn anropar beställaren IVssBackupComponents::InitializeForBackup, IVssBackupComponents::GatherWriterMetadata, IVssBackupComponents::P repareForBackupoch IVssBackupComponents::D oSnapshotSet metoder.
  2. När den lokala skuggkopian har slutförts, men innan säkerhetskopieringen har slutförts, spolar beställaren ytterligare säkerhetskopieringsjobb genom att skicka en begäran till agenten på fjärrdatorn.
  3. På fjärrdatorn utför den GatherWriterMetadatagenom att anropa InitializeForBackup, GatherWriterMetadata, PrepareForBackup, DoSnapshotSet, SetBackupSucceededoch BackupComplete.
  4. När beställarens agent har slutfört de buffrade jobben på fjärrdatorn slutför beställaren säkerhetskopieringssekvensen genom att anropa SetBackupSucceeded och BackupComplete.

Vid återställningstiden måste beställaren starta återställningen med klientdelsdatorn (lokal) och välja de komponenter och deras beroenden som ska återställas och sedan skicka händelsen PreRestore genom att anropa IVssBackupComponents::P reRestore-metoden. Beställaren ska sedan buffra serverdelsåterställningsjobben på fjärrdatorn och anropa metoden IVssBackupComponents::P ostRestore när serverdelsåterställningarna är slutförda. Det här kravet ger klientdelsskrivaren mer kontroll över återställningsupplevelsen och en bättre användarupplevelse för administratörer överlag. Eftersom säkerhetskopiorna i vart och ett av systemen inte sker vid samma tidpunkt måste klientdelsskrivaren utföra viss rensning av serverdelsdata. I exempelprogrammet som beskrivs i föregående "Deklarera fjärrberoenden" bör skrivaren initiera en platsommappning eller omindexering efter att en återställning av en av serverdelsdatabaserna har slutförts. För att göra detta måste skrivaren ta emot händelser på klientdelsservern. Följande procedur beskriver vad beställaren bör göra:

  1. På den lokala datorn requester anropar IVssBackupComponents::InitializeForRestore, GatherWriterMetadata, IVssBackupComponents:::SetSelectedForRestore (eller IVssBackupComponentsEx::SetSelectedForRestoreEx) och PreRestore.
  2. När PreRestore-fasen har slutförts, men innan PostRestore- fas börjar, spolar begärandehanteraren ytterligare återställningsjobb genom att skicka en begäran till sin agent på fjärrdatorn.
  3. På fjärrdatorn begärandeagenten utför de buffrade återställningsjobben genom att anropa InitializeForRestore, GatherWriterMetadata, SetSelectedForRestore, PreRestore, SetFileRestoreStatus (eller SetSelectedForRestoreEx) och PostRestore.
  4. När begärandeagenten har slutfört de buffrade jobben på fjärrdatorn slutför beställaren återställningssekvensen genom att anropa IVssBackupComponents::SetFileRestoreStatus och PostRestore.

För att tillhandahålla partiellt stöd för fjärrberoenden måste beställaren följa fjärrberoenden och inkludera dem som en del av säkerhetskopieringen, men ordningen på händelser på klientdels- och serverdelssystem som beskrivs i de föregående två procedurerna skulle inte krävas. För en begärande som endast implementerar partiellt stöd bör beställaren läsa dokumentationen för säkerhetskopiering/återställning av skrivarprogrammet för att förstå vilka scenarier som kan stödjas.