SelectEtoile : Base de connaissance SGBD

Posts Tagged 'base'

Présentation du site

 
Ce site a été développé afin de fournir des explications, documentations et astuces en tout genre concernant les bases de données.Ils proviennent de retour d'expériences de différents DBA.
Il est à noter que ces articles ne sont que des notes et en aucune façon des documentations officielles.
Ce site peut contenir des commandes non supportées par les différents éditeurs qui sont à utiliser avec précaution.
Bien sur, si vous constatez des erreurs ou avez des remarques sur un ou plusieurs articles, n'hésitez pas à nous en faire part, soit via l'onglet Contacts, soit via les commentaires à votre disposition à la fin de chaque article.
 
Pour ceux qui seraient intéressés pour écrire ou proposer des articles, n'hésitez pas à me contacter via 'Contacts' dans le menu du haut.
flux_rssInscrivez vous au fil d'actualité selectetoile.net flux_rss

Comment récupérer une base à partir du fichier mdf ?

1 Faire une copie des fichiers encore présents de la base de données.
2 Procéder à la création d'une nouvelle base de donnée
Elle devra porter les mêmes noms de fichiers ( .MDF et .LDF) que l'ancienne
3 Stopper le service SQLServer
4 Détruire les fichiers de la base nouvellement créée.
5 Renommer les premiers fichiers de base pour qu'ils correspondent à ceux de la base précédemment créée
6 Redémarrer le service SQLServer.
A ce stade la base de données devrait être active et fonctionner.
Si par contre, elle apparaît en suspect il ne faut pas s'inquiéter. Il faut procéder aux étapes suivantes.
7 Avec l'analyseur de requêtes, se connecter sur le serveur sur la base master et effectuer les commandes suivantes

sp_configure 'allow updates',1
reconfigure with override
UPDATE sysdatabases SET status=32768 WHERE name='bdName'

8 Stopper le service SQLServer.
9 Renommer le fichier Log en .old (ou toute autre extension)
10 Redémarrer le service SQLServer. ( Si ce n'était pas déjà le cas, la base apparaît en 'suspect')
11 DBCC rebuild_log ('bdName','chemin complet et nom du fichier log à reconstruire')
12 UPDATE sysdatabases SET status=0 WHERE name='bdName'
13 Puis pour finir

DBCC checkdb ('bdName ')
GO
DBCC newalloc ('bdName ')
GO
DBCC checkcatalog ('bdName ')
GO

Ceci pour vérifier la cohérence de la base de données

Installation base tempdbsa

           Création de la base temporaire :


1> disk init name="fstempdb01",physname="dirname/fstempdb01.dev",size='500M'

2> go

1> create temporary database tempdb_sa on fstempdb01=500

2> go

CREATE DATABASE: allocating 32512 logical pages (500.0 megabytes) on disk 'fstempdb01'.


Vérification de la creation :

1> sp_helpdb

2> go

name db_size owner dbid created status
------------------------ ------------- ------------------------ ------ --------------
------------------------------------------------------------------------------------------------------
tempdb 4108.0 MB sa 2 May 19, 2004
    select into/bulkcopy/pllsort, trunc log on chkpt
tempdb_sa 500.0 MB sa 5 May 21, 2004
    select into/bulkcopy/pllsort, trunc log on chkpt, user created temp db


1> sp_helpdb tempdb_sa

2> go

name db_size owner dbid created status
------------------------ ------------- ------------------------ ------ --------------
------------------------------------------------------------------------------------------------------
tempdb_sa 508.0 MB sa 5 May 21, 2004
    select into/bulkcopy/pllsort, trunc log on chkpt, user created temp db

device_fragments size usage created free kbytes

------------------------------ ------------- -------------------- ------------------- ------------------------------
fstempdb01 500.0 MB data and log May 21 2004 4:12PM 508608



Création du lien user sa -> tempdb_sa :


1> sp_tempdb 'bind','LG','sa','DB','tempdb_sa'
2> go


Vérification du lien :

1> sp_tempdb 'show','all'
2> go

Temporary Database Groups

-------------------------------

default

(1 row affected)

Database GroupName

------------------------------- -------------------------------

tempdb default

(1 row affected)

Login Application Group Database

Hardness

------------------------------- ------------------------------- ------------------------------- -------------------------------

--------

sa NULL NULL tempdb_sa

SOFT



Volumétrie Tables / Indexes / Bases SYBASE ASE

 

Liste de la volumétrie des tables en version 12.5 :

 

Use mabase
Go
select     DateJour               = convert(datetime,convert(char(10),getdate(),103),103),    
Base = db_name(),  
Tables = Object_name(id),       
NombreLigne = max(rowcnt(doampg)) ,       
Reserved = (sum(reserved_pgs(id,doampg))+ sum(reserved_pgs(id, ioampg)))*2,        
Data = (sum(data_pgs(id, doampg)))*2,       
Indexes = (sum(data_pgs(id, ioampg)))*2  
from sysindexes        
where id > 100       
group by id        
order by object_name(id)

 

 

 

 

Liste de la volumétrie des tables en version 15 :

use mabase
go
select top 10 t.DateJour,t.Base,t.Tables,Nb_row=convert(varchar(10),sum(t.rwct)),Reserved=sum(t.reserved), Data=sum(t.data), Indexes=sum(t.indexes)
from (select  DateJour        = convert(datetime,convert(char(10),getdate(),103),103),
        Base            = convert(varchar(15),db_name()),
        Tables          = convert(varchar(20),object_name(id)),
        case when indid < 2 then (row_count(db_id(),id)) when indid > 1 then 0 end as rwct,
        reserved        = (reserved_pages(db_id(),id,indid))*(@@maxpagesize/1024),
        case when indid < 2 then (data_pages(db_id(),id,indid))*(@@maxpagesize/1024) when indid > 1 then 0 end as data,
        case when indid > 1 then (data_pages(db_id(),id, indid))*(@@maxpagesize/1024) when indid < 2 then 0 end as indexes
from sysindexes
where id > 100) t
group by t.DateJour,t.Base,t.Tables
order by Reserved desc

 

 

 

 

 

 

 

Temps de recouvrement d'une base

 

Il faut d’abord bien comprendre que lorsqu’un utilisateur, insert, modifie ou supprime des données, seul le journal de transaction est écrit immédiatement sur le disque. Les données modifiées sont écrites dans le cache d’ASE. Pour des raisons de performance, leurs écritures sur disque sont différées. C’est le processus checkpoint ou la commande checkpoint qui provoque l’écriture des données modifiés en cache sur disque. C’est ce même processus qui déplace le point de troncature pour permettre la purge du journal de transactions.

 

Si le serveur est arrêté avec « un arrêt immédiat » (On fige le journal de transaction en l’état, il n’y a pas de checkpoint ni de purge) ou alors suite à un arrêt brutal, les données modifiées en cache qui ne sont pas écrites sur disque sont flashées. Lorsque le serveur redémarre, il va rechercher ces données en se basant sur le journal de transaction.

 

Pour réaliser cette tache le serveur se lance dans un processus de  recovery de la base qui se décompose en trois étapes :

  • Analyse : C’est la lecture du journal de transaction afin de construire les taches à effectuer dans le REDO PASS et le UNDO PASS.
  • Redo Pass : C’est l’écriture des données, des transactions validées, sur disque
  • Undo Pass : C’est l’annulation des transactions qui n’ont pas abouties ou bien qui étaient marquées comme à défaire.

 

 

Donc selon la périodicité des checkpoints et le taille du journal de transaction, l’étape de REDO peut-être très longue.