Thursday, August 27, 2009

Setup of SQL Server

What’s the good solution to setup SQL Serve?

First you need to find information what kind of database will be on and the activity. Don’t put production database and development database in the same SQL Server. The security will be the most important part and the size of the disk to have a good setup.

Don’t forget to disable the user sa and take the option Mixed mode to logon into SQL Server. Be sure the services will be logon with a Windows account if is possible. Enable the audit for login fail only and see your log error frequently.

I will add to this post, take control of your SQL Server and you will be happy if nothing happened is an attack occurs in your company.

Monday, July 13, 2009

Cannot shrink database in SQL Server 2005

Shrink database is an easy task to do it. As you know, you never set your database with the option auto shrink. It’s better to set the estimated size for your database at the beginning of production.
The first thing to do is to estimate the time who will take the shrink. The second is the schedule a down time. The last is to shrink the database by data file.
Something you couldn’t shrink the database

1. You could to see if there are open transactions.

2. If there is no open transaction, you could take a backup of the transaction log, put in simple recovery mode and then put back to the full or bulk log recovery mode and then shrink.

3. If that action doesn’t work, create an empty data file and take the option to shrink with move all the data to the new data file. If you receive a message, could not transfer all the data to the new data file, is because there are maybe some table who contain data type Text or image. In that case you need to find which tables are still in the data file, and then you need to create those tables with prefix temp and transfer all the data into it. After you delete the original table and rename all tables with prefix temp.

4. Don’t forget to create all constraint, trigger, index for the new tables. Create all indexes after the transfer of the data to optimize the transfer time.

If you need more information’s you could send me a mail.

Monday, June 29, 2009

Pourquoi un DBA dans mon équipe…

Un jour mon client me demande: -est-ce qu’il est recommandé d’avoir plusieurs instances sur un même serveur? Ma réponse fut : - tout dépend du besoin et si on est prêt à perdre un peu de performance, on peut en avoir plusieurs.

Un client m’appelle et me demande : -est-ce que tu peux venir voir mon serveur, il est toujours a 100% de CPU et il ne reste que 150MB de mémoire disponible?
Ma réponse fut : -bien sûr, mais tout dépend du temps que tu me laisse pour analyser et tu auras les résultats en conséquence. On m’a donné tout le temps nécessaire et le résultat fut que tous les utilisateurs disent que c’est le jour et la nuit et que le système va super bien. De plus, l’administrateur de système devait faire redémarrer le serveur chaque soir, plus maintenant.

Un jour un collègue de travail me demande : -comment on fait pour faire une mise a jour dans une table avec elle-même qui a une relation parent enfant. Ma réponse fut : -attend une minute, je vais te faire un exemple et quelques minutes plus tard, le script était fini et envoyer.

Dans tout les cas mentionné ci-dessus, j’ai pris le temps d’analyser, de comprendre le besoin, de poser les questions, mais tout le monde peut faire cela, analyser, comprendre le besoin, poser les questions….

On ne nait pas DBA, mais bien on apprend à l’être et on devient une personne à qui on demande tout ce qui est en relation avec les données, que ce soit de la part du junior, de l’intermédiaire, du sénior programmeur, du chargé de projet, du directeur de département, quelque soit le client qui nous le demande nous sommes prêt à répondre.

Que ce soit une petite demande ou à la plus critique des demandes….

Tuesday, June 16, 2009

Rapport d'utilisation SQL2005

Voilà que SQL Server 2005 vient avec des rapports déjà conçu pour facilité l'analyse sur l'utilisation de notre serveur.

Vous pouvez les voir en cliquant sur le bouton droit de votre Base de donnée et vous sélectionné Reports.

le log de SQL Server et le log SQL Agent

Pour lire le log de SQL Server et le log SQL Agent…

Paramètre 1:le numéro du log qu’on veut lire, par défaut c’est toujours le premier.
Paramètre 2:c’est 1 pour le log d’erreur de SQL, 2 c’est pour le log de l’agent SQL.
Paramètre 3: c’est une chaine de caractère à rechercher dans le log.
Paramètre 4: c’est une autre chaine de caractère à rechercher dans le log.

EX :
CREATE TABLE ##t_errlog (row_num numeric (18, 0) IDENTITY (1, 1) NOT NULL, log_msg varchar(4000) NOT NULL, cont_line numeric null)
INSERT ##t_errlog exec ('master..xp_readerrorlog' + numero du log 1 a 6 ou 0 a 6)

Wednesday, March 18, 2009

Savoir si un service de SQL Server est opérationnel

Il y a plusieurs méthodes pour déterminer si un service de SQL est opérationnel.

Pour le service SQL Server :

1- La plus connue est avec l'outil osql ou sqlcmd (2005), on exécute une requête sur le
Serveur SQL et si on reçoit une erreur disant que le serveur ne répond pas ou un délai trop long, cela nous indique que le serveur n’est pas opérationnel.

2- Faire un NET START du service Windows, si celui-ci est n’est pas en fonction, il va démarrer et il va nous retourner un code d’erreur pour nous informer si le service a bien démarrer. Cependant, si vous voulez uniquement savoir si le service est démarré et ne pas démarrer automatiquement le service, cette option n’est pas pour vous.

Pour le service SQL Agent :

1- Faire un NET START du service Windows, si celui-ci est n’est pas en fonction, il va démarrer et il va nous retourner un code d’erreur pour nous informer si le service a bien démarrer. Cependant, si vous voulez uniquement savoir si le service est démarré et ne pas démarrer automatiquement le service, cette option n’est pas pour vous.

2- Exécuter cette commande pour le service SQL Agent: EXEC master..xp_servicecontrol 'QueryState','SQLSERVERAGENT'. Vous pouvez utiliser cette commande pour un service de SQL Server en mettant le nom (service Windows) exacte pour le deuxième paramètre.

Saturday, January 24, 2009

Éxécuter un script sur plusieurs serveurs

Il y arrive parfois qu'on veut exécuter un script sur plusieurs serveurs en même temps, cependant on ne veut pas ouvrir un Query Analyser ou Studio Management et perdre du temps.

Voici une façon plus rapide et dans l'exemple on va utiliser un script sqlversion.sql.

Préparation :
1- Créer un fichier servers.txt qui contient servername, pwd, user par ligne.
svr01,abc,sa
svr02,dce,sa
....

2- Créer un fichier SQLScripts.bat qui contient
ECHO OFF
REM This procedure takes the server name as parameter
REM ------------------------------------------------------------
rem This is usefull to make the maintenance of the SQL databases
rem It reindexes and makes backups of all databases( except system db) on an SQL server
rem This batch could be run in remote mode for all SQL servers

REM SETTINGS that need to be changed from one server to an other
REM ------------------------------------------------------------
SET SQLSERVER=%1
SET USER=%2
SET PWD=%3
rem SET SQLSERVER=SRVSQLTEST-MTL
rem SET USERID=
rem SET PASSWORD=

rem DATE /T >> %SQLSERVER%.log
rem TIME /T >> %SQLSERVER%.log

rem echo allo
OSQL -U%USER% -P%PWD% -S%SQLSERVER% -dMASTER -n -b -r0 -i"sqlversion.sql" -o%SQLSERVER%.log
pause
REM check for the errors
REM ----------------------
IF %ERRORLEVEL% EQU 1 GOTO EXIT
ECHO OK %SQLSERVER%
GOTO END
:EXIT
ECHO ********** %SQLSERVER% ERROR *************
:END

3- un fichier RunScriptToAllMyServers.bat qui contient
FOR /F "eol=; tokens=1,2,3* delims=, " %%i in (servers.txt) do SQLScripts %%i %%j %%k
4- un fichier sqlversion.sql qui contient
SELECT @@Version

Exécution :
1- Remplir le fichier servers.txt avec les serveurs donc vous avez de besoin.
2- Remplacer sqlversion.sql par le nom de votre script
3- Les fichiers servers.txt, RunScriptToAllMyServers.bat, SQLScritpts.bat et votre script doivent être dans le même répertoire.
4- Le résultat se fait dans un fichier [SQLSERVER_NAME].log
5- Exécuter le fichier RunScriptToAllMyServers.bat

Tuesday, January 6, 2009

Détection du redémarrage de SQL Server

Il y a une façon très simple de détecter que SQL Server à été redémarré. Dans le log d’erreur, vous allez retrouver une ligne « starting databases… ». Cette ligne est toujours inscrite lors du redémarrage et cela pour toutes les bases de données de notre serveur.

Il y a une configuration possible pour ne pas afficher cette ligne « starting databases », cependant celle-ci s’applique uniquement à nos bases de données et non aux bases de données système.

Il y a une Stored Procedure qui lit le log de SQL Server, vous pouvez l’utiliser afin de faire votre propre script pour la détection du redémarrage.

Vous pouvez vous fier à cette ligne, j’ai validé les versions de SQL 2000-05-08 et cela en anglais et en français.