faq sql server

Upload: doudou-gaye

Post on 08-Jul-2015

177 views

Category:

Documents


1 download

TRANSCRIPT

SQL Server - La FAQDate de publication : 28.9.2005 Dernire mise jour : 31.6.2011

Question / rponses tout ce que vous avez toujours voulu savoir sur Microsoft SQL Server sans jamais oser le demander

Ont contribu cette FAQ :

Fabien Celaia - Morsi - Wolo Laurent - Rudi Bruchez - Maitrebn - devdev - drahu - HULK spidetra - Frdric Brouard - davidou2001 - Ylarvor - elsuket - maitrebn - Davide Jordy - Patrick Gouin -

SQL Server - La FAQ

1. Consulter les informations de schma (24) ...............................................................................................................................4 2. Consulter la taille des objects de la base de donnes (5) ....................................................................................................... 17 3. Administration de la base de donnes (39) .............................................................................................................................20 3.1. Editions de SQL Serveur (5) ..........................................................................................................................................21 3.2. Utilisateurs et connexions (11) .......................................................................................................................................23 3.3. Connexions au serveur (10) ............................................................................................................................................29 3.4. Performances (2) .............................................................................................................................................................32 3.5. Sauvegardes et restauration (11) .................................................................................................................................... 35 4. Trucs et Astuces en T-SQL (44) .............................................................................................................................................41 4.1. Fonctions (11) ................................................................................................................................................................. 42 4.2. Limiter le jeu de rsultat (14) ........................................................................................................................................ 48 4.3. Validation des donnes (5) .............................................................................................................................................66 4.4. Programmation des bases de donnes (11) .................................................................................................................... 70 4.5. Champs auto-incrments (3) .........................................................................................................................................76 5. Utilisation des utilitaires (7) ....................................................................................................................................................77

-3Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

Sommaire > Consulter les informations de schma Comment obtenir la liste des tables d'une base de donne ?Auteurs : Wolo Laurent , Fabien Celaia , Vous avez beaucoups de possibilits pour connatre la liste des tables d'une base de donnes. Nous vous recommandons d'utiliser les vues d'informations de schma.SELECT table_name FROM information_schema.tables WHERE table_type='BASE TABLE'

Vous pouvez aussi passer par la procedure stocke sp_tables ou encore passez par les tables systmes.SELECT name FROM sysobjects WHERE type='U'

Comment connatre la liste des colonnes d'une table ?Auteurs : Wolo Laurent , Fabien Celaia , Comme pour la liste des bases de donnes d'un serveur, SQL Server offre trois possibilits 1-La consultation des vues d'informations de schemaSELECT COLUMN_NAME, ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='MA_TABLE'

2-L'utilisation de la procdure stocke sp_columnsEXEC sp_columns 'Nom_de_table'

3-L'utilisation des tables systmes.SELECT c.colid, c.name Colonne, t.name Type, CAST(c.prec as varchar(10)) + CASE WHEN c.scale > 0 THEN ',' + CAST(c.scale as varchar(10) ) ELSE '' END Taille FROM syscolumns c INNER JOIN systypes t ON t.usertype=c.usertype WHERE c.id=object_id('VotreTable') ORDER BY c.colid

4-L'utilisation de la procdure stocke sp_helpEXEC sp_help NomTable

Comment lister l'ensemble des vues d'une base de donnes SQL Server ?Auteurs : Wolo Laurent , La liste des vues d'une base de donnes de SQL-Server est accessible grce une requte sur les tables systmes : sysobjects, syscomments et sysusers.

-4Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

SELECT name FROM sysobjects WHERE type='V'

Mais il est recommand d'utiliser les vues d'informations de schemas.SELECT * FROM information_schema.views

Comment lister l'ensemble des UDF d'une base de donnes SQL Server ?Auteurs : Wolo Laurent , La liste des fonctions dfinies par l'utilisateur de SQL-Server est accessible grce une requte sur les tables systmes : sysobjects, syscomments et sysusers.SELECT name FROM sysobjects WHERE type='FN'

Comment lister l'ensemble des procdures stockes d'une base de donnes SQL Server ?Auteurs : Wolo Laurent , La liste des procdures stockes de SQL-Server est accessible grce une requte sur les tables systmes : sysobjects, syscomments et sysusers.SELECT name FROM sysobjects WHERE type='P'

On peut galement utiliser la mthode des vues d'informations de schemaSELECT * FROM INFORMATION_SCHEMA.ROUTINES

Ou encore, utiliser la procedure stocke : sp_stored_procedures

Comment lister l'ensemble des dclencheurs d'une base de donnes SQL Server ?Auteurs : spidetra , La liste des triggers de SQL-Server est accessible grce une requte sur les tables systmes : sysobjects, syscomments et sysusers.SELECT o.name, o.xtype, c.text, FROM dbo.sysobjects o INNER JOIN dbo.syscomments c ON c.id = o.id INNER JOIN dbo.sysusers u ON u.uid = c.uid WHERE

u.name,

o.crdate

-5Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

xtype = 'TR'

Quelle est la requte qui permet de savoir quelles colonnes d'une table servent de cl primaire ?Auteurs : Fabien Celaia , Il existe une procdure stocke pour cel :EXEC sp_pkeys @table_name='MaTable'

Quelle commande permet d'afficher la description d'une table sous SQLServer ?Auteurs : Wolo Laurent ,sp_help MaTable

Ouselect column_name as champ, COALESCE(domain_name, cast(data_type as varchar(128))+ ISNULL(' ' + cast(character_maximum_length as varchar(10)) ,'')) as type_donnee, CASE UPPER(IS_NULLABLE) when 'YES' then '' when 'NO' then 'Oui' when Null then '' else IS_NULLABLE END as Obligatoire, '' as description from INFORMATION_SCHEMA.columns where table_name = 'Matable' order by table_name, ordinal_position

Comment rcuprer la valeur par dfaut d'un champs d'une table ?Auteurs : Fabien Celaia ,select cdefault from syscolumns where id = object_id('VotreTable') and name = 'VotreColonne'

Quel est le nombre de ligne de chacune des tables d'une base de donnes ?Auteurs : Wolo Laurent ,Select O.Name as Table_Name, I.Rows as Rows_Count FROM sysobjects O join sysindexes I ON O.id=I.id

-6Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

Where O.xtype='U'

Comment connatre le nom de la base de donnes en cours ?Auteurs : Wolo Laurent , Fabien Celaia , Pour connatre le nom de la base de donne en cours, vous pouvez utiliser la fonction DB_NAME(). Base de donne en coursSELECT DB_NAME() AS BASE_DE_DONNEES_EN_COURS

Comment afficher la liste des bases de donnes d'un serveur ?Auteurs : Wolo Laurent , Vous avez trois mthodes au choix: 1- L'utilisation des vues d'informations de schema, Exemple : VUE D'INFORMATIONS DE SCHEMASELECT CATALOG_NAME FROM INFORMATION_SCHEMA.SCHEMATA Go

2-La consultation des tables systemes bien que non recommande pour des raisons de portabilit Exemple: TABLES SYSTEMESUSE master Go SELECT name as BaseDedonneeDuServeur FROM sysdatabases Go

3-L'utilisation de la procedure stocke sp_databases Exemple: PROCEDURE STOCKEE SYSTEMEEXEC sp_databases go

Comment changer le type de donnes d'une colonne ?Auteurs : Wolo Laurent , Pour changer le type de donnes d'une colonne, MS SQL Serveur fournit la clause Alter Column Exemple ferait l'affaire:ALTER TABLE MyTable ALTER COLUMN MyColumn NVARCHAR(20) NOT NULL

Vous pouvez galement proceder comme ceci: Demmarrer une transaction srialise; Crer une nouvelle table avec le nouveau type de donnes telle que souhaite;

-7Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

Importer les donnes de l'ancienne table vers la nouvelle; Supprimer l'ancienne table; Renommer la nouvelle table avec l'ancien nom;

Exemple :--Supposons que nous ayant une table T_Person dont la definition est : CREATE TABLE Tmp_T_PERSONNE ( PER_ID int NOT NULL, PER_NOM varchar(50) NOT NULL, PER_PRENOM varchar(50) NULL, PER_NE_LE smalldatetime NOT NULL, ) ON [PRIMARY] GO --Et que nous voulons changer le type Per_Nom du type varchar(50) au type varchar(100) --Nous aurons : BEGIN TRANSACTION SET TRANSACTION ISOLATION LEVEL SERIALIZABLE --Crer une table temporaire ayant mme structure que la premire CREATE TABLE Tmp_T_PERSONNE ( PER_ID int NOT NULL, PER_NOM varchar(100) NOT NULL, PER_PRENOM varchar(50) NULL, PER_NE_LE smalldatetime NOT NULL, ) ON [PRIMARY] GO -- Peupler la table IF EXISTS(SELECT * FROM T_PERSONNE) EXEC('INSERT INTO Tmp_T_PERSONNE (PER_ID,PER_NOM, PER_PRENOM, PER_NE_LE, PAY_ID, PER_NE_A) SELECT PER_ID, PER_NOM, PER_PRENOM, PER_NE_LE FROM T_PERSONNE TABLOCKX') GO --Supprimer la table DROP TABLE dbo.T_PERSONNE GO --Renommer la nouvelle table avec l'ancien nom EXECUTE sp_rename N'Tmp_T_PERSONNE', N'T_PERSONNE', 'OBJECT' GO COMMIT

Comment renommer une base de donnes ?Auteurs : Wolo Laurent , Pour renommer une base de donnes, MS SQL Server fournit la procedure stocke sp_renamedb Exemple :EXEC sp_renamedb('MyOldDB','MyNiewDB')

Vous pouvez galement crer une nouvelle base de donnes, importez les donnes par DTS de l'ancienne base de donnes vers la nouvelle, puis supprimer l'ancienne base de donnes.

-8Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

Comment renommer une table ou un autre object de base de donnes ?Auteurs : Wolo Laurent , Pour renommer un object d'une base de donnes, l'on peut passer par la procedure stocke sp_rename. Voici ce que l'aide en ligne de MS SQL Serveur 2000 apporte a ce sujet:sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object_type' ]

ou object_name dsigne le nom de l'object renommer, new_name la nouvelle dsignation de l'object et et object_type l'une des valeurs du tableau ci-dessous. Valeur COLUMN BASE DE DONNEES INDEX OBJECT Description Une colonne qui doit tre renomme.. Base de donnes dfinie par l'utilisateur. Cette option est ncessaire pour renommer une base de donnes. Un index dfini par l'utilisateur. lment d'un type repris dans sysobjects. Par exemple, OBJECT peut tre utilis pour renommer les objets dont les contraintes (CHECK, FOREIGN KEY, PRIMARY/ UNIQUE KEY), des tables utilisateur, des affichages, des procdures stockes, des dclencheurs et des rgles. Type de donnes dfini par l'utilisateur ajout en excutant sp_addtype.

USERDATATYPE

Exemple : A1-Renommer une table Dans cet exemple la table customers est renomme custs.EXEC sp_rename 'customers', 'custs'

A2-Renommer une colonne Dans cet exemple la colonne contact title de la table customers est renomm title.EXEC sp_rename 'customers.[contact title]', 'title', 'COLUMN'

Comment visualiser le code T-SQL d'une procdure stock ?Auteurs : Fabien Celaia , Morsi , Pour se faire plaisirselect text from dbo.syscomments, dbo.sysobjects where syscomments.id = sysobjects.id And sysobjects.xtype = 'P' AND sysobjects.name='MaProcdure'

mais bien plus simplement, et avec les bons retour-chariots

-9Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

sp_helptext 'MaProcdure'

Comment rcuperer un schma de base de donnes sur un serveur SQL2005 depuis une restauration d'une base de donnes en version 2000 ?Auteurs : Wolo Laurent , Aprs restauration d'une sauvegarde d'une base de donnes SQL Serveur 2000 sur un serveur de base de donnes SQL Serveur 2005, vous ne pouvez pas acceder au schema de cette base de donnes. SQL Serveur 2005 vous renvoie le message :Database diagram support objects cannot be installed because this database does not have a valid owner. To continue, first use the Files page of the Database Properties dialog box or the ALTER AUTHORIZATION statement to set the database owner to a valid login, then add the database diagram support objects.

Pour rsoudre ce problme, il faut Changer le niveau de compatibilit EXEC sp_dbcmptlevel 'database_name', '90'; Changer le propritaire de la base de donnes sur le nouveau serveurALTER AUTHORIZATION ON DATABASE::database_name TO valid_login

Comment lister les contraintes de cls primaires et trangres des tables d'une base de donnes ?Auteurs : Rudi Bruchez ,SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'matable'

Comment trouver la liste des tables dont dpend la vue ?Auteurs : Maitrebn ,SELECT DISTINCT NECESSAIRE.NAME FROM SYSOBJECTS AS NECESSAIRE INNER JOIN SYSDEPENDS AS DEPENDENCES ON NECESSAIRE.ID = DEPENDENCES.depid INNER JOIN SYSOBJECTS AS DEPENDANTE ON DEPENDENCES.id = DEPENDANTE.id WHERE DEPENDANTE.name='NOMDELAVUE'

Comment comparer 2 tables ?Auteurs : Frdric Brouard , Fabien Celaia , Soit via requtage peu ais dans syscolumns (exemple pour rechercher des diffrences de type, il faudra complexifier avec outer jin et consors pour rechercher les colonnes manquantes, de trop...)select s1.name, s1.type, s2.name, s2.type

- 10 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

from syscolumns s1, syscolumns s2 where s1.id = object_id('MaTable1') and s2.id = object_id('MaTable2') and s1.name=s2.name and s1.types2.type

Soit via l'utilitaire tablediff.exe install par dfaut avec SQL Serrver 2005 dans le rpertoire COM.

Comment comparer 2 bases de donnes ?Auteurs : Ylarvor , Automatique SQL Compare SQL Delta SQL Examiner Visual Studio for DB professional Apex SQLDiff EMS DB Comparer for SQL Server Quest Visuel Gratuit Manuel

Sybase PowerAMC

Simple Tools for MS SQL Server

Script en Python ou Ruby pour gnrer les scripts des objets, et comparaison les deux rpertoires avec un outil comme winmerge

manuel : Script en Python ou Ruby : http://www.babaluga.com/doku.php/pro...on_python-ruby pour gnrer les scripts des objets, et tu compares les deux rpertoires avec un outil comme winmerge"

Comment trouver une table travers toutes les bases ?Auteurs : Frdric Brouard , Voici une procdure permettant de rechercher toutes les bases contenant une table de nom @SCH.@TAB :DECLARE @SCH NVARCHAR(128), @TAB NVARCHAR(128);

SELECT @SCH = '???' , @TAB = '???'; DECLARE @SQL NVARCHAR(max) SET @SQL = ''; SELECT @SQL = @SQL + 'SELECT * FROM ' + name + '.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ''' + COALESCE(@SCH, 'dbo') + ''' AND TABLE_NAME = ''' + @TAB +''';' FROM sys.databases;

- 11 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

EXEC (@SQL);

Auditer le taux d'occupation de vos disques de manire automatiqueAuteurs : Frdric Brouard , Voici un ensemble de codes SQL utilisant des procdures systmes et l'agent SQL pour scruter le taux d'occupation des disques et remonter une alerte en cas de dpassement. Cration des objets dans la basez de donnes MSDB Cration des tables de suivi de l'volution de l'espace disque et de leur taux d'occupation. Notez l'utilisation du schma S_SYS dans msdb :USE msdb; GO CREATE SCHEMA S_SYS CREATE TABLE T_A_DISK_DSK ( DSK_ID INT NOT NULL PRIMARY KEY, DSK_UNIT CHAR(1) NOT NULL UNIQUE CHECK (DSK_UNIT COLLATE French_CI_AS BETWEEN 'C' AND 'Z'), DSK_ALERT_PC FLOAT NOT NULL DEFAULT 30.0 CHECK (DSK_ALERT_PC BETWEEN 0.0 AND 100.0)) CREATE TABLE T_A_TRACE_SPACE_DISK_TSP ( TSP_ID INT NOT NULL PRIMARY KEY, DSK_UNIT CHAR(1) NOT NULL FOREIGN KEY REFERENCES T_A_DISK_DSK (DSK_UNIT), TSP_DATETIME DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, TSP_SIZE_MO INT NOT NULL, TSP_USED_MO INT NOT NULL); GO CREATE INDEX X_TSP_DTM ON S_SYS.T_A_TRACE_SPACE_DISK_TSP (TSP_DATETIME, DSK_UNIT); GO

Cration de la procdure de capture des donnes d'espace disqueCREATE PROCEDURE S_SYS.P_AUDIT_SPACE_DISK AS SET NOCOUNT ON; DECLARE @HDL int, @FSO int, @HD char(1), @DRV int, @SZ varchar(20), @MB bigint ; SET @MB = 1048576; CREATE TABLE #HD (HD_UNIT char(1) PRIMARY KEY, HD_FREESPACE int NULL, HD_SIZE int NULL); INSERT INTO #HD (HD_UNIT, HD_FREESPACE) EXEC master.dbo.xp_fixeddrives; DELETE FROM #HD

- 12 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

WHERE

HD_UNIT NOT IN (SELECT DSK_UNIT FROM S_SYS.T_A_DISK_DSK);

EXEC @HDL = sp_OACreate 'Scripting.FileSystemObject',@FSO OUT; IF @HDL 0 EXEC sp_OAGetErrorInfo @FSO; DECLARE C CURSOR LOCAL FAST_FORWARD FOR SELECT HD_UNIT FROM #HD; OPEN C; FETCH NEXT FROM C INTO @HD; WHILE @@FETCH_STATUS=0 BEGIN EXEC @HDL = sp_OAMethod @FSO, 'GetDrive', @DRV OUT, @HD IF @HDL 0 EXEC sp_OAGetErrorInfo @FSO; EXEC @HDL = sp_OAGetProperty @DRV, 'TotalSize', @SZ OUT IF @HDL 0 EXEC sp_OAGetErrorInfo @DRV; UPDATE #HD SET HD_SIZE = CAST(@SZ AS FLOAT) / @MB WHERE HD_UNIT = @HD; FETCH NEXT FROM C INTO @HD; END CLOSE C; DEALLOCATE C; EXEC @HDL=sp_OADestroy @FSO; IF @HDL 0 EXEC sp_OAGetErrorInfo @FSO; INSERT INTO S_SYS.T_A_TRACE_SPACE_DISK_TSP (TSP_UNIT, TSP_SIZE_MO, TSP_USED_MO) SELECT HD_UNIT, HD_SIZE, HD_SIZE - HD_FREESPACE FROM #HD DROP TABLE #HD; RETURN; GO

Mise en place dans l'agent SQL Server serveur d'une routine journalire de scrutation 5h du matinUSE [msdb] GO EXEC msdb.dbo.sp_add_job @job_name=N'Scrutation espace disque', @enabled=1, @notify_level_eventlog=0, @notify_level_email=2, @notify_level_netsend=2, @notify_level_page=2, @delete_level=0, @category_name=N'Data Collector', @owner_login_name=N'SA'; EXEC msdb.dbo.sp_add_jobserver @job_name=N'Scrutation espace disque', @server_name = N'ServerSQL[\instance]';

- 13 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

EXEC msdb.dbo.sp_add_jobstep @job_name=N'Scrutation espace disque', @step_name=N'Rapporte l''tat du volume du disque', @step_id=1, @cmdexec_success_code=0, @on_success_action=1, @on_fail_action=2, @retry_attempts=0, @retry_interval=0, @os_run_priority=0, @subsystem=N'TSQL', @command=N'EXEC S_SYS.P_AUDIT_SPACE_DISK;', @database_name=N'msdb', @flags=0; EXEC msdb.dbo.sp_update_job @job_name=N'Scrutation espace disque', @enabled=1, @start_step_id=1, @notify_level_eventlog=0, @notify_level_email=2, @notify_level_netsend=2, @notify_level_page=2, @delete_level=0, @description=N'', @category_name=N'Data Collector', @owner_login_name=N'ServerSQL[\instance]', @notify_email_operator_name=N'', @notify_netsend_operator_name=N'', @notify_page_operator_name=N''; EXEC msdb.dbo.sp_add_jobschedule @job_name=N'Scrutation espace disque', @name=N'Planification espace disque', @enabled=1, @freq_type=4, @freq_interval=1, @freq_subday_type=1, @freq_subday_interval=0, @freq_relative_interval=0, @freq_recurrence_factor=1, @active_start_date=20090312, @active_end_date=99991231, @active_start_time=50000, @active_end_time=235959; GO

Vous devez remplacer "ServerSQL[\instance]" par le nom de votre serveur et SA par le compte de connexion sous lequel cette routine doit tourner.

Cration d'un dclencheur pour envoi par mail d'une alerte immdiate-- trigger pour envoi d'un mail CREATE TRIGGER E_I_TSP ON S_SYS.T_A_TRACE_SPACE_DISK_TSP FOR INSERT AS BEGIN IF EXISTS(SELECT * FROM inserted AS i INNER JOIN S_SYS.T_A_DISK_DSK AS D ON i.DSK_UNIT = D.DSK_UNIT

- 14 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

WHERE (CAST(TSP_USED_MO AS FLOAT) / CAST(TSP_SIZE_MO AS FLOAT) ) * 100 > DSK_ALERT_PC master..sp_send_dbmail @profile_name = 'profile_name', @recipients = 'mail_destinataire1;mail_destinataire2;mail_destinataire3;...', @subject = 'Alerte automatique : quota d''espace libre de disque en dessous de la valeur fixe', @body = 'Au moins un des disques que vous suivez via la procdure cyclique S_SYS.P_AUDIT_SPACE_DISK a atteint un quota d''espace disque infrieur au seuil d''alerte fix.', @body_format = 'TEXT', @importance = 'High', @query = 'SELECT D.DSK_UNIT AS UNITE, TSP_SIZE_MO AS TAILLE_MO, TSP_USED_MO AS ESPACE_UTILISE_MO, (CAST(TSP_USED_MO AS FLOAT) / CAST(TSP_SIZE_MO AS FLOAT) ) * 100 AS OCCUPATION_POURCENT, DSK_ALERT_PC AS TAUX_ALERTE_POURCENT, CASE WHEN (CAST(TSP_USED_MO AS FLOAT) / CAST(TSP_SIZE_MO AS FLOAT) ) * 100 > DSK_ALERT_PC THEN ''CRITIQUE !'' ELSE ''normal'' END AS ETAT FROM S_SYS.T_A_TRACE_SPACE_DISK_TSP AS T INNER JOIN S_SYS.T_A_DISK_DSK AS D ON T.DSK_UNIT = D.DSK_UNIT WHERE TSP_DATETIME = (SELECT MAX(TSP_DATETIME) FROM S_SYS.T_A_TRACE_SPACE_DISK_TSP) ORDER BY 1 ', @execute_query_database = 'msdb', @attach_query_result_as_file = 0, @query_result_header = 1; END GO

Dans ce code, vous devez spcifier l'un des profil mail que vous avez mis en place lors de l'activation de db_mail la place de "profile_name" de mme vous devez spcifier les emails des destinataires la place de "mail_destinataire1;mail_destinataire2;mail_destinataire3;..."

Exemple Alimentons la table des disques avec nos disques :INSERT INTO S_SYS.T_A_DISK_DSK VALUES ('C', 70); INSERT INTO S_SYS.T_A_DISK_DSK VALUES ('D', 50);

Nous surveillons deux disques C et D et voulons tres alerts lorsque C dpasse un taux d'occupation de 70% et lorsque D dpasse un taux d'occupation de 50%.

Comment importer ou exporter un diagramme ?Auteurs : Davide Jordy , Les informations sur les diagrammes sont stockes dans la table dtproperties dans chaque base de donnes. Voici une procdure pour transfrer les diagrammes d'une base de donnes vers une autre : 1-Faire un click droit sur la base qui contient le schma a transfrer, cliquez sur Toutes les tches puis sur Exporter des donnes 2-Configurez la source puis cliquez sur le bouton Suivant.

- 15 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

3-Configurez la base de destination et cliquez sur le bouton Suivant 4-Dans l'ecran Spcifier Copie ou Interrogation de Table , Cliquez sur Utilisez une requte pour spcifier les donnes a transfrer , puis cliquez sur Suivant. 5-Dans l'ecran Saisie de l?instruction SQL , tapez la requete suivante : Select * From dtproperties , puis cliquez sur Suivant. 6-Dans l'ecran Slectionner les tables et les vues sources , choisissez la table dtproperties dans la colonne destination puis cliquez sur Suivant. 7-l'ecran Enregistrer, planifier et dupliquer le lot , choisissez Excuter immdiatement , puis cliquez sur Suivant et enfin cliquez sur Terminer.

- 16 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

Sommaire > Consulter la taille des objects de la base de donnes Comment connatre la taille occupe par une base de donnes ?Auteurs : Wolo Laurent , Pour connattre la taille des objects d'une base de donnes, Ms SQL Server met votre disposition une procedure stocke:sp_spaceused [[@objname =] 'objname']
[,[@updateusage =] 'updateusage']

O objname est le nom de la table dont on veut calculer la taille et updateusage un varchar(5) qui peut prendre 2 valeurs (false,true). updateusage, fix true permet MS SQL Serveur de recalculer la taille des pages de donnes. Ainsi, pour connattre la taille d'une base de donnes, on utilise la procedure sans indiquer le nom de l'object. Exemple : Pour connattre la taille de la base de donne DB_ESSAI, on :USE DB_ESSAI GO EXEC sp_spaceused GO

Comment connatre la taille occupe par une table d'une base de donnes.Auteurs : Wolo Laurent , Microsoft SQL server met votre disposition une procdure stocke sp_spaceused pour dterminer la taille d'une base de donnes et des tables de la base de donnes. Exemple: A. Informations sur l'espace occup par une table Cet exemple prsente la quantit d'espace allou (rserv) la table titles, l'espace utilis par les donnes, l'espace utilis par le ou les index et l'espace inutilis rserv par les objets de base de donnes.USE pubs EXEC sp_spaceused 'titles'

B. Informations sur l'espace mis jour occup par toute une base de donnes Cet exemple rcapitule l'espace utilis dans la base de donnes courante et utilise le paramtre facultatif @updateusage.USE pubs sp_spaceused @updateusage = 'TRUE'

Comment connatre l'espace occup par les index d'une base de donnes ou d'une table ?Auteurs : Wolo Laurent ,USE db_essai

- 17 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

EXEC sp_spaceused 'mon_objet'

Comment connatre la taille des fichiers mdf et ldf d'une base de donnes ?Auteurs : Wolo Laurent , Fabien Celaia ,use myDB GO SELECT 8 * SUM(CONVERT(DEC(15),SIZE)) as Taillemdf FROM dbo.sysfiles WHERE (status64 = 0) GO use myDB GO SELECT 8 * SUM(CONVERT(DEC(15),SIZE)) as Tailleldf FROM dbo.sysfiles WHERE (status64 != 0) GO

Le rsultat est donn en Ko. En fait, vous avez le rsultat en nombre de page de donnes de 8Ko.

Comment dterminer la table de chaque table pour une base donne ?Auteurs : Patrick Gouin , Fabien Celaia , Grce la procdure suivante permettant l'obtention d'informations sur toutes les tables d'une base (nombres de lignes, espace allou, espace utilis).

create proc Admin_Details_tables as BEGIN -- -------------------------- I. ACQUISITION DE DONNEES -- -------------------------- Initialisations paramtres divers set nocount on -- ne renvoie pas le nombre de lignes set fmtonly off -- renvoi des donnes off -- Cration de la table rsultat create table #Admin_taille_tables ( [name] char(128), rows char(11), reserved char(18), data char(18), index_size char(18), unused char(18) ) -- Variable rcuprant le nom des tables via tables 'sysobject' et 'Admin_taille_tables' par curseur declare @nom varchar(128) -- Variables rcuprant les valeurs des champs de usr_tables declare @rows char(10), @reserved char(15), @data char(15), @index_size char(15), @unused char(10) -- Curseur pour obtenir le nom de chaque table via table 'sysobjects' declare curs cursor scroll for - 18 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

select name from sysobjects where xtype = 'U ' open curs fetch next from curs into @nom -- Enrichissiment de la table 'admin_taille_tables' par 'sp_spaceused' while @@fetch_status = 0 begin insert into #Admin_taille_tables exec sp_spaceused @nom fetch next from curs into @nom end close curs deallocate curs -- ------------------------------------------------------------------------------------------ II. Suppression des libell alpha: '123 KB' doit donner '123' pour traitements ultrieurs -- ------------------------------------------------------------------------------------------ Lecture de la table 'Admin_taille_tables' pour traitement des donnes via un curseur declare curs cursor scroll for select name, rows, reserved, data, index_size, unused from #Admin_taille_tables open curs fetch next from curs into @nom, @rows, @reserved, @data, @index_size, @unused -- Traitement des donnes while @@fetch_status = 0 begin set @reserved = substring(@reserved,1,len(@reserved) - 3) set @data = substring(@data,1,len(@data) - 3) set @index_size = substring(@index_size,1,len(@index_size)- 3) set @unused = substring(@unused,1,len(@unused) - 3) begin tran update #Admin_taille_tables set reserved = @reserved , data = @data , index_size = @index_size , unused = @unused where name = @nom commit tran fetch next from curs into @nom, @rows, @reserved, @data, @index_size, @unused end close curs deallocate curs -- Alter de la table 'Admin_taille_tables' alter table #Admin_taille_tables alter column alter table #Admin_taille_tables alter column alter table #Admin_taille_tables alter column alter table #Admin_taille_tables alter column alter table #Admin_taille_tables alter column alter table #Admin_taille_tables alter column

name varchar(25) rows bigint reserved bigint data bigint index_size bigint unused bigint

-- Affichage rsultats select * from #Admin_taille_tables order by data desc, rows desc drop table #Admin_taille_tables END

- 19 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

Sommaire > Administration de la base de donnes

- 20 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

Sommaire > Administration de la base de donnes > Editions de SQL Serveur Combien d'ditions existe-t-il pour MS SQL Server 2000 ?Auteurs : Wolo Laurent , Editions Edition Professionnelle et Edition standard Systmes d'exploitations compatibles Windows 2003 Server Windows 2000 Server Windows 2000 DataCenter Windows 2000 Avanced Server Windows NT 4.0 Server Professional Edition Windows NT 4.0 Server Windows XP Professionelle Windows 2003 Server Windows 2000 Server Windows 2000 DataCenter Windows 2000 Avanced Server Windows 2000 Professionelle Windows NT 4.0 Server Professional Edition Windows NT 4.0 Server Windows NT 4.0 Server WorkStation Windows 98 Windows XP Professionelle Windows 2003 Server Windows 2000 Server Windows 2000 DataCenter Windows 2000 Avanced Server Windows 2000 Professionelle Windows NT 4.0 Server Professional Edition Windows NT 4.0 Server Windows NT 4.0 Server WorkStation Windows CE

Edition Personnelle

Edition Dvloppeur

Edition Windows CE

Combien d'ditions existe-t-il pour MS SQL Server 2005 ?Auteurs : Fabien Celaia , Express Workgroup Standard Enterprise

Pour les dtails : Comparaison des fonctionnalits dans SQL Server 2005

Combien d'ditions existe-t-il pour MS SQL Server 2008 ?Auteurs : Fabien Celaia , SQL Server 2008 Entreprise

- 21 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

SQL Server 2008 Standard SQL Server 2008 Workgroup SQL Server 2008 Web SQL Server 2008 Developer SQL Server 2008 Express (gratuite) SQL Server 2008 Compact 3.5 (gratuite) fonctionalits lies aux ditions

Notes de l'diteur quant aux

Comment dterminer la version de SQL Server install ?Auteurs : Morsi ,SELECT SERVERPROPERTY('ProductLevel') SELECT @@VERSION SELECT SERVERPROPERTY('ProductVersion')

Comment connatre le nom de l'instance de SQL Server installe ?Auteurs : Wolo Laurent , Fabien Celaia ,select case WHEN convert(sysname, serverproperty('InstanceName')) IS NULL THEN 'INSTANCE PAR DEFAUT' ELSE convert(sysname, serverproperty('InstanceName')) END AS INSTANCE_NAME

- 22 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

Sommaire > Administration de la base de donnes > Utilisateurs et connexions Comment connatre le nom de l'utilisateur connect au serveur?Auteurs : Wolo Laurent , SQL Serveur fournit quatre fonctions permettants de connatre l'utilisateur connect au serveur pour la session en cours. Exemple:DECLARE @usr char(30) SET @usr = user SELECT 'L''utilisateur courant GO --Ou SELECT 'L''utilisateur courant GO --Ou encore SELECT 'L''utilisateur courant GO --Nous n'allons pas oublier la SELECT 'L''utilisateur courant

est : ' + @usr

est : ' + SUSER_NAME()

est : ' + SESSION_USER fonction Current_user est : ' + CURRENT_USER

Comment obtenir le nombre d'utilisateurs connects une base de donnes ?Auteurs : Wolo Laurent ,USE MaBase GO SELECT COUNT(*) FROM master..sysprocesses WHERE dbid=db_id() GO

ouSELECT COUNT(*) FROM master..sysprocesses WHERE dbid=db_id('MabaseDeDonne')

Pour la base courante ce sera alors :SELECT COUNT(*) FROM master..sysprocesses WHERE dbid=db_id()

Je n'arrive pas crer un utilisateur, le systme me dit : user already exist ?Auteurs : Wolo Laurent , Il faut supprimer l'utilisateur et le recrer:exec sp_dropuser 'utilisateur' -- drop le user

- 23 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

exec sp_adduser 'utilateur','login' -- recre utilisateur et l'associe login

Quelle requte retourne les processus en train de consommer ?Auteurs : Fabien Celaia ,create proc sp__cpu as /* * Auteur : Fabien Celaia * Date : 11/01/2002 * Desc : Affiche les processus utilisateurs en cours de traitement * Parm : */ SELECT convert(char(4), spid) Spid, convert(char(4), blocked) Blk, convert(char(4), cpu) CPU, left(loginame,15) 'Users', left(hostname, 15) 'Host', left(db_name(dbid),15) DB, convert(char(20), cmd) Command, convert(char(12), program_name) Program , convert(char(10), status) Status FROM master..sysprocesses WHERE spid @@spid AND status not in ( 'BACKGROUND', 'sleeping') ORDER BY cpu DESC GO GRANT execute on sp__cpu to public GO

Afficher la liste des utilisateurs d'une base spcifique ou de la base couranteAuteurs : Fabien Celaia ,CREATE PROC sp__dbuser (@db varchar(30)=NULL) AS BEGIN /* * Auteur : Fabien Celaia * Date : 3.3.2002 * Desc : Affiche la lsite des utilisateurs de la base courante ou de la base passe en paramtre * Parm : @db = nom de la base (optionel) * Return : Nombre d'utilisateurs * -1 si la base n'existe pas */ set nocount on declare @i int if @db is null select @db=db_name() else if not exists(select name from master..sysdatabases where name = @db) begin Print 'La base '+@db+' n''existe pas dans le serveur '+ @@servername return -1 end select @db 'Base' print '' /* Nombre d'utilisateurs */ select @i=count(spid) from master..sysprocesses where dbid = db_id(@db) and status 'BACKGROUND'

- 24 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

if @i = 0 begin print '' print 'Cette base est inutilise' print '' end else begin /* Liste des utilisateurs */ declare @snum varchar(4) select @snum = convert(varchar(4), @i) print '' print @snum+' utilisateur(s) trouvs dans la base '+@db+', serveur '+ @@servername print '' select spid, loginame Utilisateur , cmd, program_name from master..sysprocesses where dbid = db_id(@db) and status 'BACKGROUND' /* Message informationel pour l'utilisateur courant */ if exists (select * from master..sysprocesses where spid=@@spid and dbid=db_id(@db)) begin print '' print 'FYI : VOUS tes actuellement connects la base '+@db+', serveur '+@@servername print '' end end return @i end go GRANT execute on sp__dbuser to public go

Comment extirper un DDL complet pour un utilisateur donn ?Auteurs : Fabien Celaia ,Create PROC sp_ddluser (@login varchar(30)) as BEGIN /* Auteur : Fabien Celaia * Date : 6.6.05 * Desc : Extraction du DDL d'un utilisateur spcifique permettant sa recration multi-serveurs * IParm : @login (obligatoire) : l'utilisateur extraire * OParm : 0 = succs * -1 = l'utilisateur n'existe pas */

if not exists (select * from sysusers where name = @login) begin PRINT 'L''utilisateur '+@login+'n''existe pas dans la base '+db_name()+' du serveur '+@@servername return -1 end if not exists (select * from master..syslogins where name = @login) begin /* Login inexistant => cration */ select 'exec sp_addlogin '+ @login+ ', MotDePasse' end SELECT 'EXEC SP_DROPUSER '+@login SELECT 'EXEC SP_ADDUSER '+@login+', '+ @login /* membres de groupes */

- 25 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

select 'GRANT ROLE '+ g.name +' TO '''+u.name+'''' from sysmembers m inner join sysusers u on m.memberuid = u.uid inner join sysusers g on m.groupuid=g.uid where u.uid > 2 and u.name = @login

/*Droits*/ select case p.protecttype when 206 then 'REVOKE' else 'GRANT ' end + case p.action when 26 then 'REFERENCES' when 178 then 'CREATE FUNCTION' when 193 then 'SELECT' when 195 then 'INSERT' when 196 then 'DELETE' when 197 then 'UPDATE' when 198 then 'CREATE TABLE' when 203 then 'CREATE DATABASE' when 207 then 'CREATE VIEW' when 222 then 'CREATE PROCEDURE' when 224 then 'EXECUTE' when 228 then 'BACKUP DATABASE' when 233 then 'CREATE DEFAULT' when 235 then 'BACKUP LOG' when 236 then 'CREATE RULE' end + ' ON ' + o.name + case when p.action < 200 then case when p.protecttype = 206 then ' FROM ' else ' TO ' END +u.name else '' end + case when p.protecttype = 204 then ' WITH GRANT OPTION' else '' end from sysprotects p inner join sysusers u on u.uid=p.uid inner join sysobjects o on o.id=p.id where p.columns = 0x01 OR p.columns is null and u.name = @login order by o.name end

Comment afficher les utilisateurs actifs d'une base particulire ?Auteurs : Fabien Celaia ,create proc sp__dbuser (@db varchar(30)=NULL) as begin /* * Auteur : Fabien Celaia * Date : 10.8.2005 * Desc : Liste les utilisateurs actifs dans la base de donnes courante OU la base passe en paramtre * IParm : @db = Nom de la base (optionnel) * Retour : Nombre d'utilisateurs connects la base * -1 si la base passe en paramtre n'existe pas */ set nocount on declare @i int

- 26 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

if @db is null select @db=db_name() else if not exists(select name from master..sysdatabases where name = @db) begin Print 'La base '+@db+' n''existe pas sur le serveur SQL '+@@servername return -1 end select @db 'Base de donnes' print '' /* Number of users */ select @i=count(spid)

from master..sysprocesses where dbid = db_id(@db) and status 'background'

if @i = 0 begin print '' print 'Cette base est actuellement inutilise' print '' end else begin /* List of the users */ declare @snum varchar(4) select @snum = convert(varchar(4), @i) print '' print @snum+' utilisateurs(s) actifs dans la base '+@db+' du serveur '+ @@servername print '' select spid, nt_username Utilisateur , cmd, program_name Programme from master..sysprocesses where dbid = db_id(@db) and status 'background' /* Informational warning if the current user is in the database */ if exists (select * from master..sysprocesses where spid=@@spid and dbid=db_id(@db)) begin print '' print 'FYI: VOUS tes actuellement connects sur la base '+@db+' du serveur '+ @@servername print '' end end return @i end

Comment changer temporairement un mot de passe que l'on ne connat pas ?Auteurs : Fabien Celaia , 1) Changer de mot de passe aprs l'avoir sauvselect password, name into old_login from master..sysxlogins exec sp_password NULL, NouveauMotDePasse, MonLogin

2) Revenir l'ancienexec sp_configure updates,1 reconfigure with override update master..sysxlogins set password=O.password from old_login O, sysxlogins L where L.name=O.name and O.name='MonUtilisateur'

- 27 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

drop table old_login exec sp_configure updates,0

lien :

Modifier temporairement un mot de passe inconnu

Comment connatre la dernire date de modification du mot de passe des logins ?Auteurs : Fabien Celaia ,select name loginname, updatedate from master..syslogins where loginname is not null

Comment configurer une base de donnes en mode utilisateur unique ?Auteurs : Frdric Brouard ,ALTER DATABASE MABASE SET SINGLE USER WITH ROLLBACK IMMEDIATE

Quel est le type de connexion le plus sr ?Auteurs : Fabien Celaia , Il y a deux types de connexion avec Micrososft SQL Server. le mode authentification Windows : il permet de laisser au systme la tche d'authentifier le client. Avantage : le mot de passe ne passe pas au travers des paquets TDS et ne peut donc tre "sniff". le mode authentification SQL avec un mot de passe et un login propre au SQL server, sans lien avec le systme d'exploitation. Avantage : une distiction claire et nette entre les droits sur la base et ceux sur le systme d'exploitation.

En terme de choix, on ne peut spcifier que l'authentification Windows (1) ou l'authentification mixte (1 + 2).

- 28 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

Sommaire > Administration de la base de donnes > Connexions au serveur Comment fixer la dure d'attente de libration d'un verrou sur un object de la base de donnes ?Auteurs : Wolo Laurent , SET LOCK_TIMEOUT permet une application de dfinir le dlai maximal pendant lequel une instruction doit attendre en cas de ressource bloque. Si l'attente d'une instruction dpasse la valeur du paramtre LOCK_TIMEOUT, l'instruction bloque est automatiquement annule, et un message d'erreur renvoy l'application. Cette valeur est fixe -1 au dbut d'une connexion.--Fixe la valeur du lock_timeout 1,8 seconde SET LOCK_TIMEOUT 1800

Pour connatre la valeur courante, on utilise la variable @@LOCK_TIMEOUT--Consulter la valeur du lock timeout SELECT @@LOCK_TIMEOUT AS LOCK_TIMEOUT

Je n'arrive pas me connecter une base de donnes de mon serveur depuis un programme clientAuteurs : Wolo Laurent , Si vous n'arrivez pas vous connecter une base de donnes de votre serveur, procedez comme ci-dessous. Si vous utilisez le nom de la machine comme source de donnes, vrifiez que votre rseau possde un serveur de nom de domaine. Dans le cas contraire, utilisez l'adresse IP publique de votre serveur de base de donnes. Attention, il arrive que vous vous connectez sous windows avec un utilisateur qu possde moins de droits pour modifier les donnes de la base de donnes de ce serveur. Vrifiez que vous utilisez le bon type d'autentification SQL Serveur pour votre chane de connexion Vrifiez que votre serveur ne se trouve pas derrire un serveur proxy. Vrifier que votre serveur ne se trouve pas derrire un Firewall.

Comment se connecter un serveur SQL qui se trouve derrire un proxy ?Auteurs : Wolo Laurent , Pour se connecter un serveur SQL Serveur qui tourne derrire un serveur proxy, Ouvrez l'utilitaire Server Network Utility Dans l'onglet gnral, cochez la case enable Winsock proxy puis saisissez l'adresse du serveur proxy et son port d'coute.

Comment se connecter un serveur se trouvant derrire un pare-feu ?Auteurs : Wolo Laurent , Pour se connecter un serveur dans ces conditions, Configurez un numero de port (1433) par dfaut puis demandez votre administrateur rseau de librer le trafique de ce port sur son firewall

- 29 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

il est dconseill d'ouvrir une brche dans le firewall si MS-SQL utilise le port par dfaut. reconfigurer le port avant tout.

Quelle procdure stocke permet de limiter le nombre de connexions simultanes ?Auteurs : drahu , Fabien Celaia ,sp_configure connections, n RECONFIGURE WITH OVERRIDE --n est le nombre de connexions souhaites.

Mon serveur ne dmarre pas cause du mssage : Echec d'ouverture d'une session a empch le dmarrage d'un service.Auteurs : Wolo Laurent , Ce mssage intervient lorsque le compte configur pour dmarrer le service MSSQLSERVER choue dans le dmarrage d'une session Windows. Allez-y dans le Gestionnaire des Services, Cliquez sur le service MSSQLSERVER, puis changer le compte de dmarrage du service. NB: Il est plus simple d'utiliser le compte LocalSystem.

Comment connatre le type d'authentification installe sur le serveur ?Auteurs : Wolo Laurent ,select CASE WHEN convert(sysname, serverproperty('Edition')) IS NULL THEN 'ERREUR' WHEN convert(sysname, serverproperty('Edition'))=0 THEN 'SECURITE INTEGREE' WHEN convert(sysname, serverproperty('Edition'))=1 THEN 'SECURITE NON INTEGREE' END AS AUTHENTIFICATION

Comment rsoudre le problme "Dlai d'attente expir" lorsqu'on tente de se connecter au serveur ?Auteurs : Wolo Laurent , Il s'agit d'un problme li au DNS Utiliser l'adresse IP\Instance du serveur la place de NomServeur\Instance Dans la fentre de configuration IP du protocole TCP/IP de votre carte rseau, ajouter l'adresse du DNS primaire, en utilisant celui de votre contleur de domaine.

Dconnectez les utilisateurs d'une base de donnesAuteurs : Frdric Brouard , Fabien Celaia , Cette commande, possible depuis MS-SQL2005, tue les connexions en cours (y.c. rollback) et garde l'unique connexion en cours sur la base.ALTER DATABASE 'MaBase' SET SINGLE_USER WITH ROLLBACK IMMEDIATE

Pour le retour un accs normal :

- 30 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

ALTER DATABASE 'MaBase' SET MULTI_USER

Autrement, il reste toujours la possibilit du kill via curseurCREATE PROC sp_killuser (@MaBase varchar(30)=NULL) AS BEGIN Declare @SQL_Text nvarchar(20) declare Process_cur CURSOR FOR select convert(varchar(5), spid) from master..sysprocesses where dbid = db_id(coalesce(@MaBase,db_name()) and spid @@spid Declare @spid as varchar(4) OPEN Process_cur FETCH NEXT FROM Process_cur INTO @spid WHILE (@@FETCH_STATUS = 0) begin set @SQL_Text = 'KILL '+ @spid exec sp_executesql @T FETCH NEXT FROM Process_cur into end CLOSE Process_cur DEALLOCATE Process_cur END GO

@spid;

Comment dmarrer un serveur si la base tempdb est corrompueAuteurs : Fabien Celaia , Dmarrez le serveur avec l'option -T3608. Ce traceflag permet de ne dmarrer le serveur qu'avec la base master. Notez cependant que sans la base tempdb, quasiment aucune procdure stocke n'est utilisable.

- 31 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

Sommaire > Administration de la base de donnes > Performances Comment rindexer une base ?Auteurs : HULK , La gestion des index par SQL Server peut entraner la fragmentation de ceux-ci et une dgradation des performances. Si le volume d'informations de votre base volue beaucoup, il est ncessaire de rindexer votre base. Plus votre base change, plus les index perdent en efficacit, il faut donc les recrer. On peut reconstruire les index avec la commande DBCC REINDEX.CREATE PROCEDURE REINDEXATION AS DECLARE @table_name sysname DECLARE @TSQL nvarchar(4000) DECLARE @Err int DECLARE @Mess varchar(400) SET @Mess = 'Dbut rindexation' RAISERROR(@Mess, 10, 1) WITH LOG DECLARE table_list CURSOR FAST_FORWARD FOR SELECT name FROM sysobjects WHERE type = 'u' OPEN table_list FETCH NEXT FROM table_list INTO @table_name WHILE @@fetch_status = 0 BEGIN SET @TSQL = N'DBCC DBREINDEX(' + @table_name + N')' EXECUTE sp_executesql @TSQL SET @Err = @@error IF (@Err != 0) BEGIN SET @Mess = 'Echec rindexation table ' + @table_name + ' suite erreur ' + CONVERT(varchar, @Err) RAISERROR(@Mess, 16, 1) WITH LOG END FETCH NEXT FROM table_list INTO @table_name END CLOSE table_list DEALLOCATE table_list SET @Mess = 'Fin rindexation' RAISERROR(@Mess, 10, 1) WITH LOG GO

Extensions uniformes ou extensions mixtes ?Auteurs : Frdric Brouard , SQL Server stocke les pages des fichier de donnes (tables, index, blobs...) dans des blocs de 8 pages appels "extents" (extensions en franais). Autant une page ne peut appartenir qu' un seul objet, autant une extension peut comporter des pages de diffrents objets. Est-il possible de force la mise en place d'extension ne contenant qu'un seul et mme type d'objet ? La rponse est oui, mais n'est pas sans consquences ! Les fichiers de donnes des bases MS SQL Server, sont constitus de pages de 8 Ko organises par blocs contigus de 8 appeles extensions. A l'intrieur d'une page ne figure que les information d'un seul et mme objet (ligne de table, ligne d'index ou blob). En revanche et par dfaut, une extensions peut contenir des pages abritant diffrents objets. On appelle cela une extension mixte (mixed extent). Bien entendu au sein d'une mme base, il est possible que certaines extension soient uniformes. Dans certains cas, il y aurait intrt forcer le moteur de stockage utiliser uniquement des extensions uniformes. Ces cas sont rares mais intressants : le cas de la VLDB ayant essentiellement de trs grosse table ;

- 32 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

le cas de tempdb si l'on a pens la rpartir sur autant de gros fichier qu'il y a de CPU.

Pour ce faire, il faut utiliser le drapeau de trace 1118. Voici un petit script qui montre l'effet de la mise en place de ce paramtrage :CREATE DATABASE DB_TEST_EXTENT; GO USE DB_TEST_EXTENT; GO CREATE TABLE dbo.T_LONGUE_LIGNE_1_LGL (LGL_ID int identity, LGL_DATA char(8000) default 'blabla'); GO WHILE NOT EXISTS(SELECT * FROM dbo.T_LONGUE_LIGNE_1_LGL WHERE LGL_ID = 8) INSERT INTO dbo.T_LONGUE_LIGNE_1_LGL DEFAULT VALUES; GO DBCC TRACEON(1118); GO CREATE TABLE dbo.T_LONGUE_LIGNE_2_LGL (LGL_ID int identity, LGL_DATA char(8000) default 'blabla'); GO WHILE NOT EXISTS(SELECT * FROM dbo.T_LONGUE_LIGNE_2_LGL WHERE LGL_ID = 8) INSERT INTO dbo.T_LONGUE_LIGNE_2_LGL DEFAULT VALUES; GO DBCC EXTENTINFO(DB_TEST_EXTENT, 'dbo.T_LONGUE_LIGNE_1_LGL', -1); DBCC EXTENTINFO(DB_TEST_EXTENT, 'dbo.T_LONGUE_LIGNE_2_LGL', -1);

Et le rsultat :file_id page_id pg_alloc ext_size object_id index_id partition_id iam_chain_type pfs_bytes ----------- ----------- ----------- ----------- ----------- ----------1 21 1 1 2105058535 0 72057594038779904 In-row data 0x6400000000000000 1 55 1 1 2105058535 0 72057594038779904 In-row data 0x6400000000000000 1 77 1 1 2105058535 0 72057594038779904 In-row data 0x6400000000000000 1 78 1 1 2105058535 0 72057594038779904 In-row data 0x6400000000000000 1 79 1 1 2105058535 0 72057594038779904 In-row data 0x6400000000000000 1 80 1 1 2105058535 0 72057594038779904 In-row data 0x6400000000000000 1 89 1 1 2105058535 0 72057594038779904 In-row data 0x6400000000000000 1 90 1 1 2105058535 0 72057594038779904 In-row data 0x6400000000000000 file_id page_id partition_id pg_alloc ext_size object_id iam_chain_type pfs_bytes index_id partition_number

---------------- -------------------- -1 1 1 1 1 1 1 1

partition_number

- 33 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

----------- ----------- ----------- ----------- ----------- ----------- ---------------- -------------------- -1 176 8 8 2137058649 0 1 72057594038845440 In-row data 0x4444444444444444

Comme on le voit, ces deux tables contiennent les mmes donnes. L'une a donn lieu la description de 8 pages dans la mme extension, l'autre la description globale des 8 pages dans l'extension uniforme. Bien tester les effets de ce paramtrage, car le remde peut s'avrer dans certaines circonstances, pire que le mal. Rglage du paramtre En excutant :DBCC TRACEON(1118);

Vous forcez la session en cours gnrer des extensions uniformes. Cela peut tre intressant par exemple si vous voulez insrer un lot important de lignes dans une table sans gnrer d'extensions mixtes. Par exemple lors de la cration d'une base de donnes, pour l'alimentation du rfrentiel.DBCC TRACEON(1118, -1);

Vous forcez le moteur pour toutes les sessions venir gnrer des extensions uniforme.DBCC TRACEOFF(1118) ; DBCC TRACEOFF(1118, -1) ;

Vous revenez au comportement normal du moteur de stockage.

- 34 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

Sommaire > Administration de la base de donnes > Sauvegardes et restauration Comment sauvegarder une base de donnesAuteurs : Fabien Celaia , Via la commande backupbackup database MaBase to DISK=N'c:\temp\MonFichier.bak'

lien :

Dplacement, sauvegardes et restauration de bases sous MS-SQL Server

Comment restaurer une base de donnes depuis un fichier .bak ?Auteurs : Fabien Celaia , Via la commande restore, en ayant au pralable supprim toutes les connexions existantes sur la base qui sera craserestore database MaBase from DISK=N'c:\temp\MonFichier.bak'

lien :

Dplacement, sauvegardes et restauration de bases sous MS-SQL Server

Comment faire une copie de ma base de donnes ?Auteurs : Fabien Celaia , via commandes backup/restorebackup database MaBase to DISK=N'c:\temp\Mabase.bak'

- 35 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

restore database MaCopie from DISK=N'c:\temp\Mabase.bak'

lien :

Dplacement, sauvegardes et restauration de bases sous MS-SQL Server

Comment savoir si je suis en mode recouvrement de type FULL ?Auteurs : Frdric Brouard ,SELECT DATABASEPROPERTYEX(DB_NAME(), 'Recovery')

Comment configurer une base de donnes en mode FULL RECOVERY ?Auteurs : Frdric Brouard ,ALTER DATABASE MABASE SET RECOVERY FULL

Comment connate le jeu de caractre et le tri configur sur son serveur ?Auteurs : Fabien Celaia ,sp_helpsort

Comment faire un export complet d'une base ( structure avec cls, procdures etc...) y.c. des donnes qui sont dans les tables.Auteurs : Rudi Bruchez , Il y a des outils qui gnrent le DDL des objets, et les inserts. Il y a des outils de diff de base qui sont payants (Red Gate SQL Compare et Data Compare), http://www.sqldelta.com/, http://www.sqlscriptsafe.com/, ... Il y a des outils gratuits : http://www.sqldbtools.com/ http://www.codeproject.com/cs/database/DBScriptSafe.asp http://www.codeproject.com/database/InsertGeneratorPack.asp

dont des scripts en Perl, Python et Ruby faits par votre serviteur : http://www.babaluga.com/doku.php/sql_server/code/index http://www.babaluga.com/doku.php/programmation/comparaison_python-ruby

Et de Microsoft :

- 36 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

Visual Studio 2005 Team Edition for Database Professionals

Comment retrouver la date de la dernire restauration d'une base ?Auteurs : Wolo Laurent , Fabien Celaia , Rudi Bruchez , Si vous avez excut cette restauration via un job de Microsoft SQL Server, vous pouvez rechercher l'information via la base systme msdbUSE VotreBase GO SELECT destination_database_name, restore_date, b.database_name, physical_name, backup_start_date FROM msdb.dbo.RestoreHistory h INNER JOIN msdb.dbo.BackupSet b ON h.backup_set_id = b.backup_set_id INNER JOIN msdb.dbo.BackupFile f ON f.backup_set_id = b.backup_set_id WHERE b.database_name = db_name() GO

Si par contre vous avez effectu a restauration via la ligne de commande ou l'assistant interactif, ne vous restera plus qu' aller rechercher dans les journaux

Comment restaurer une base de donnes depuis des fichiers .mdb et .ldb ?Auteurs : Fabien Celaia , Ces fichiers sont cex d'une base de donnes qui a t dtache d'un serveur par l'ordre sp_detache_db. Pour les rattacher votre serveur SQL, utilisez la procdure stocke sp_attach_dbEXEC sp_attach_db @dbname ='AdventureWorks', @filename1 = 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Data.mdf', @filename2 = 'D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Log.ldf'

lien : lien :

Dplacement, sauvegardes et restauration de bases sous MS-SQL Server Attacher une base de donnes dont le journal de transaction est manquant

Sauvegarder toutes les bases de donnes d'un serveur d'un seul coupAuteurs : Frdric Brouard , Voici une procdure destine oprer une sauvegarde globales de toutes les bases d'un serveur. Diffrentes options sont possible comme de sauvegarder aussi les bases systmes ou utiliser une unit de sauvegarde (device).CREATE PROCEDURE dbo.P_SAVE @FILE_PATH NVARCHAR(256), -- chemin pour stockage des fichiers de sauvegarde @FILE_EXT NVARCHAR(3) = 'BAK', -- extension pour les fichiers de sauvegarde @FILE_NAME NVARCHAR(128) = 'DB_SAVE', -- nom gnrique des fichiers de sauvegarde @FILE_DATE BIT = 1, -- incorporer la date dans le nom des fichiers @FILE_HOUR BIT = 1, -- incorporer l'heure dans le nom des fichiers @ONLY_USER_DB BIT = 0, -- ne sauvegarder que les bases utilisateur (pas les bases systmes) - 37 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

@TO_DEVICE BIT = 1, -- crer une unit de sauvegarde (device) pour y inclure toutes les sauvegardes @CLEAN_DEVICE BIT = 1 -- purger l'unit de sauvegarde (device) des sauvegrades qu'elle contient AS -- ATTENTION : les noms des bases de donnes doivent repecter la norme ISO (pas de caractres illicites) -- dans le cas contraire prvoir les crochet dans le SQL dynamique IF @FILE_PATH IS NULL OR @FILE_EXT IS NULL OR @FILE_NAME IS NULL BEGIN SET @FILE_PATH = COALESCE(@FILE_PATH, '?'); SET @FILE_EXT = COALESCE(@FILE_EXT, '?'); SET @FILE_NAME = COALESCE(@FILE_NAME, '?'); RAISERROR ('Un des paramtres de la procdure est manquant. Chemin : %s - Nom fichier : %s - Extension : %s', 16, 1) RETURN END; -- la variable @PATH se termine t-elle par un "\" ?, si non, l'ajouter IF SUBSTRING(REVERSE(@FILE_PATH), 1, 1) '\' SET @FILE_PATH = @FILE_PATH + '\'; -- l'extension ne doit pas avoir de point SET @FILE_EXT = REPLACE(@FILE_EXT, '.', '');

-- le rpertoire doit exister. S'il n'existe pas on le cr. -- utilisation de xp_cmdshell DECLARE @SHOW_OPTIONS BIT, @CMDSHELL BIT; SELECT @SHOW_OPTIONS = CAST(value_in_use AS BIT) FROM sys.configurations WHERE name = 'show advanced options' SELECT @CMDSHELL = CAST(value_in_use AS BIT) FROM sys.configurations WHERE name = 'xp_cmdshell' IF @CMDSHELL = 0 BEGIN IF @SHOW_OPTIONS = 0 EXEC sp_configure 'show advanced options', 1; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; IF @SHOW_OPTIONS = 0 EXEC sp_configure 'show advanced options', 0; RECONFIGURE; END -- cration du rpertoire EXEC ('xp_cmdshell ''MKDIR "' + @FILE_PATH+'"'''); IF @CMDSHELL = 0 BEGIN EXEC sp_configure 'xp_cmdshell', 0; IF @SHOW_OPTIONS = 0 EXEC sp_configure 'show advanced options', 0; RECONFIGURE; END; -- variables de travail DECLARE @DATE NVARCHAR(9), @HOUR NVARCHAR(7), @DEVICE_NAME NVARCHAR(128), @DEVICE_FILE NVARCHAR(512), @FILE_SAVE NVARCHAR(512), @SQL VARCHAR(max); -- conversion en chaine date et heure au format ISO court IF @FILE_DATE = 1 SET @DATE = REPLACE(CONVERT(NCHAR(10), CURRENT_TIMESTAMP, 121), '-', ''); IF @FILE_HOUR = 1 SET @HOUR = SUBSTRING(REPLACE(CONVERT(NCHAR(25), CURRENT_TIMESTAMP, 121), ':', ''), 12, 6); -- la sauvegarde se fait sur un device. Il faut le crer. IF @TO_DEVICE = 1

- 38 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

BEGIN SET @DEVICE_NAME = @FILE_NAME + COALESCE('_' + @DATE,'') + COALESCE('_' + @HOUR, ''); SET @DEVICE_FILE = @FILE_PATH + @DEVICE_NAME + '.' +@FILE_EXT; END; IF @TO_DEVICE = 1 AND @CLEAN_DEVICE = 1 -- cration d'un "device" (unit de sauvegarde) en fait un super fichier qui va contenir toutes les sauvegardes IF EXISTS (SELECT * FROM sys.backup_devices WHERE name = @DEVICE_NAME) EXEC sp_dropdevice @DEVICE_NAME; IF NOT EXISTS(SELECT * FROM sys.backup_devices WHERE name = @DEVICE_NAME) EXEC sp_addumpdevice 'DISK', @DEVICE_NAME, @DEVICE_FILE; -- gnration de la commande SQL pour la liste des bases sauvegarder SET @SQL = ''; SELECT @SQL = @SQL + 'BACKUP DATABASE ' + name +' TO ' + -- vers device ou fichiers CASE WHEN @TO_DEVICE = 1 THEN @DEVICE_NAME ELSE 'DISK = ''' + @FILE_PATH + @FILE_NAME + '_' + name + COALESCE('_' + @DATE,'') + COALESCE('_' + @HOUR, '') + COALESCE('.' + @FILE_EXT, '') + '''' END + -- si device alors purger ou non CASE WHEN @TO_DEVICE = 1 AND N = 1 AND @CLEAN_DEVICE = 1 THEN ' WITH FORMAT, INIT' ELSE '' END + ';' + CHAR(10) + CHAR(13) FROM (SELECT name, ROW_NUMBER() OVER(ORDER BY database_id) AS N FROM sys.databases WHERE state = 0 AND source_database_id IS NULL AND (owner_sid 0x01 OR @ONLY_USER_DB 1) AND name 'tempdb' ) AS T; EXEC (@SQL); GO

Exemple d'utilisation :P_SAVE 'C:\! test sauve', 'bkp', 'SAUVEGARDE_SQL_SERVER', 1, 1, 0, 1, 0 -- @FILE_PATH @FILE_EXT @FILE_NAME @FILE_DATE @FILE_HOUR @ONLY_USER_DB @TO_DEVICE @CLEAN_DEVICE

Comment savoir si un plan de maintenance s'est correctement excut ?Auteurs : elsuket , Une requte simple dans la base de donnes systme MSDB nous donne la rponse ... Valable sous SQL Server 2000 et ultrieurSELECT plan_name, database_name, activity, start_time, end_time, CASE LEN(CAST(duration / 3600 AS VARCHAR(4))) WHEN 1 THEN '0' + CAST(duration / 3600 AS VARCHAR(4)) ELSE CAST(duration / 3600 AS VARCHAR(4)) END + ':' + - 39 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

CASE LEN(CAST(duration / 60 % 60 AS VARCHAR(2))) WHEN 1 THEN '0' + CAST(duration / 60 % 60 AS VARCHAR(2)) ELSE CAST(duration / 60 % 60 AS VARCHAR(2)) END + ':' + CASE LEN(CAST(duration % 60 AS VARCHAR(2))) WHEN 1 THEN '0' + CAST(duration % 60 AS VARCHAR(2)) ELSE CAST(duration % 60 AS VARCHAR(2)) END Dure FROM msdb.dbo.sysdbmaintplan_history WHERE succeeded = 0 -- 0 : chec | 1 : russite -- AND start_time BETWEEN '20090907' AND '20090908' ORDER BY database_name, start_time

Il est ds lors facile de placer cette requte dans un DataSet sous Reporting Services ou dans une application WinForms pour pouvoir s'afficher l'tat des plans de maintenance qui doivent avoir lieu sur une instance de SQL Server.

- 40 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

Sommaire > Trucs et Astuces en T-SQL

- 41 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

Sommaire > Trucs et Astuces en T-SQL > Fonctions Comment manipuler le type DATE dans SQL-Server ?Auteurs : Fabien Celaia , Toutes les fonctions sont disponibles cette addresse : Fonctions temporelles

Comment crypter une chane de caractre en T-SQL ?Auteurs : Fabien Celaia , Utiliser la fonction encrypt()

Comment comparer une chane encrypte un paramtreAuteurs : Fabien Celaia ,select * from MaTable where ChampMotDePasseCrypte=encrypt(@MaChaineNonCryptee)

Comment tester si deux dates sont dans la mme semaine ?Auteurs : Fabien Celaia , Vous pouvez utiliser la fonction DatePart en usant de la commande SET DATEFIRST pour controller le premier jour de la semaine.SELECT CASE WHEN DatePart( week, @Date1 ) = DatePart( week, @Date2) THEN 1 ELSE 0 END

Comment connatre le nom de l'application qui a dmarr la session ?Auteurs : Wolo Laurent , APP_NAME renvoie le nom de l'application pour la session en cours si un nom a t dfini par l'application. Exemple : L'exemple suivant vrifie si l'application cliente qui a initi ce traitement est une session de l'Analyseur de requtes SQL.DECLARE @CurrentApp varchar(35) SET @CurrentApp = APP_NAME() IF (@CurrentApp 'MS SQL Query Analyzer')

- 42 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

PRINT 'ce processus n'a pas t dmarr par une cession de Query Analyzer.'

Comment connatre le nom de la station de travail ?Auteurs : Wolo Laurent , Il peut tre important de connatre le nom de la station de travail qui executer une instruction d'insertion de donnes par exemple. Pour cela, nous faisons appel la fonction HOST_NAME() Exemple :CREATE TABLE Orders ( OrderID INT PRIMARY KEY, CustomerID NCHAR(5) REFERENCES Customers(CustomerID), Workstation NCHAR(30) NOT NULL DEFAULT HOST_NAME(), OrderDate DATETIME NOT NULL, ShipDate DATETIME NULL, ShipperID INT NULL REFERENCES Shippers(ShipperID) )

Comment calculer le nombre de jours qu'il y a dans le mois en cours, sachant que la date du jour m'est donne par la variable @date.Auteurs : Rudi Bruchez ,SELECT DAY(DATEADD(d, -DAY(DATEADD(m,1,@Date)),DATEADD(m,1,@date))) AS DernierJourDuMois

Comment rechercher une chane de caractre dans toutes les tables ?Auteurs : Fabien Celaia , Petite procdure stocke permettant le scannage des colonnes susceptibles de contenir le champ.create proc [dbo].[fc_trouvetout] (@cherche as varchar(2000)) as /* Auteur : Fabien Celaia * Date : 16.10.2007 */ begin declare @tb varchar(100), @co varchar(100), @sql nvarchar(500) select o.name TBL, c.name COL, 0 NBRE into #Result from sysobjects o inner join syscolumns c on c.id=o.id inner join systypes t on t.xtype=c.xtype where c.length >= datalength (@cherche) and t.name like '%char%' and o.type='U' declare cur cursor for select TBL, COL from #result -- for update open cur FETCH NEXT FROM cur INTO @tb, @co WHILE @@FETCH_STATUS = 0

- 43 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

BEGIN set @sql = 'declare @i int select @i=count(*) from '+@tb +' where '+@co+' like ''%'+@cherche+''' if @i > 0 update #result set NBRE=@i where COL='''+@co+''' AND TBL = '''+@tb+'''' exec sp_executesql @sql FETCH NEXT FROM cur INTO @tb, @co END close cur deallocate cur select * from #Result where NBRE>0 drop table #Result end

Attention : selon la volumtrie de la base, la recherche peut tre extrmement longue et coteuse.

Quelle est la diffrence entre fonctions et procdures ?Auteurs : Frdric Brouard , Quelles sont les diffrences majeures entre une fonction SQL dite UDF (User Defined Function) et une procdure ? Une fonction (ou UDF, user Define Fonction) est un programme destin fournir en sortie, une valeur scalaire ou une table (SELECT).

Les fonctions scalaires ne peuvent pas contenir : de transaction (BEGIN TRANSACTION, COMMIT, ROLLBACK, de sql dynamique (EXEC ('...') d'ordre de mise jour (INSERT, UPDATE, DELETE, MERGE) d'ordre DDL (CREATE, ALTER, DROP), DCL (GRANT REVOKE) un appel une procdure (EXEC P...) l'utilisation d'un cursor (DECLARE CURSOR, FETCH...) de commande de dbogage comme PRINT

Une fonction table peut contenir des ordres de mise jour, mais ces commandes ne peuvent porter qu'uniquement sur la table en sortie. Une procdure se cre par CREATE PROCEDURE et ses E/S sont : des paramtres input et output un ventuel jeu de rsultat (voir mme plusieurs) une valeur de retour (code d'erreur) Elle peut contenir tout code SQL, y compris : transaction mise jour SQL dynamique cursor commande DDL

- 44 Les sources prsentes sur cette pages sont libres de droits, et vous pouvez les utiliser votre convenance. Par contre la page de prsentation de ces sources constitue une oeuvre intellectuelle protge par les droits d'auteurs. Copyright 2005 Developpez LLC. Tout droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.http://sqlserver.developpez.com/faq/

SQL Server - La FAQ

Bien entendu, vous pouvez crer vos procdures dans diffrents schmas SQL que vous aurez pralablement crs.

Fonction de dcoupage csure multipleAuteurs : Frdric Brouard , Voici un problme complexe, comment "parser" une phrase avec, non pas un caractres de csure, mais un ensemble ? Cette fonction rpond cette demande en fournissant en sortie une table... Cette fonction permet de dcouper une phrase selon de multiples caractre de csure. En entre :@PHRASE : la phrase dcouper @PARSEC : les caractres de csure

En sortie, une table comprenant :colonne 1 : POS la position du mot dans la phrase colonne 2 : MOT le mot colonne 3 : CHR le caractre de csure CREATE FUNCTION dbo.F_MULTIPARSE(@PHRASE VARCHAR(max), @PARSEC VARCHAR(256)) RETURNS @T TABLE (POS INT, MOT VARCHAR(128), CHR CHAR(1)) AS /***********************************************************