sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server Transactional Replication Configuration

Transaktionel replikering i SQL Server er en af ​​de mest brugte replikeringsteknikker til at kopiere eller distribuere data på tværs af flere destinationer. I tidligere artikler diskuterede vi SQL Server-replikering og hvordan replikering internt fungerer. Nu er vores mål at se, hvordan man konfigurerer transaktionsreplikering i SQL Server ved hjælp af Backup-tilgangen, og hvordan man tilføjer eller fjerner artikler til replikering korrekt. Uden ordentlige foranstaltninger risikerer vi at ugyldiggøre øjebliksbilledet og står over for nødvendigheden af ​​at omkonfigurere replikering.

Administration af transaktionsreplikering

I mine tidligere artikler gennemgik vi trin-for-trin instruktionerne om nedenstående elementer:

  • Konfigurer distribution
  • Konfigurer udgivelse med mulighed for Snapshot
  • Konfigurer abonnement med mulighed for Snapshot

Mens vi konfigurerede replikering, har vi først konfigureret distributøren. Derefter fortsatte vi med at oprette en publikation og abonnement. For at droppe eller rydde op i replikering skal vi gøre den omvendte proces. Først skal vi slette abonnementet, derefter udgivelsen og til sidst droppe distributøren eller distributionsdatabasen.

I denne artikel prøver vi at droppe den transaktionsreplikering i SQL Server, som vi tidligere har konfigureret. Vi bruger Backup-tilgangen og tilføjer eller fjerner artikler fra replikering på følgende måde:

  • Slet abonnement
  • Drop udgivelse
  • Drop distributør eller distributionsdatabase
  • Ryd fuldstændig op i replikering, hvis nogen af ​​ovenstående trin ikke fungerer korrekt
  • Konfigurer replikering med databasesikkerhedskopiering
  • Slip artikler fra replikering ved hjælp af både Wizard- og T-SQL-tilgangen
  • Tilføj nye artikler til replikering ved hjælp af både Wizard- og T-SQL-tilgangen
  • Tilføj en Stored Procedure-artikel og undersøg forskellen mellem Tabel-artiklen og Stored Procedure-artiklen

Slet abonnement

For at droppe enhver konfigureret replikering skal vi først droppe abonnementet.

I SSMS skal du oprette forbindelse til Publisher-instansen> replikering > Lokale publikationer . Højreklik på abonnementet> Slet eller Slip Abonnement:

SQL Server vil bede dig om at bekræfte din handling:

Klik på Ja for at droppe abonnementet. Dette vil slette abonnementet fuldstændigt.

I min nuværende opsætning er både Publisher og Subscriber på samme instans. Derfor blev der ikke sendt nogen anmodninger om at oprette forbindelse til Subscriber-instansen til validering. I tilfælde af at vi ville have det på en anden forekomst af SQL Server, ville den bede om at oprette forbindelse til Subscriber-forekomsten for at validere, før du sletter Subscriber.

Slipning af publikation bruger internt sp_droppublication procedure, og vi kan bruge denne procedure til manuelt at droppe udgivelsen via T-SQL-tilgangen

Drop udgivelse

Når abonnementet er slettet, kan vi gå videre og droppe publikationen . Højreklik på AdventureWorks_Pub og vælg Slet fra menuen:

Du vil se en meddelelse, der beder dig bekræfte denne handling. Bemærk, at du vil slette publikationen. Alle poster, der blev replikeret til abonnentdatabasen, vil dog ikke blive slettet. Vi bliver nødt til at slippe databasen manuelt for at rydde op i disse replikerede poster. Klik på Ja .

Slipning af en publikation internt anvender sp_droppublication procedure.

Slip distributøren eller distributionsdatabasen

Tidligere nævnte vi, at distributionsdatabasen er en systemdatabase. Derfor kan vi ikke slippe det ved at højreklikke på databasen og vælge sletningsindstillingen ligesom med brugerdatabaser. Hvis vi højreklikker på distributionsdatabasen, får vi kun nedenstående muligheder:

Når vi skal slette distributionsdatabasen, skal vi først højreklikke på replikering node> Deaktiver Udgivelse og distribution .

Det vil åbne guiden.

Som standard er den anden mulighed (Nej, fortsæt med at bruge denne server som udgiver ) er valgt for at undgå utilsigtet tab af alle publikationer på serveren.

I vores tilfælde har vi kun én udgivelse, og vi vil gerne rydde op. Derfor vælger vi den første mulighed – Ja, deaktiver udgivelse på denne server . Det vil slette alle publikationer sammen med abonnementer, hvis det ikke allerede er droppet sammen med deaktivering af distributøren.

Vi kan selv bruge denne guide til at rydde op i alt, hvis vores server kun har én replikering konfigureret. Men hvis der er konfigureret flere replikeringer, dropper vi Transaktionel replikering i SQL Server ved at følge standardtrinene, der er delt ovenfor.

Nu skal vi vælge den første mulighed Ja, deaktiver udgivelse på denne server , og klik på Næste .

I det nye vindue skal du markere begge muligheder:Deaktiver udgivelse og distribution og Generer en scriptfil med trin...

For at generere scriptfilen skal du angive stien, hvor den skal gemmes.

Klik på Næste og se de valgmuligheder, der er valgt i guiden. Tjek og sørg for, at du har valgt alt korrekt.

Klik på Udfør .

Sletning af distributionsdatabasen internt bruger sp_dropdistributor procedure.

Når distributøren er deaktiveret, kan vi se, at distributionsdatabasen er droppet ud af systemdatabaser.

Ryd fuldstændig op i replikering, hvis nogen af ​​ovenstående trin ikke fungerer korrekt

Hvis abonnementet eller publikationen droppes via andre tilgange, lander vi i inkonsekvent fjernelse af transaktionsreplikering i SQL Server og får en masse fejl. For at rydde op i alle rester af abonnement eller udgivelse kan vi bruge systemproceduren sp_removedbreplication .

exec_spremovedbreplication

Udfør kun denne procedure, hvis der stadig er replikeringsproblemer efter at have prøvet alle andre nævnte fremgangsmåder. Lagret procedure sp_removedbreplication skal udføres på Publisher-databasen eller fra masterdatabasen og bruge nedenstående kommando efter at have erstattet @dbname med navnet på Publisher-databasen.

exec_spremovedbreplication @dbname

Konfigurer replikering ved hjælp af sikkerhedskopieringsmetoden

Efter at have fjernet replikeringen fuldstændigt, lad os omkonfigurere transaktionsreplikeringen i SQL Server ved hjælp af Backup-metoden. Det involverer nedenstående trin:

  • Konfigurer distributøren
  • Opret publikationen
  • Rediger publikationsegenskaberne for at gøre det muligt at oprette abonnement fra den fulde eller differentielle sikkerhedskopi.
  • Tag en fuld sikkerhedskopi af Publisher og gendan den som abonnent.
  • Konfigurer abonnement og start initialisering fra sikkerhedskopiering.

Vi har allerede udført de fleste trin tidligere, da vi konfigurerede replikeringen. Derfor vil vi ikke gå i detaljer om disse trin her.

Konfigurer distributør og udgivelse

Se trin-for-trin instruktionerne fra den forrige artikel om, hvordan du konfigurerer både distribution og udgivelse ved hjælp af guiden Opret udgivelse. For at lære de T-SQL-scripts, der bruges af guiden til at oprette distribution og udgivelse, skal du bare generere scripts til en fil under guidens sidste trin og ikke udføre scripts ved at fjerne markeringen i "Opret publikationen" som vist nedenfor. .

Åbn nu scriptfilen, der er gemt i et nyt forespørgselsvindue for at oprette distributøren og publikationen ved hjælp af disse scripts:

Bemærk venligst den anden kommenterede linje - den siger, at alle adgangskodeværdier, vi indtastede i guiden, blev konverteret til NULL eller tom streng af sikkerhedsmæssige årsager. Tag et kig på den fremhævede linje med @password =tomme værdier. Erstat det med de korrekte adgangskodeværdier, gør det samme for andre sektioner med adgangskoder, og kør scriptet.

Scriptet blev udført med succes. Vi kan se, at udførelsen af ​​scripts har skabt distributionsdatabasen og alle systemtabeller inde i den. I slutningen af ​​meddelelsen kan vi se, at Log Reader Agent-jobbet også er blevet oprettet og lanceret.

Hvis det er nødvendigt, kan du gemme resultaterne for at lære om alle tabeller, visninger og kritiske procedurer i distributionsdatabasen. Disse oplysninger vil være nyttige til yderligere fejlfinding.

Efter vellykket eksekvering af scripts kan vi se distributionsdatabasen og publikationen, der er oprettet.

Rediger publikationsegenskaber for at aktivere oprettelse af abonnement fra fuld eller differentiel sikkerhedskopi

Hvis databasestørrelsen er meget lille, vil den tid, der kræves til at sende det indledende snapshot, være hurtigere.

På den anden side er det ikke effektivt at oprette transaktionsreplikering i SQL Server ved hjælp af Snapshot i følgende tilfælde:

  1. Hvis databasen er enorm (300 GB eller mere). Den tid, der kræves til at sende det indledende øjebliksbillede, vil være for lang.
  2. Hvis abonnenten er placeret på tværs af forskellige steder med lav netværksbåndbredde. Derefter vil den indledende snapshot-proces foregå i flere dage.

At lave en fuld sikkerhedskopi, overføre den via FTP eller fysisk til den anden placering, gendanne den sikkerhedskopi og initialisere abonnenten vil være betydeligt hurtigere sammenlignet med Snapshot-tilgangen.

For at gøre det muligt for publikationen at understøtte initialisering fra sikkerhedskopier, skal vi ændre en af ​​publikationsegenskaberne. Det kan gøres enten via SSMS eller T-SQL.

SSMS-tilgang

Højreklik på AdventureWorks_pub udgivelse og vælg Egenskaber :

Klik på Abonnementsindstillinger :

Indstil True for Tillad initialisering fra backupfiler og klik på OK . Dette giver os mulighed for at initialisere fra både fuld og differentiel backup.

T-SQL-tilgang

I T-SQL kan vi kalde proceduren sp_changepublication for at ændre denne egenskab.

Scriptet til at ændre denne egenskab er nedenfor:

USE AdventureWorks
GO
exec sp_changepublication @publication = 'AdventureWorks_pub', @property = 'allow_initialize_from_backup', @value = 'true'

Tag en komplet sikkerhedskopi af Publisher og gendan den som abonnent

En nøglefaktor til at bemærke, at vi skal tage en fuld sikkerhedskopi efter implementering af ovenstående publikationsegenskab. Hvis databasestørrelsen er enorm, kan vi tage en fuld sikkerhedskopi og gendanne den i RECOVERY-tilstanden i Subscriber-forekomsten og tage en differentiel backup efter at have foretaget ovenstående konfigurationsændring og gendanne den i abonnentdatabasen med NORECOVERY-tilstanden.

Konfigurer abonnement og start initialisering fra sikkerhedskopi

Se igen trin-for-trin instruktionerne. Vi skal generere de nødvendige scripts, men udføre dem ikke. Sagen er, at vi vil initialisere abonnementet fra fuld eller differentiel backup kun ved at bruge T-SQL-scripts. Jeg oprettede disse scripts under oprettelsen af ​​abonnementet sidste gang. Se den åbne fil nedenfor.

Bemærk :Scripts til oprettelse af abonnement skal udføres fra Publisher-databasen. Åbn derfor vinduet Forespørgsel, der forbinder til Publisher-forekomsten.

Vi er nødt til at foretage et par ændringer for at Abonnementet kan initialiseres fra backup:

  • Skift @sync_type værdi fra automatisk for at initiere med backup
  • Angiv de korrekte adgangskoder for dem, der erstattes med NULL eller tomme strenge. Da jeg har brugt Agent Service-kontoen på serveren, behøver jeg ikke at ændre adgangskoder.
  • Tilføj parametrene @backupdevicetype og @backupdevicename og angiv stien til fuld eller differentiel backup på Publisher-serveren (scriptet vil blive udført på den).

Når det er gjort, vil vores script se sådan ud:

Udfør scriptet for at fuldføre abonnementskonfigurationen, og vi vil modtage en vellykket gennemførelse af scriptet som vist nedenfor.

Som status angiver, blev distributionsagent SQL Server Agent-jobbet oprettet og startet under oprettelse af abonnementet.

Således har vi skabt vores replikering med succes ved hjælp af Backup-tilgangen. Nu kan vi bekræfte det tilgængelige abonnement.

Start replikeringsmonitoren, og højreklik på abonnenten. Det vil vise replikeringsstatus:

Som vi kan se, er alle data blevet initialiseret fra sikkerhedskopien uden behov for at køre Snapshot Agent-job. Da der ikke sker nogen aktive transaktioner i databasen, får vi beskeden "Ingen replikerede transaktioner er tilgængelige" i Replikeringsmonitor i øjeblikket.

Drop artikler fra replikering

Efter at have lært, hvordan man konfigurerer Transaktionel replikering i SQL Server via replikeringsguiden eller T-SQL-scripts, kan vi nu kontrollere, hvordan man sletter en artikel fra replikeringen via begge disse metoder.

Brug af guiden

Højreklik på AdventureWorks_pub Publikation> Egenskaber . Klik på Artikel for at se listen over artikler inkluderet i Replikering.

Som standard vil den vise databaseobjekterne i formatet OBJECT_NAME (SCHEMA_NAME). Til testformål, lad os droppe Person.ContactType-tabellen fra replikationen.

For det skal du blot fjerne markeringen i feltet før ContactType (Person). SQL Server vil vise advarslen eller bekræftelsesmeddelelsen:

Som det forklarer, hvis der er nogle snapshots tilgængelige i øjeblikket, vil det ugyldiggøre disse snapshots på grund af ændringerne i artikler.

Da vi har initialiseret ved hjælp af Backup-tilgangen og ikke har brugt Snapshots, kan vi roligt ignorere denne meddelelse og klikke på Ja for at fjerne denne tabelartikel fra replikationen. Klik på OK for at fuldføre fjernelse af artiklen fra replikeringen.

Nu Person.ContactType tabellen fjernes fra replikeringen. Eventuelle ændringer, der sker på udgiveren, vil ikke blive sendt til abonnentdatabasen. Vi kan teste dette ved at INSERT/UPDATE/DELETE records på Person.ContactType tabel.

Brug af T-SQL

En anden måde er at droppe en artikel fra replikationen ved hjælp af sp_droparticle procedure.

USE [AdventureWorks]
GO
EXEC sp_droparticle 
  @publication = N'AdventureWorks_pub', 
  @article = N'ContactType',
  @force_invalidate_snapshot = 1;
GO

Tilføj nye artikler til replikering via guiden eller TSQL-metoden

I nogle tilfælde (såsom tabelvedligeholdelse) skal vi muligvis fjerne nogle få artikler og føje dem tilbage til replikeringen, når vedligeholdelsen er fuldført.

Vi har med succes lært, hvordan man fjerner artikler fra replikering. Lad os overveje, hvordan du tilføjer nye artikler til replikering. Vi tilføjer Person.ContactType tabel som vi tidligere har fjernet tilbage til replikering.

Brug af guiden

For at tilføje en tabelartikel tilbage til replikeringen skal du højreklikke på Publikation > Egenskaber > Artikler . Det vil vise listen over tilgængelige artikler i publikationen.

Vi kunne ikke finde Person.ContactType tabel – skærmen viser kun de tabeller, der var en del af replikering. For at se alle tilgængelige tabeller i Publisher-databasen, fjern markeringen Vis kun udvalgte artikler på listen for at se alle tabeller.

Nu kan vi se Person.ContactType tabel anført.

Som vi diskuterede tidligere, vil alle borde uden primærnøgler have en rød cirkel ikon, der indikerer, at disse tabeller ikke kan inkluderes i replikeringen, hverken via Wizard eller T-SQL-tilgangen.

Tjek ContactType (Person) tabel for at tilføje den tilbage til replikeringen, og klik på OK .

Tabellen tilføjes igen til replikeringen. Vi skal dog finde en metode til at sende det indledende øjebliksbillede for denne nyligt tilføjede tabelartikel.

Hvis du har gennemgået artiklen indtil videre, ville du have gættet rigtigt – bare kør Snapshot Agent Job for at sende det indledende øjebliksbillede for denne tabel.

Lad os gøre det nu - højreklik på Publikation > se Snapshot Agent status.

Klik på Start for at sende øjebliksbilledet for kvalificerede artikler. Send disse data til distributionsdatabasen og til sidst til abonnentdatabasen.

T-SQL-tilgang

Vi kan udføre lignende handlinger ved hjælp af sp_addarticle procedure.

Nedenstående script tilføjer artikler til replikeringen.

use [AdventureWorks]
GO
exec sp_addarticle @publication = N'AdventureWorks_pub', @article = N'ContactType', @source_owner = N'Person', @source_object = N'ContactType'
, @type = N'logbased', @description = null, @creation_script = null, @pre_creation_cmd = N'drop', @schema_option = 0x000000000803509F
, @identityrangemanagementoption = N'manual', @destination_table = N'ContactType', @destination_owner = N'Person', @vertical_partition = N'false'
, @ins_cmd = N'CALL sp_MSins_PersonContactType'
, @del_cmd = N'CALL sp_MSdel_PersonContactType'
, @upd_cmd = N'SCALL sp_MSupd_PersonContactType'
GO

Vi har tidligere bemærket, hvordan replikering fungerer for en tabelartikel ved at anvende 3 procedurer, der er oprettet i abonnentdatabasen, til at håndtere INSERT/UPDATE- og DELETE-operationerne.

Ved at bruge T-SQL-tilgangen ved vi, hvordan disse procedurer refereres. Hvis det er nødvendigt, kan vi omdøbe objekter, destinationstabelnavne eller standardprocedurer. Til det vil vi foretage ændringer i sp_addarticle procedure.

BEMÆRK :Hvis vi foretager ændringer af replikeringen, bør vi dokumentere dem alle korrekt. Ellers kan det føre til en katastrofe senere.

Tilføj en artikel med lagret procedure, og undersøg forskellen mellem en artikel i tabel og en artikel om lagret procedure

For at tilføje en lagret procedure til replikeringen skal vi gå til Artikler side og tjek den påkrævede Stored Procedure for at få den replikeret. Vi kan gøre det samme for Visninger , Indekserede visninger eller Brugerdefinerede funktioner også.

For at lære mere om forskellen mellem tabelartikler vs visninger/ lagret procedure/ indekserede visninger/brugerdefinerede funktioner kan vi tilføje en af ​​hver artikel for hver kategori ved hjælp af T-SQL:

Tilføjelse af en ny Stored Procedure-artikel til replikering

use [AdventureWorks]
exec sp_addarticle @publication = N'AdventureWorks_pub', @article = N'uspGetBillOfMaterials', @source_owner = N'dbo'
, @source_object = N'uspGetBillOfMaterials', @type = N'proc schema only', @description = null, @creation_script = null
, @pre_creation_cmd = N'drop', @schema_option = 0x0000000008000001, @force_invalidate_snapshot = 1
, @destination_table = N'uspGetBillOfMaterials', @destination_owner = N'dbo'

Tilføjelse af en ny visningsartikel til replikering

use [AdventureWorks]
exec sp_addarticle @publication = N'AdventureWorks_pub', @article = N'vVendorWithContacts', @source_owner = N'Purchasing'
, @source_object = N'vVendorWithContacts', @type = N'view schema only', @description = null, @creation_script = null, @pre_creation_cmd = N'drop'
, @schema_option = 0x0000000008000001, @destination_table = N'vVendorWithContacts', @destination_owner = N'Purchasing'
GO

Tilføjelse af en ny artikel med indekseret visning til replikering

use [AdventureWorks]
exec sp_addarticle @publication = N'AdventureWorks_pub', @article = N'vStateProvinceCountryRegion', @source_owner = N'Person'
, @source_object = N'vStateProvinceCountryRegion', @type = N'indexed view schema only', @description = null, @creation_script = null
, @pre_creation_cmd = N'drop', @schema_option = 0x0000000008000001, @force_invalidate_snapshot = 1
, @destination_table = N'vStateProvinceCountryRegion', @destination_owner = N'Person'

Tilføjelse af en ny brugerdefineret funktionsartikel til replikering

use [AdventureWorks]
exec sp_addarticle @publication = N'AdventureWorks_pub', @article = N'ufnGetStock', @source_owner = N'dbo', @source_object = N'ufnGetStock'
, @type = N'func schema only', @description = null, @creation_script = null, @pre_creation_cmd = N'drop', @schema_option = 0x0000000008000001
, @force_invalidate_snapshot = 1, @destination_table = N'ufnGetStock', @destination_owner = N'dbo'

Vi bruger sp_addarticle procedure for at tilføje enhver type artikel til replikeringen med de nødvendige inputparametre og muligheder, der ændrer den inkluderede @type parameter.

Vi kan også tilføje disse artikler til publikationen ved at højreklikke på Publikation > Egenskaber > Artikler og tilføje dem til publikationen.

Tabel artikelegenskaber

Lad os nu ændre artiklens egenskaber via Artikler menuen i Publikation egenskaber:

Klik på vores foretrukne Person.ContactType tabel> Artikelegenskaber . Der vil være en mulighed for enten at ændre Artikelegenskaberne kun for denne tabel eller alle tabeller inkluderet i replikationen. Til en test vælger vi Indstil egenskaber for fremhævet tabelartikel for at se egenskaberne for Person.ContactType tabel.

Se alle tilgængelige muligheder for denne tabelartikel:

Kopiér objekter og indstillinger til abonnent og Erklæringslevering er de vigtigste indstillinger for replikeringen. Vi skal være meget forsigtige med at ændre nogen af ​​disse parametre.

Klik på INSERT\UPDATE\DELETE leveringsformatet for at få nedenstående muligheder.

  • Repliker ikke INSERT\UPDATE\DELETE-sætninger – for at tilpasse replikering til ikke at sende specifikke kommandoer til abonnentdatabasen
  • INSERT\UPDATE\DELETE-sætning – for at sende INSERT\UPDATE\DELETE-sætning direkte til abonnenten i stedet for at rekonstruere dataene fra transaktionslogfiler
  • CALL – Udfør den indbyggede lagrede procedure vist ovenfor i sp_addarticle at replikere data.
  • XCALL – Udfør udvidet lagret procedure for at replikere ændringerne.

Artikelegenskaber for lagret procedure

Klik på Artikelegenskaber på en af ​​de lagrede procedurer for at se egenskaberne

En af nøgleegenskaberne ved den lagrede procedure er Replikeringsmuligheden – se de tilgængelige muligheder nedenfor:

  • Kun definition af lagret procedure – replikerer kun ændringer i den lagrede procedures DDL-struktur. Dette er standardindstillingen for enhver lagret procedure.
  • Udførelse af den lagrede procedure – brug denne mulighed for at reducere replikeringsbelastningen. Den udfører alle ændringer via udførelse af lagret procedure på abonnent uden at sende individuelle kommandoer. Vi kan se om denne funktion for at løse ydeevneproblemer, mens vi replikerer enorme dataændringer i min næste artikel.
  • Udførelse i en serialiseret transaktion af SP – en hybrid mulighed for at vælge Udførelse af lagret procedure kun hvis proceduren udføres inden for en serialiseret transaktion. Ellers ville det blive replikeret som individuelle DML-kommandoer.

Se artikelegenskaber

Klik på Artikelegenskaber for enhver visning for at få egenskaberne :

Artikelegenskaber for indekseret visning

Klik på Artikelegenskaber for enhver af de indekserede visninger for egenskaberne :

Brugerdefinerede funktionsartikelegenskaber

Klik på Artikelegenskaber på enhver brugerdefineret funktion for dens egenskaber

Egenskaber for visninger, indekserede visninger og brugerdefinerede funktioner er stort set de samme. Derfor kan vi ikke tilpasse dem meget.

Konklusion

Tak, fordi du gik igennem endnu en kraftfuld artikel relateret til replikering. I dag har vi afklaret detaljerne om at droppe abonnement, udgivelse, distributionsdatabase og rydde fuldstændig op i replikeringen, selvom vi støder på problemer.

Vi har konfigureret en replikering, der for nylig er initialiseret fra sikkerhedskopien og testet, hvordan man tilføjer nye artikler til replikeringen eller fjerner dem fra den. I det videre arbejde med databaser og i særdeleshed at finde uoverensstemmelserne imellem dem, vil du have stor gavn af de professionelle værktøjer. dbForge Compare Bundle til SQL Server identificerer og analyserer alle sådanne forskelle og rapporterer dem.

I vores næste artikel vil vi undersøge hyppige replikeringsproblemer, og hvordan man løser dem professionelt.


  1. Syntaksfejl på grund af brug af et reserveret ord som et tabel- eller kolonnenavn i MySQL

  2. Sådan sikkerhedskopieres din Moodle MySQL-database

  3. Eksempler på konvertering af 'dato' til 'datetime offset' i SQL Server (T-SQL)

  4. Er der nogen gratis værktøjer til at generere 'INSERT INTO'-scripts i MS SQL Server?