Recherche

Articles et tutoriaux
De petits articles sous forme de tutoriaux.

Script de restore sql server : récupération de la dernière sauvegarde et publication vers une base de données avec un autre nom
Note des utilisateurs: / 4
MauvaisTrès bien 
Écrit par Romain Ferraton   

Un script de restore database ms sql server avec récupération de la dernière sauvegarde effectuée sur le serveur (ou récupération directe d'une sauvegarde via un chemin).

Ce script est capable de récupérer les différents fichiers de la sauvegarde et de construire une commande de restauration en changeant la destination des fichiers cibles.

Restore Database
 
 	USE [master]
	GO
 
 
	CREATE PROC [dbo].[sp_RestoreDB]
	  @p_strDBNameTo SYSNAME,
	  @p_strDBNameFrom SYSNAME,
	  @p_strFQNRestoreFileName VARCHAR(255) = '',
	  @p_Debug BIT=0
	AS 
	BEGIN
	  DECLARE 
		@v_strDBFilename VARCHAR(100),
		@v_strDBLogFilename VARCHAR(100),
		@v_strDBDataFile VARCHAR(100),
		@v_strDBLogFile VARCHAR(100),
		@v_strExecSQL NVARCHAR(2000),
		@v_strExecSQL1 NVARCHAR(2000),
		@v_strMoveSQL NVARCHAR(4000),
		@v_strREPLACE NVARCHAR(50),
		@v_strTEMP NVARCHAR(1000),
		@v_strListSQL NVARCHAR(4000),
		@v_strRestFLSQL NVARCHAR(4000),
		@v_strServerVersion NVARCHAR(20)
 
	  SET @v_strREPLACE = ''  
	  IF exists (SELECT name FROM sys.databases WHERE name = @p_strDBNameTo)
		SET @v_strREPLACE = ', REPLACE'
 
	   IF @p_strFQNRestoreFileName='' 
		BEGIN
		 SET @p_strFQNRestoreFileName= (SELECT TOP (1) physical_device_name
				FROM         
					msdb.dbo.backupmediafamily AS BUMF 
					INNER JOIN msdb.dbo.backupmediaset AS BUMS ON BUMF.media_set_id = BUMS.media_set_id 
					INNER JOIN msdb.dbo.backupfile AS BUF 
					INNER JOIN msdb.dbo.backupset AS BUS ON BUF.backup_set_id = BUS.backup_set_id ON BUMS.media_set_id = BUS.media_set_id
				WHERE type='D' and logical_name=@p_strDBNameFrom
		ORDER BY backup_start_date DESC)	
		END
 
	  --PRINT 'Physical File To Restore : ' + @p_strFQNRestoreFileName
 
	  SET @v_strListSQL = ''
	  SET @v_strListSQL = @v_strListSQL + 'IF (EXISTS (SELECT * FROM tempdb.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = ''##FILE_LIST''))'
	  SET @v_strListSQL = @v_strListSQL + 'BEGIN'
	  SET @v_strListSQL = @v_strListSQL + '  DROP TABLE ##FILE_LIST '
	  SET @v_strListSQL = @v_strListSQL + 'END '
 
	  SET @v_strListSQL = @v_strListSQL + 'CREATE TABLE ##FILE_LIST ('
	  SET @v_strListSQL = @v_strListSQL + '  LogicalName VARCHAR(64),'
	  SET @v_strListSQL = @v_strListSQL + '  PhysicalName VARCHAR(130),'
	  SET @v_strListSQL = @v_strListSQL + '  [Type] VARCHAR(1),'
	  SET @v_strListSQL = @v_strListSQL + '  FileGroupName VARCHAR(64),'
	  SET @v_strListSQL = @v_strListSQL + '  Size DECIMAL(20, 0),'
	  SET @v_strListSQL = @v_strListSQL + '  MaxSize DECIMAL(25,0),'
	  SET @v_strListSQL = @v_strListSQL + '  FileID bigint,'
	  SET @v_strListSQL = @v_strListSQL + '  CreateLSN DECIMAL(25,0),'
	  SET @v_strListSQL = @v_strListSQL + '  DropLSN DECIMAL(25,0),'
	  SET @v_strListSQL = @v_strListSQL + '  UniqueID UNIQUEIDENTIFIER,'
	  SET @v_strListSQL = @v_strListSQL + '  ReadOnlyLSN DECIMAL(25,0),'
	  SET @v_strListSQL = @v_strListSQL + '  ReadWriteLSN DECIMAL(25,0),'
	  SET @v_strListSQL = @v_strListSQL + '  BackupSizeInBytes DECIMAL(25,0),'
	  SET @v_strListSQL = @v_strListSQL + '  SourceBlockSize INT,'
	  SET @v_strListSQL = @v_strListSQL + '  filegroupid INT,'
	  SET @v_strListSQL = @v_strListSQL + '  loggroupguid UNIQUEIDENTIFIER,'
	  SET @v_strListSQL = @v_strListSQL + '  differentialbaseLSN DECIMAL(25,0),'
	  SET @v_strListSQL = @v_strListSQL + '  differentialbaseGUID UNIQUEIDENTIFIER,'
	  SET @v_strListSQL = @v_strListSQL + '  isreadonly BIT,'
	  SET @v_strListSQL = @v_strListSQL + '  ispresent BIT'
 
	  SELECT @v_strServerVersion =CAST(SERVERPROPERTY ('PRODUCTVERSION') AS NVARCHAR) 
 
	  IF @v_strServerVersion LIKE '1%.%' 
		BEGIN
		  SET @v_strListSQL = @v_strListSQL + ', TDEThumbpr DECIMAL'
		  PRINT 'SQL Server Version : ' + @v_strServerVersion
		END
 
 
 
	  SET @v_strListSQL = @v_strListSQL + ')'
	  --PRINT @v_strListSQL 
	  EXEC (@v_strListSQL)
 
	  SET @v_strRestFLSQL = 'RESTORE FILELISTONLY FROM DISK = N''' + @p_strFQNRestoreFileName + ''''
 
	  --PRINT @v_strRestFLSQL
 
	  INSERT INTO ##FILE_LIST EXEC (@v_strRestFLSQL)
 
 
 
	  DECLARE curFileLIst CURSOR FOR 
		SELECT 'MOVE N''' + LogicalName + ''' TO N''' + REPLACE(PhysicalName, @p_strDBNameFrom, @p_strDBNameTo) + ''''
		 FROM ##FILE_LIST
 
	  SET @v_strMoveSQL = ''
 
	  OPEN curFileList 
	  FETCH NEXT FROM curFileList INTO @v_strTEMP
	  WHILE @@FETCH_STATUS = 0
	  BEGIN
		SET @v_strMoveSQL = @v_strMoveSQL + @v_strTEMP + ', '
		FETCH NEXT FROM curFileList INTO @v_strTEMP
	  END
 
	  CLOSE curFileList
	  DEALLOCATE curFileList
 
	  PRINT 'Killing active connections to the "' + @p_strDBNameTo + '" database'
 
	  -- Create the sql to kill the active database connections
	  SET @v_strExecSQL = ''
	  SELECT  @v_strExecSQL = @v_strExecSQL + 'kill ' + CONVERT(CHAR(10), spid) + ' '
	  FROM   master.dbo.sysprocesses
	  WHERE  DB_NAME(dbid) = @p_strDBNameTo AND DBID <> 0 AND spid <> @@SPID
 
	  EXEC (@v_strExecSQL)
 
	  PRINT 'Restoring "' + @p_strDBNameTo + '" database from "' + @p_strFQNRestoreFileName
 
	  SET @v_strExecSQL = 'RESTORE DATABASE [' + @p_strDBNameTo + ']'
	  SET @v_strExecSQL = @v_strExecSQL + ' FROM DISK = ''' + @p_strFQNRestoreFileName + ''''
	  SET @v_strExecSQL = @v_strExecSQL + ' WITH FILE = 1,'
	  SET @v_strExecSQL = @v_strExecSQL + @v_strMoveSQL
	  SET @v_strExecSQL = @v_strExecSQL + ' NOREWIND, '
	  SET @v_strExecSQL = @v_strExecSQL + ' NOUNLOAD '
	  SET @v_strExecSQL = @v_strExecSQL + @v_strREPLACE
 
 
	  PRINT '---------------------------'
	  PRINT @v_strExecSQL
	  PRINT '---------------------------'
 
	  IF @p_Debug=0
	  BEGIN
	   EXEC SP_EXECUTESQL @v_strExecSQL
	  END
	END
 
 
	GO
 
 
 
 
 

 

 

 

 

Mis à jour ( Vendredi, 21 Septembre 2012 13:47 )
 
Charger des données LinkedIn dans SAP HANA avec Informatica PowerCenter
Écrit par Romain Ferraton   

La nouvelle base de données de SAP, HANA, nouveau cheval de bataille de l'éditeur allemand est disponible en version Cloud pour quelques partenaires et clients testeurs. Cette base de données approche le stockage avec une technologie "In-Memory" pour une atteindre une performance d'accès aux données améliorée. Certifiée pour certaines machines avec une configuration OS et Hardware optimisée, cette base de données prend donc logiquement l'appelation convoitée "d'Appliance" : à savoir un ensemble Hard+Soft combiné et paramétré pour des performances optimales.

SAP annonce le stockage de données BIG DATA sur cette base et des temps de réponses encore jamais vu. Pour en avoir le coeur net et pour pimenter l'essai j'ai intégré des données du réseau social professionnel LinkedIn dans cette base de données via un connecteur spécialisé pour Informatica PowerCenter, transformant ainsi le test HANA en un test multiple de connectivités.

Le socle ETL est une VM sous Windows 2008 R2 avec Informatica PowerCenter 9.1 64 bits SE.
Cotésconnecteurs :
- Les drivers ODBC 32 et 64 bits pour SAP HANA
- Le connecteur Informatica PowerExchange pour LinkedIn 9.1

 

Mis à jour ( Lundi, 17 Septembre 2012 15:07 )
Lire la suite...
 
SQL Server 2012 (v11 Denali) : ColumnStore Index ou le stockage en colonne et compression
Note des utilisateurs: / 25
MauvaisTrès bien 
Écrit par Romain Ferraton   

La version 11 de SQL Server (aka MSSQL 2012 ou Denali) introduit un nouveau type d'index permettant de stocker les données en mode colonnes.

Les columnstore index, particulièrement adaptés aux requêtes décisionelles accélèrent ces requêtes pour plusieurs raisons :

  • Les données stockées sont compressées assez fortement, ce qui entraîne moins d'IOs physiques et moins de consommation mémoire.
  • Les données stockées en colonnes permettent un balayage limité des données en fonction des colonnes demandées dans la requête.
Il y a cependant quelques restrictions liées à ce type d'index :
  • Il n'est pas possible d'écrire sur une table ayant un index en colonne. Il est cependant possible de contourner ce type de limitation avec le partitionnement : on écrit dans un table intermdiaire sans index, on créer l'index sur la table intermédiaire, on switch la table intermédiaire avec une partition de la table cible.
  • Il ne peut il y avoir qu'un seul index de type columnstore par table. Vu que c'est un stockage en mode colonne, on aura donc tendance à avoir un index incluant toutes les colonnes utiles de la table.
  • Au moment de la création de l'index, il y a une forte demande de mémoire. La mémoire demander est exterieure au buffer pool (donc en plus du max memory/target)
Voyons comment créer ce type d'index et comparons le à un index classique.
Avec SSMS on voit l'apparition de nouveau type d'index dont le Columnstore Index :
Création d'un nouvel index columnstore via SSMS
Mis à jour ( Jeudi, 23 Février 2012 11:18 )
Lire la suite...
 
SQL Server 2012 (v11 Denali) : Extended Events et Session Wizard
Note des utilisateurs: / 12
MauvaisTrès bien 
Écrit par Romain Ferraton   

La version 11 de SQL server (aka Denali) dispose d'un assistant de création pour les "extended events". Ces évènements permettent de suivre et de tracer des points complexes sur le serveur de base de données.

Voyons comment procéder pour créer et tracer ces évènements avec le nouvel assistant intégré à SQL Server Denali.

Le lancement du "session wizard" s'effectue à partir de la section de management dans SSMS : 

Lancement de l'assitant de création d'un extended events

Mis à jour ( Jeudi, 23 Février 2012 11:33 )
Lire la suite...
 
Controler l'espace de stockage avec les strategies SQL (storage and policy-based management)
Note des utilisateurs: / 9
MauvaisTrès bien 
Écrit par Romain Ferraton   

Une des difficultées dans la gestion du base de données MSSQL est de controller l'espace de stockage et vérifier si une pénurie d'espace disque ou une limite dans la taille de fichier journal ou de données ne va pas entrainer le blocage des transactions.

Les difficultés résident dans plusieurs aspects :

  • Une base de données peut avoir plusieurs FILEGROUP de données
  • Chaque FILEGROUP peut avoir plusieurs fichiers
  • Chaque fichier peut avoir sa propre gestion de stockage : autoextent, taille illimitée ou limitée avec des tailles potentiellement différentes
  • Chaque base de données peut avoir plusieurs fichiers journaux (même si un seul est actif à un instant t)
  • Les fichiers journaux ou de données peuvent être dispersées sur des volumes différents (disques, partitions, point de montage...) dont les tailles sont différentes.

Comment être alerté avant le blocage avec tous ces paramètres en jeux ?

Je vous propose d'étudier, pour répondre à cette question, les strategies de la base de données SQL Server. Nouveautés de SQL serveur 2008, ces strategies sont très puissantes pour controler des aspects des bases de données et des instances.

Les strategies  de base de données s'appuie sur plusieurs objets :

  • Les facettes : ce sont des objets sur lesquels vont porter des conditions
  • Les conditions : ce sont des tests qui portent sur une facette
  • Les stratégies :  ce sont des conditions appliquées à des cibles (bases, serveurs...) avec ou sans plannification.

 

 

 

 

 

 

 

 

Mis à jour ( Mardi, 20 Septembre 2011 16:26 )
Lire la suite...
 
<< Début < Préc 1 2 3 4 5 Suivant > Fin >>

Page 1 de 5