SelectEtoile : Base de connaissance SGBD

Posts Tagged 'script'

Sauvegarde / Restauration

Sauvegarde / restauration d'une table : 

Bcp out :

  • mysql> SELECT a,b,a+b INTO OUTFILE '/tmp/jp1.txt'
  • -> FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  • -> LINES TERMINATED BY '\n'
  • -> FROM jp1;

 

Bcp in :

  • mysql> LOAD DATA INFILE "/tmp/jp1.txt" INTO TABLE jp1
  • -> FIELDS TERMINATED BY ',' ENCLOSED BY '' ESCAPED BY '\\'
  • -> LINES TERMINATED BY '\n';
  • LOAD DATA INFILE 'ta_syb_aseconfig_total.out' INTO TABLE ta_syb_aseconfig
  • FIELDS TERMINATED BY ';' ENCLOSED BY '' ESCAPED BY '\\'
  • LINES TERMINATED BY '\n';

 

Sauvegarde d'une Base de données

mysqldump [options] db_name [tables]

Sauvegarde : mysqldump -u root -ppwd --opt mabase -h monServeur > backup-production.sql

Exemple : mysqldump --socket=mysql.sock --user=root --password=pwd testjp > /tmp/testjp.sql

La commande dump permet de générer le script de création des objets et de la base elle même. Ci-dessous, un exemple de résultat de la commande :

 

-- MySQL dump 10.9

--

-- Host: localhost Database: testjp

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

-- Server version 4.1.11-max-log

 

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

 

--

-- Table structure for table `jp1`

--

 

DROP TABLE IF EXISTS `jp1`;

CREATE TABLE `jp1` (

`a` int(11) default NULL,

`b` int(11) default NULL

) ENGINE=MyISAM DEFAULT CHARSET=latin1;

 

--

-- Dumping data for table `jp1`

--

 

 

/*!40000 ALTER TABLE `jp1` DISABLE KEYS */;

LOCK TABLES `jp1` WRITE;

INSERT INTO `jp1` VALUES (3,8),(1,1),(10,10),(6,7),(5,5),(8,9);

UNLOCK TABLES;

/*!40000 ALTER TABLE `jp1` ENABLE KEYS */;

 

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

 

Il faut prévoir un flush des logs binaire avant la sauvegarde full :

Soit lancer un 'flush logs' dans mysql

Soit ajouter l'option --flush-logs dans la commande mysqldump

 

Autre exemple de mysqldump :

mysqldump --opt ${DATABASE} --databases --routines --triggers --single-transaction --master-data=2 --hex-blob --flush-logs

--master-data=2 permet de mettre une ligne de commentaire dans le fichier généré donnant le binlog courant ainsi que la position
--single-transaction : permet de rendre transactionnel la sauvegarde et donc consistant
--hex-blob : Sauvegarde les colonnes binaires utilisant La notation hexadecimale
 
 

 

 

Restauration d'une base de données :

Restauration d'un dump full :

mysql -u root -ppwd -h monServeur -D mabase2 < backup-production.sql

Exemple : ‘mysql testjp < /tmp/testjp.dump’

 

Restauration des log binaire :

mysqlbinlog mysql-bin.000062 mysql-bin.000063 | mysql


Sauvegarde / restauration table (vont disparaître)

  • BACKUP TABLE table [, table] ... TO '/repertoire/de/sauvegarde/';
  • RESTORE TABLE table [, table] ... FROM '/repertoire/de/sauvegarde/';

 

 

Sauvegarde a l’aide de mysqlhotcopy (Prérequis : Perl et packages DBI)

  • mysqlhotcopy db_name [/répertoire/de/sauvegarde]
  • mysqlhotcopy -u root -ppwd mabase /mstoto/sgbd/sauvegarde/

 

 

 

 

 

Petit guide des commandes

 

Les fonctions MySql :

  • select version(), current_date;
  • SELECT nom, naissance, CURRENT_DATE, (YEAR(CURRENT_DATE)-YEAR(naissance)), (RIGHT(CURRENT_DATE,5)<RIGHT(naissance,5)) AS age FROM animal;

  • select user();

 

Les Commandes SHOW :

  • show databases;
  • show columns from monDataCache;
  • show create table monDataCache;
  • show create database monitor_db;
  • show databases;
  • SHOW ERRORS [LIMIT [offset,] row_count]
  • SHOW COUNT(*) ERRORS
  • show engines;
  • show engines\G;
  • show grant for monty;
  • show innodb status;
  • show logs;
  • show privileges;
  • show processlist (ou mysqladmin process-list) : permet de voir qui est connecté à la base
  • show status; (ou mysqladmin extended-status)
  • show tables;
  • show tables status;
  • show variables
  • show variables like 'max_error_count';
  • show warnings; (suite a une requete avec des warnings)
  • SHOW COUNT(*) WARNINGS;

 

Les options :
 

  • L'attribut AUTO_INCREMENT peut être utilisé pour générer un identifiant unique pour les nouvelles lignes
  • Set autocommit=1 : utilisé pour la recréation rapide de la table

Les scripts natifs :

  • mysqlcc (MySQL Control Center) est un client interactif graphique, pour exécuter des commandes SQL, et administrer le serveur
  • mysqladmin est un client d'administration
  • mysqlcheck effectue les opérations de maintenance sur les tables
  • mysqldump et mysqlhotcopy font les sauvegardes de bases
  • mysqlimport importe des fichiers de données
  • mysqlshow affiche des informations sur les bases et les tables
  • mysql_secure_installation : permet de securiser l'installation de mysql

ex  : mysqladmin extended-status  (-r diff; -i 1 intervalle)

Les variables :

  • SELECT @@warning_count;

 

Exemples de commandes :

mysql> show create database testjp;

+----------+-------------------------------------------------------------------+

| Database | Create Database |

+----------+-------------------------------------------------------------------+

| testjp | CREATE DATABASE `testjp` /*!40100 DEFAULT CHARACTER SET latin1 */ |

+----------+-------------------------------------------------------------------+

1 row in set (0.00 sec)

 

mysql> use testjp

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

 

Database changed

mysql> show create table jp1;

+-------+--------------------------------------------------------------------------------------------------------------------+

| Table | Create Table |

+-------+--------------------------------------------------------------------------------------------------------------------+

| jp1 | CREATE TABLE `jp1` (

`a` int(11) default NULL,

`b` int(11) default NULL

) ENGINE=MyISAM DEFAULT CHARSET=latin1 |

+-------+--------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

 

mysql> SHOW GRANTS FOR fsarasy;

+-----------------------------------------------------------------------------------------------------------------+

| Grants for fsarasy@% |

+-----------------------------------------------------------------------------------------------------------------+

| GRANT ALL PRIVILEGES ON *.* TO 'fsarasy'@'%' IDENTIFIED BY PASSWORD '*63D85DCA15EAFFC58C908FD2FAE50CCBC60C4EA2' |

+-----------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)

 

 

 

 

 

 

 

 

Utilisation de logman pour scripter des traces perfmon

logman est un programme permettant de définir, démarrer, stopper des traces perfmon.

Voici quelques exemples bien pratiques d'utilisation des ce programme

 

Tout d'abord, il faut définir une trace de compteur perfmon. Pour faire plus simple, je me suis créer un fichier '.bat' dans lequel j'ai mis le code suivant :

Logman.exe create counter Perf-Log -f bincirc -v mmddhhmm -max 250 -o "d:\perfmon\logman" -c "\LogicalDisk(*)\*" "\Memory\*" "\Network Interface(*)\*" "\Paging File(*)\*" "\PhysicalDisk(*)\*" "\Process(*)\*" "\Redirector\*" "\Server\*" "\System\*" "\Thread(*)\*" -si 00:00:05


En executant le script, on a créé la trace perfmon nommé 'Perf-Log' avec les compteus de perfs spécifié dans le parametre '-c', avec un echantillonnage à 5 secondes.

Le fichier en sortie (au format .blg) sera écris dans 'd:\perfmon\' et nommé logman*.blg. Ce fichier ne dépassera pas les 250 MB (Option -max) et il sera au format bincirc.

 

Il est possible de spécifier un fichier contenant la conf (ex : PerfLog.cfg) et de lancer la commande suivante :

Logman.exe create counter High-CPU-Perf-Log -f bincirc -v mmddhhmm -max 250 -o "d:\perfmon\perfmon" -cf "d:\perfmon\PerfLog.cfg" -rf 05:00

Ici, l'option '-rf' permet de préciser le temps que va durer la collecte (ici, 5 mins)

Exemple de fichier PerfLog.cfg :

"\Memory\Available MBytes"
"\Memory\Pool Nonpaged Bytes"
"\Memory\Pool Paged Bytes"
"\PhysicalDisk(*)\Current Disk Queue Length"
"\PhysicalDisk(*)\Disk Reads/sec"
"\PhysicalDisk(*)\Disk Reads Bytes/sec"
"\PhysicalDisk(*)\Disk Writes/sec"
"\PhysicalDisk(*)\Disk Writes Bytes/sec"
"\Process(*)\% Processor Time"
"\Process(*)\Private Bytes
"\Process(*)\Virtual Bytes"

 

Un fichier blg est alors créé, vous pouvez double cliquer dessus pour visualiser les graphes sous perfmon.

Il est possible de croiser les données de ce fichier BLG avec une trace profiler par exemple. c'est très pratique pour identifier les problèmes lors de pic CPU, IO par exemple. J'écrirai un article à ce sujet un jour j'espère.

Dans l'outil perfmon, on peut visualiser directement la trace ainsi générée :

Visualisation sous perfmon

 

Une fois la trace créée, il suffit de démarrer la trace en tapant tout simplement 'logman start High-CPU-Perf-Log'

Pour visualiser, il suffit de taper 'logman', pour la stopper 'logman stop High-CPU-Perf-Log'

Utilisation de logman 

 

Doc Microsoft : http://technet.microsoft.com/fr-fr/library/cc753820%28v=ws.10%29.aspx

 

 

Requetes divers sur SYBASE ASE

Autojointure à regroupement :

SELECT col1, col2, count(*)

FROM tab

GROUP BY col1, col2

ORDER BY col1, col2

compute sum(count(*)) BY col1

compute sum(count(*))

 

 

Modification format de date :

 

02/02/02 en 02-02-02 :

select object_name(id), stuff(stuff(convert(varchar, moddate, 102), 5, 1, '-'), 8, 1, '-') + 'T' + convert(char(8), moddate, 108),

 

 

Feb 7 2005 12:53PM en 20050207121240

convert(varchar, moddate, 112) + substring(convert(char(8), moddate, 108) , 1, 2) + substring(convert(char(8), moddate, 108) , 4, 2) + substring(convert(char(8), moddate, 108) , 7, 2)

 

 

 

Commandes sur la gestion des dates

2 format de data différents

declare @dat datetime, @dat2 smalldatetime
select @dat = getdate()
select @dat2 = getdate()
select @dat, @dat2


Difference entre 2 dates :

declare @dat1 datetime, @dat2 datetime
select @dat1 = 'Dec 30 2005'
select @dat2 = getdate()
select @dat1, @dat2
select datediff (hh,@dat1,@dat2)


Ajout 1 heure :

declare @dat1 datetime, @dat2 datetime
select @dat1 = 'Dec 30 2005'
select @dat2 = getdate()
select @dat1, @dat2
select dateadd (hh,+1,@dat2)


Affichage avec un format particulier

select convert (char(26),getdate(),108)

 

Affichage de la date du jour :

- 3 mois : select convert (smalldatetime, Dateadd (mm, -3, getdate()))

- 2 jours : select convert (smalldatetime, Dateadd (dd, - 2, getdate()))



Mise a jour des threshold

select "use "+db_name(dbid)+char(10)

+"go"+char(10)+

"sp_addthreshold @dbname='"+db_name(dbid)+"',@segname='logsegment',@free_space="+ convert( char(8), sum(size)*10/100)

+" , @proc_name='sp_thresholdaction' "+

char(10)+"go"+char(10) as "--seuil 30%"

from master..sysusages where segmap=4 group by db_name(dbid)



Utilisation de patindex et substring :

extraire dans S_AnoDescription, les 50 caractères après la chaine @ModuleName.

select distinct

G_PROCESSUS.G_PrsName,S_LOG.G_PrsID,

Substring(convert (varchar(1500),S_AnoDescription), patindex('%@ModuleName%',S_ANOMALY.S_AnoDescription) ,50 ),

S_ANOMALY.S_AnoID --,S_ANOMALY.S_LogID

from S_ANOMALY, S_LOG, G_PROCESSUS

where S_AnoCode in (506, 5003) AND

S_ANOMALY.S_LogID = S_LOG.S_LogID

AND G_PROCESSUS.G_PrsID= S_LOG.G_PrsID




Visualisation des Logins Externes :

SELECT  Server = s.srvname,

            Login = l.name,

            Externlogin = a.object_cinfo

        FROM    master.dbo.sysattributes a,

            master.dbo.sysservers s,

            master.dbo.syslogins l

        WHERE   a.class = 9 AND

            a.object_type = "EL" AND

            a.object_info1 = s.srvid AND

--          s.srvname LIKE @server AND

            a.object = l.suid


 

Commandes pratiques sous Powershell

 Les sites powershell :

 

Gestion d'un profile

$profile.CurrentUserAllHosts : permet d'avoir l'emplacement du fichier profile.ps1

$Profile.AllUsersAllHosts : retourne l'emplacement système par défaut de profile.ps1

 

Télécharger :

  • Télécharger un fichier via une URL (comme wget/curl) : (New-Object System.Net.WebClient).DownloadFile($URL,$File)
  • Télécharger une chaine via une URL (comme wget/curl) : (New-Object System.Net.WebClient).DownloadString($URL)

 

Affiche le service et compte de service d'un instance SQLServer :

get-wmiobject win32_service -filter "(name Like 'MSSQL$%')" | Select name,Startname

 

Comparaison des fichiers :

Fichier autoload.csv contient :

id
9231
9232
9230
9222

Fichier autoload_old.csv contient :

id
9268
9231
9232
9230
9222

Fonction de comparaison

    • compare-object .\autoload.csv .\autoload_old.csv

Résultat :

InputObject                                                                                         SideIndicator
-----------                                                                                         -------------
9268                                                                                                =>

    • diff .\autoload.csv .\autoload_old.csv (Idem au dessus)
    • compare-object (get-content .\autoload.csv) (get-content .\autoload_old.csv) (compare le contenu)
    • Comparaison avec csv (pratique pour travailler avec des données de tables par exemple)

Exemple :

$file1=import-csv -Path ".\autoload.csv"
$file2=import-csv -Path ".\autoload_old.csv"

Résultat de 'compare-object $file1 $file2 -property Id' :

Id                                                                                                  SideIndicato
--                                                                                                  ------------
9268                                                                                                =>

 

Lister les groupes AD d'un login windows

Add-Type -AssemblyName System.DirectoryServices.AccountManagement
$username = read-host -prompt "Enter a username"
$ct = [System.DirectoryServices.AccountManagement.ContextType]::Domain
$user = [System.DirectoryServices.AccountManagement.UserPrincipal]::FindByIdentity($ct, $username)
$groups = $user.GetGroups()
foreach($i in $groups){
  $i.SamAccountName
}

 

 

Remplacer et/ou supprimer les '0' d'une variable

PS P:\> '010.012.000.101' -replace '\b0+\B'
10.12.0.101

 

 

Lister les permissions sur un répertoire

$OutFile = "C:\temp\Permissions.csv"
$Header = "Folder Path,IdentityReference,AccessControlType,IsInherited,InheritanceFlags,PropagationFlags"
Del $OutFile
Add-Content -Value $Header -Path $OutFile

$RootPath = "monrepertoire"

$Folders = dir $RootPath -recurse | where {$_.psiscontainer -eq $true}

foreach ($Folder in $Folders){
    $ACLs = get-acl $Folder.fullname | ForEach-Object { $_.Access  }
    Foreach ($ACL in $ACLs){
        $OutInfo = $Folder.Fullname + "," + $ACL.IdentityReference  + "," + $ACL.AccessControlType + "," + $ACL.IsInherited + "," + $ACL.InheritanceFlags + "," + $ACL.PropagationFlags
        Add-Content -Value $OutInfo -Path $OutFile
    }
}

 

 

Gestion des comptes locaux

$adsi = [ADSI]"WinNT://$env:COMPUTERNAME"

# Listes les comptes locaux
$adsi.Children | where {$_.SchemaClassName -eq 'user'}


# Listes les groupes des comptes locaux
$adsi.Children | where {$_.SchemaClassName -eq 'user'} | Foreach-Object { $groups = $_.Groups() | Foreach-Object {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)} $_ | Select-Object @{n='UserName';e={$_.Name}},@{n='Groups';e={$groups -join ';'}} }

 

 

Gestion des Share Drives

Get-WmiObject -Class Win32_Share -ComputerName hostname

 

Visualisation de l'espace disque (drive et point de montage)

gwmi WIN32_Volume | select Caption, FreeSpace, Capacity

 

Gestion d'erreur avec la variable $error

$error |

  # exclude errors that are no longer in the history list:
  Where-Object { $_.InvocationInfo.HistoryID -gt 0 } |
  # combine history and error information:
  ForEach-Object {
    # get history item for current error:
    $command = Get-History $_.InvocationInfo.HistoryID
    # calculate command execution time:
    $duration = ($command.EndExecutionTime - $command.StartExecutionTime).TotalSeconds
    # get original error message:    
$errormessage = $_.Exception.Message

    # add information to history item:

    $command | Add-Member -MemberType NoteProperty -Name Error -Value $errormessage
    $command | Add-Member -MemberType NoteProperty -Name Duration -Value $duration

    # select properties to output:
    $result = $command | Select-Object -Property ID, Duration, Error, CommandLine, StartExecutionTime
    $result
} |
  # list commands with highest duration first:
  Sort-Object -Property Duration -Descending |
  Out-GridView

 

 

 Barre de progression en pourcentage

for ($i = 1; $i -lt 101; $i++ ){for ($j=0;$j -lt 10000;$j++) {} write-progress -activity "Search in Progress" -status "% Complete:" -percentcomplete $i;}

 

 Traitement de texte / variable sur des fichiers et répertoire

dir C:\batches\logs -I *20140403_22*.log -R | Select-String fail -list | % { notepad $_.path }

permet d'ouvrir les fichiers contenant le mot 'fail' avec notepad.

 

 Exemple de try catch

try 
{
    $current = $ErrorActionPreference 
    $ErrorActionPreference = 'Stop' 
    unprogramme.exe 2>&1 
    $ErrorActionPreference = $current 
}
catch 
{
   Write-Host ('Error occured: ' + $_.Exception.Message)
} 

Le paramètre ErrorActionPreference permet de gérer le comportement de la tache en cas d'erreur (stop, continue, silentcontinue...).

"2>&1" redirige la sortie d'erreur vers la sortie standard.

 

 

 

 

Articles tagged