begin process at 2008 08 08 23:17:52
1 223 648 membres
406 nouveaux aujourd'hui
14 230 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DUMP LOAD D'UNE BASE DE DONNÉES


Information sur la source

Catégorie :Migration Classé sous : DUMP, LOAD, BASE, MIGRATION Niveau : Initié Date de création : 14/11/2007 Date de mise à jour : 14/11/2007 15:08:20 Vu / téléchargé: 2 401 / 44

Note :
Aucune note

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note


Description

dans le cas du passage de SQL 7 à SQL 2000 j'ai été confronté à un probleme. Le classement entre ces 2 moteurs avaient changé.
plusieurs options sont donc possible :
1 - installé SQL 2000 avec le meme classement que sql 7
2 - transférer les données d'une base sql 7 vers sql 2000

j'ai choisi cette seconde option et comme mes clients n'ont pas tous l'outil d'import et d'export de sql, j'ai écrit ce petit script.

Source

  • -- Script de Dump et de load des données d'une base vers une autre
  • -- Note :
  • -- Les 2 bases doivent avoir la meme structure
  • -- si il existe des données dans la base de destination, elles seront supprimées
  • -- Les 2 bases doivent être installées sur le même moteur
  • -- le transfert des données passant par un dossier disque, ne pas oublier de le créer avant
  • -- il est conseillé de désactiver les contraintes d'intégrité avant de lancer le traitement
  • --
  • Set NOCOUNT ON
  • go
  • Declare @BaseSource VarChar(50)
  • Declare @BaseDest VarChar(50)
  • Declare @TableName VarChar(50)
  • Declare @CmdExport VarChar(2000)
  • Declare @CmdImport VarChar(2000)
  • Declare @Requete VarChar(5000)
  • Set @BaseSource = 'NombaseSource'
  • Set @BaseDest = 'Nombasedest'
  • Exec master..Xp_CmdShell 'Del C:\Dump\*.Txt', NO_OUTPUT
  • Exec master..Xp_CmdShell 'Del C:\Dump\Log\*.Log', NO_OUTPUT
  • Declare Cur_Table Cursor For
  • Select name from sysobjects where type='U'
  • And (name like 'T\_%' escape '\' Or name like 'W\_%' escape '\' Or name like 'X\_%' escape '\')
  • Order by Name
  • Open Cur_Table
  • Fetch Next From Cur_Table Into @TableName
  • While @@Fetch_Status = 0
  • Begin
  • Print ''
  • Print '----------> ' + Upper(@TableName) + ' <----------'
  • Print 'Export dans C:\Dump\' + @TableName + '.txt à partir de ' + @BaseSource + '.Dbo.' + @TableName
  • Set @CmdExport = 'BCP "' + @BaseSource + '.Dbo.' + @TableName + '" Out "c:\Dump\' + @TableName + '.txt" -n -V 70 -U sa -P bigboss -E -e C:\Dump\Log\' + @TableName + '_Exp.log -a 65535 -m 10000 -R'
  • --Print @CmdExport
  • Exec master..Xp_CmdShell @CmdExport, NO_OUTPUT
  • --
  • Print 'Vidage de la table ' + @BaseDest + '.Dbo.' + @TableName + ' avant import'
  • Set @Requete = 'Delete ' + @BaseDest + '.Dbo.' + @TableName
  • Exec (@Requete)
  • --
  • Print 'Import dans ' + @BaseDest + '.Dbo.' + @TableName + ' à partir de C:\Dump\' + @TableName + '.txt'
  • Set @CmdImport = 'BCP "' + @BaseDest + '.Dbo.' + @TableName + '" In "c:\Dump\' + @TableName + '.txt" -n -V 70 -U sa -P bigboss -E -e C:\Dump\Log\' + @TableName + '_Imp.log -a 65535 -m 10000 -R'
  • Print @CmdImport
  • Exec master..Xp_CmdShell @CmdImport, NO_OUTPUT
  • Fetch Next From Cur_Table Into @TableName
  • End
  • Close Cur_Table
  • Print ''
  • Print ''
  • Print '----------> Contrôle du nombre d''enregistrements transférés <----------'
  • Open Cur_Table
  • Fetch Next From Cur_Table Into @TableName
  • While @@Fetch_Status = 0
  • Begin
  • Print 'Contrôle de la table : ' + @TableName
  • Set @Requete = 'Declare @NbLgBaseSource Int
  • If Exists(Select Name From ' + @BaseSource + '.Dbo.SysObjects Where Name = ''' + @TableName + ''')
  • Begin
  • Select @NbLgBaseSource = Count(*) From ' + @BaseSource + '.Dbo.' + @TableName + '
  • End
  • Else
  • Begin
  • Set @NbLgBaseSource = 0
  • End
  • Declare @NbLgBaseDest Int
  • If Exists(Select Name From ' + @BaseDest + '.Dbo.SysObjects Where Name = ''' + @TableName + ''')
  • Begin
  • Select @NbLgBaseDest = Count(*) From ' + @BaseDest + '.Dbo.' + @TableName + '
  • End
  • Else
  • Begin
  • Set @NbLgBaseDest = 0
  • End
  • If @NbLgBaseSource <> @NbLgBaseDest
  • Begin
  • Print ''ERREUR --- Nombre de ligne différent entre ' + @BaseSource + '.Dbo.' + @TableName + ''' + ''('' + Cast(@NbLgBaseSource as VarChar) +
  • '') et ' + @BaseDest + '.Dbo.' + @TableName + ''' + ''('' + Cast(@NbLgBaseDest as VarChar) + '')''
  • End'
  • --print @requete
  • Exec (@Requete)
  • Fetch Next From Cur_Table Into @TableName
  • End
  • Close Cur_Table
  • Deallocate Cur_Table
  • Print 'Traitement terminé !'
  • Set NOCOUNT OFF
-- Script de Dump et de load des données d'une base vers une autre 
-- Note : 
--	Les 2 bases doivent avoir la meme structure
--      si il existe des données dans la base de destination, elles seront supprimées
--      Les 2 bases doivent être installées sur le même moteur
--      le transfert des données passant par un dossier disque, ne pas oublier de le créer avant
--	il est conseillé de désactiver les contraintes d'intégrité avant de lancer le traitement
--      
Set NOCOUNT ON
go
Declare @BaseSource 	VarChar(50)
Declare @BaseDest 	VarChar(50)
Declare @TableName	VarChar(50)
Declare @CmdExport	VarChar(2000)
Declare @CmdImport	VarChar(2000)
Declare @Requete	VarChar(5000)
Set @BaseSource = 'NombaseSource'
Set @BaseDest   = 'Nombasedest'
Exec master..Xp_CmdShell 'Del C:\Dump\*.Txt', NO_OUTPUT
Exec master..Xp_CmdShell 'Del C:\Dump\Log\*.Log', NO_OUTPUT

Declare Cur_Table Cursor For
	Select name from sysobjects where type='U'
	And (name like 'T\_%' escape '\' Or name like 'W\_%' escape '\' Or name like 'X\_%' escape '\')
	Order by Name

Open Cur_Table
Fetch Next From Cur_Table Into @TableName
While @@Fetch_Status = 0 
Begin
	Print ''
	Print '----------> ' + Upper(@TableName) + ' <----------'

	Print 'Export dans C:\Dump\' + @TableName + '.txt à partir de ' + @BaseSource + '.Dbo.' + @TableName
	Set @CmdExport = 'BCP "' + @BaseSource + '.Dbo.' + @TableName + '" Out "c:\Dump\' + @TableName + '.txt" -n -V 70 -U sa -P bigboss -E -e C:\Dump\Log\' + @TableName + '_Exp.log -a 65535 -m 10000 -R'
 	--Print @CmdExport
	Exec master..Xp_CmdShell @CmdExport, NO_OUTPUT
-- 
 	Print 'Vidage de la table ' +  @BaseDest + '.Dbo.' + @TableName + ' avant import'
 	Set @Requete = 'Delete ' +  @BaseDest + '.Dbo.' + @TableName 
 	Exec (@Requete)
-- 
 	Print 'Import dans ' +  @BaseDest + '.Dbo.' + @TableName + ' à partir de C:\Dump\' + @TableName + '.txt' 	
 	Set @CmdImport = 'BCP "' + @BaseDest + '.Dbo.' + @TableName + '" In "c:\Dump\' + @TableName + '.txt" -n -V 70 -U sa -P bigboss -E -e C:\Dump\Log\' + @TableName + '_Imp.log -a 65535 -m 10000 -R'
 	Print @CmdImport
	Exec master..Xp_CmdShell @CmdImport, NO_OUTPUT

	Fetch Next From Cur_Table Into @TableName
End
Close Cur_Table

Print ''
Print ''
Print '----------> Contrôle du nombre d''enregistrements transférés <----------'
Open Cur_Table
Fetch Next From Cur_Table Into @TableName
While @@Fetch_Status = 0 
Begin
	Print 'Contrôle de la table : ' + @TableName
	Set @Requete = 'Declare @NbLgBaseSource Int
			If Exists(Select Name From ' + @BaseSource + '.Dbo.SysObjects Where Name = ''' + @TableName + ''')
			Begin
				Select @NbLgBaseSource = Count(*) From ' + @BaseSource + '.Dbo.' + @TableName + '
			End
			Else
			Begin
				Set @NbLgBaseSource = 0
			End
			Declare @NbLgBaseDest	Int
			If Exists(Select Name From ' + @BaseDest + '.Dbo.SysObjects Where Name = ''' + @TableName + ''')
			Begin
				Select @NbLgBaseDest = Count(*) From ' + @BaseDest + '.Dbo.' + @TableName + '
			End
			Else
			Begin
				Set @NbLgBaseDest = 0
			End
			If @NbLgBaseSource <> @NbLgBaseDest
			Begin
				Print ''ERREUR --- Nombre de ligne différent entre ' + @BaseSource + '.Dbo.' + @TableName + ''' + ''('' + Cast(@NbLgBaseSource as VarChar) + 
				'') et ' + @BaseDest + '.Dbo.' + @TableName + ''' + ''('' + Cast(@NbLgBaseDest as VarChar) + '')''
			End'
	--print @requete
	Exec (@Requete)
	Fetch Next From Cur_Table Into @TableName
End
Close Cur_Table
Deallocate Cur_Table
Print 'Traitement terminé !'

Set NOCOUNT OFF

Conclusion

cez n'est peut etre pas la meilleure solution mais en tout cas cela marche.

a vos claviers pour les critiques

Pat
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

14 novembre 2007 15:08:20 :
Faute de frappe dans la description
    Aucun commentaire pour le moment.

Ajouter un commentaire

Pub



Appels d'offres

Snippets en rapport

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS