De petits articles sous forme de tutoriaux.
|
|
É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 )
|
|
|
É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...
|
|
É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 :
|
|
Mis à jour ( Jeudi, 23 Février 2012 11:18 )
|
|
Lire la suite...
|
|
É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 :Â
|
|
Mis à jour ( Jeudi, 23 Février 2012 11:33 )
|
|
Lire la suite...
|
|
É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 |