SelectEtoile : Base de connaissance SGBD

Posts Tagged 'commande'

sqsh -- note

Configuration

Couleur:

\set banner=false
\set hist_auto_save=1
\set prompt='[$histnum]{0;32}${DSQUERY}{0;45}.${database}.{0;37}${lineno}# '
#\set prompt='[$histnum]`echo ${DSQUERY} | grep PRD >/dev/null && tput setaf 1`${DSQUERY}.${database}.${lineno}#`tput sgr0` '
\if [ "`echo ${DSQUERY} | grep -c PRD`" -ne 0 ]
        \set prompt='[$histnum]{1;31}${DSQUERY}{0;37}.${database}.${lineno}# '
\else
        \set prompt='[$histnum]{0;32}${DSQUERY}{1;45}.${database}.{0;37}${lineno}#'
\fi

\set keyword_completion=smart

\alias vim='\buf-edit'
\alias tvi='\buf-edit'
\alias vi='\buf-edit -r'
\alias h='\history'

# Stats

# aliases for T-SQL commands
\alias statson='\loop -e "set statistics io on set statistics time on"'
\alias bo='\loop -e "set showplan on set statistics io on set statistics time on set plan optgoal allrows_dss"'
\alias statsoff='\loop -e "set statistics io off set statistics time off"'
\alias allstat='\loop -e "set statistics io on set statistics time on set showplan on set fmtonly on set statistics plancost on"'
\alias nostat='\loop -e "set statistics io off set statistics time off set showplan off set fmtonly off set statistics plancost off"'
\alias planon='\loop -e "set showplan on"'
\alias planoff='\loop -e "set showplan off"'
\alias ton='\loop -e "dbcc traceon(3604)"'
\alias toff='\loop -e "dbcc traceoff(3604)"'
\alias tmp='\loop -e use tempdb'
\alias mas='\loop -e "use master"'
\alias ssp='\loop -e "use sybsystemprocs"'

 

Commande

Traiter le retour d'un select ligne par ligne:

\set expand=1 (peut-être ajouter dans le .sqshrc)

select name from syslogins where status&2=2

\do

sp_locklogin #1,'unlock'

go

\done

Fonction:

Taille des bases:

\func -x \dfd
declare @pagesize numeric(12)
select @pagesize=(select @@maxpagesize)
SELECT "Database Name" = CONVERT(varchar(50), db_name(D.dbid)),
"Data Size" = STR(SUM(CASE WHEN U.segmap != 4 THEN U.size*@pagesize/1048576 END),10,1),
"Used Data" = STR(SUM(CASE WHEN U.segmap != 4 THEN size - curunreservedpgs(U.dbid, U.lstart, U.unreservedpgs)END)*@pagesize/1048576,10,1),
"Data Full%" = STR(100 * (1 - 1.0 * SUM(CASE WHEN U.segmap != 4 THEN curunreservedpgs(U.dbid, U.lstart, U.unreservedpgs) END)/SUM(CASE WHEN U.segmap != 4 THEN U.size END)),9,1) + "%",
"Log Size" = STR(SUM(CASE WHEN U.segmap = 4 THEN U.size*@pagesize/1048576 END),10,1),
"Free Log" = STR(lct_admin("logsegment_freepages",D.dbid)*@pagesize/1048576,10,1),
"Log Full%" = STR(100 * (1 - 1.0 * lct_admin("logsegment_freepages",D.dbid) /
SUM(CASE WHEN U.segmap = 4 THEN U.size END)),8,1) + "%"
FROM master..sysdatabases D,
master..sysusages U
WHERE U.dbid = D.dbid
AND ((D.dbid > 3) AND (D.dbid < 31513) AND (D.status != 256))
GROUP BY D.dbid
ORDER BY db_name(D.dbid)
go
\done

DDLGEN

\func -x \genddl

\if [ $# -ne 1 ]

\return

\fi

set nocount on

 

declare @objname varchar(30)

select @objname = "${1}"

declare @alwdup varchar(68),

@buffer varchar(255),

@count int,

@count2 int,

@dup varchar(68),

@duprow varchar(68),

@i2 int,

@indid int,

@last int,

@max2 int,

@msg varchar(250),

@name varchar(25),

@objid int,

@segment varchar(68),

@thatkey varchar(30),

@type varchar(68),

@uname varchar(20),

@uname2 varchar(20),

@unique varchar(68),

@with varchar(68),

@year char(4)

 

set nocount on

 

 

/*

**  Make sure the @objname is local to the current database.

*/

if ( @objname like "%.%.%" and

substring(@objname, 1, charindex(".", @objname) - 1) != db_name() )

begin

/* 17460, "Object must be in the current database." */

exec sp_getmessage 17460, @msg out

print @msg

goto fin

end

 

/*

**  Now check to see if the @objname is in sysobjects.  It has to be either

**  in sysobjects or systypes.

*/

select @objid = id

from sysobjects

where id = object_id(@objname)

 

/*

**  It wasn't in sysobjects so we'll check in systypes.

*/

if ( @objid = NULL )

begin

print "Object not in this database"

goto fin

end

 

 

select @count = 0,

@year=convert(char(4),datepart(year,getdate()))

 

/* Decide whether we need to SETUSER to the owner of this table */

select @uname = user_name(uid) from sysobjects where name = @objname

if ( @uname != @uname2 )

begin

select @buffer = "setuser '" + user_name(uid) + "'" from sysobjects

where name = @objname

print @buffer

print "go"

end

select @uname2 = @uname

 

select

@buffer='/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'

print @buffer

select @buffer=space(7)+'Table Name: '+@objname

print @buffer

select @buffer=space(5)+'Date Created: '+convert(char(12),getdate(),107)

print @buffer

select

@buffer='~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/'

print @buffer

print " "

 

/* Start the table creation statement */

select @buffer = "create table " + @objname

print @buffer

select @buffer = space(12) + " ("

print @buffer

select @max2 = count(*)

from syscolumns c,

systypes t

where c.id = @objid

and c.usertype *= t.usertype

 

/* Print out each column of this table */

select  @count2 = 1

while (@count2 < (@max2 ))

begin

select @buffer = space(16) + convert(char(24),c.name) +

convert(char(20),(t.name +

substring(" (" + convert(varchar(3),c.length) + ")", 1, 1 +

6 * (charindex(t.name, "varchar/varbinary"))))) +

isnull(substring ("null",1,(status & 8)*3),"not null") + ","

from syscolumns c,

systypes t

where c.id = @objid

and c.usertype *= t.usertype

and colid=@count2

print @buffer

select @count2 = @count2 + 1

end

select @buffer = space(16) + convert(char(24),c.name) +

convert(char(20),(t.name +

substring(" (" + convert(varchar(3),c.length) + ")", 1, 1 +

6 * (charindex(t.name, "varchar/varbinary"))))) +

isnull(substring ("null",1,(status & 8)*3),"not null")

from syscolumns c, systypes t where c.id = @objid

and c.usertype *= t.usertype

and colid=@count2

print @buffer

select @buffer = space(12) + " )"

print @buffer

print "go"

print ""

 

select @objid = object_id(@objname)

 

/*

**  See if the object has any indexes.

**  Since there may be more than one entry in sysindexes for the object,

**  this select will set @indid to the index id of the first index.

*/

 

select @indid = min(indid)

from sysindexes

where id = @objid

and indid > 0

and indid < 255

 

while @indid != NULL

begin

select @unique = '',

@type = '',

@dup = '',

@duprow = '',

@alwdup = '',

@segment = ''

/*

**  Determine the index type by figuring out if it's a

**  clustered or nonclustered index.

*/

 

if @indid = 1 select @type = "clustered"

if @indid > 1 select @type = "nonclustered"

 

/*

**  Now we'll check out the status bits for this index and

**  build an english description from them.

*/

 

/*

**  See if the index is unique (0x02).

*/

if exists

( select *

from master.dbo.spt_values v, sysindexes i

where i.status & v.number = v.number

and v.type = "I"

and v.number = 2

and i.id = @objid

and i.indid = @indid )

begin

select @unique = ltrim(rtrim(v.name))

from master.dbo.spt_values v, sysindexes i

where i.status & v.number = v.number

and v.type = "I"

and v.number = 2

and i.id = @objid

and i.indid = @indid

end

 

/*

**  See if the index is ignore_dupkey (0x01).

*/

if exists

( select *

from master.dbo.spt_values v,

sysindexes i

where i.status & v.number = v.number

and v.type = "I"

and v.number = 1

and i.id = @objid

and i.indid = @indid )

begin

select @dup = v.name + space(1)

from master.dbo.spt_values v,

sysindexes i

where i.status & v.number = v.number

and v.type = "I"

and v.number = 1

and i.id = @objid

and i.indid = @indid

end

 

/*

**  See if the index is ignore_dup_row (0x04).

*/

if exists

( select *

from master.dbo.spt_values v,

sysindexes i

where i.status & v.number = v.number

and v.type = "I"

and v.number = 4

and i.id = @objid

and i.indid = @indid )

begin

select @duprow = v.name + space(1)

from master.dbo.spt_values v,

sysindexes i

where i.status & v.number = v.number

and v.type = "I"

and v.number = 4

and i.id = @objid

and i.indid = @indid

end

 

/*

**  See if the index is allow_dup_row (0x40).

*/

if exists

( select *

from master.dbo.spt_values v,

sysindexes i

where i.status & v.number = v.number

and v.type = "I"

and v.number = 64

and i.id = @objid

and i.indid = @indid )

begin

select @alwdup = v.name + space(1)

from master.dbo.spt_values v, sysindexes i

where i.status & v.number = v.number

and v.type = "I"

and v.number = 64

and i.id = @objid

and i.indid = @indid

end

 

/*

**  Add the location of the data.

*/

select @segment = s.name

from syssegments s,

sysindexes i

where s.segment = i.segment

and i.id = @objid

and i.indid = @indid

 

if ( @segment = 'default' )

begin

select @segment = NULL

end

else

begin

select @segment = @segment + space(1)

end

 

select @name = name

from sysindexes

where id = @objid

and indid = @indid

 

if ( @dup != '' )

begin

if ( datalength(@with) > 0 ) select @with = @with + ", "+@dup

else select @with = @with + @dup

end

 

if ( @duprow != '' )

begin

if ( datalength(@with) > 0 ) select @with = @with + ", "+@duprow

else select @with = @with + @duprow

end

 

if ( @alwdup != '' )

begin

if ( datalength(@with) > 0 ) select @with = @with + ", "+@alwdup

else select @with = @with + @alwdup

end

if ( @with != '' and datalength(@with) > 0 )

select @with = "with " + @with

 

if ( @unique = '' )

select @unique = @type

else

select @unique = @unique + space(1) + @type

 

print "create %1! index %2! on %3!",@unique,@name,@objname

 

/*

**  First we'll figure out what the keys are.

*/

 

select @i2 = 1,

@buffer = NULL

 

while ( @i2 <= 16 )

begin

select @thatkey = index_col(@objname, @indid, @i2)

if ( @thatkey = NULL ) goto itsdone

if ( @buffer != NULL )

begin

select @buffer = @buffer + ", "

print @buffer

end

else

begin

select @buffer = space(22) + "( "

print @buffer

end

select @buffer = space(24) + @thatkey

/*

**  Increment @i2 so it will check for the next key field.

*/

select @i2 = @i2 + 1

end

 

itsdone:

print @buffer

select @buffer = space(22)+ ")"

print @buffer

if ( @with != null ) print "%1!", @with

if ( @segment != NULL ) print "on %1!", @segment

print "go"

print " "

 

/*

**  Now move @indid to the next index.

*/

select @last = @indid

select @indid = NULL

select @indid = min(indid)

from sysindexes

where id = @objid

and indid > @last

and indid < 255

end

fin:

go

Articles tagged

bcp --initstring

Cool

A partir de la version 15 du client ASE, un nouveau paramètre du bcp permet d'initialiser le bcp avec des commandes SQL.

bcp ... --initstring <SQL statement>

 Exemple:
bcp pubs2..titles in titles.txt –-initstring “set replication off” 
 
 

 

Articles tagged

Petit guide des commandes SYBASE ASE

Un petit guide des différentes commandes pour SYBASE ASE


Les commandes système 'dbcc' :

 

dbcc traceon(3604) : affiche à l’écran

dbcc traceon(3605) : redirige dans la log

dbcc traceon(11209) : updatestat renvoie le row count

dbcc traceon(328) : disable the reformatting

dbcc sqltext(spid) : affiche la requete d’une session

dbcc pss(0,spid,0) :

dbcc page(dbname,page_id) : description d’une page problematique, acces a une page et a son contenu

dbcc checkdb(db_name) : contrôle le chaînage des pages, vérifie la cohérence des tables

dbcc checkcatalog : vérifie les références des tables systèmes

dbcc checkalloc(db_name) : identification des erreurs, vérifie l’allocation des pages dans toute la base de données (traitement long)

dbcc checktable(table_name) : decrit les lien entre chaque page d’un table, indique le nombre moyen de ligne par page (used_pgs nombre de page utilisé par une table, et rowent, nombre de ligne d’une table)

dbcc indexalloc(table_name,indid,full) : vérifie l’allocation des pages pour l’index spécifié

dbcc tablealloc(table_name,full,fix) : vérifie/corrige la bonne/mauvaise allocation des pages d’une table avec l’option (fix ou nofix)

dbcc listoam ou dbcc tablealloc (attention verrou): permet d’examiner des extents et des pages d’allocations

dbcc pglinkage : permet de suivre les chaînes de pages.

dbcc prtipage : permet d’afficher une page d’index.

dbcc gettrunc : liste les points de troncature

dbcc settrunc(ltm,’ignore’) : supprime le point de troncature

Dbcc engine (net, show moteur) affiche les tâches liées au moteur

Dbcc engine (net, showall moteur) affiche toutes les tâches

Dbcc engine (net, netengine moteur) affiche les moteurs auquel sont liées les tâches en cours

dbcc dbrepair(database_name,dropdb) : permet de dropper une base quand elle dans un état 'suspect'. Commande non supportée

 

dbcc dbreboot :

dbcc help(dbreboot)

dbreboot (report | reboot | reboot_norecovery | shutdown | shutdown_load | restart | restart_norecovery, <dbname1> [, <dbname2> ...])

Reboot the specified databases.Options

report – Shows a report on the specified database(s).

reboot – Database is shutdown and restarted with recovery.

reboot_norecovery – Database is shutdown and restarted and left in a “not recovered” state. Can be used to add more space.

shutdown – Database is shutdown and left in an unusable state.

shutdown_load – Database is shutdown and left in a state that allows LOAD DATABASE to be done.

restart – Restart and recover a database that has been shutdown.

restart_norecovery – Restart database and left in a “not recovered” state. Good when there are problems with recovery.

DBCC MARKPROCS(DBName) : commande suite à un rechargement d'un dump d'un autre environnement. Il s'agit en fait d'un bug se traduisant par une erreur lors de l'exécution de curseurs (Ex : Table TableName not found !!!)

 

Les commandes systèmes utiles :

 

select lct_admin(« abort »,0,2) ---- 2 pour tempdb, 0 pour tous les process

select (sysstat2 & 57344) from sysobjects where name=’table_name’ :

donne le type de locking :

0 ou 8192 allpages

16384 datapages

32768 datarows

select inttohex() et/ou biginttohex().

select pssinfo(spid, « tempdb_pages ») : donne les pages créées dans tempdb pour un spid

syslogshold : liste des process en tache de fond

 

 

 

 

Les commandes 'set' :

 

set showplan on : decrit le l’arbre d’instruction

set statistics io on : decrit les io memoire et disque

set statistics time on : decrit le temps de reponse (Parse et Execute time : query plan, Execute time : execute query plan)

set noexec on : n’execute pas la requete mais montre le plan avec showplan

set fmtonly :

set rowcount :

set statistics subquerycache on : affiche les acces ios physique et memoire

SET BACKGROUND ON : redirige l'output dans l'error log du data server

set proc_return_status off : supprime le return status

set plan optgoal allrows_oltp (SYBASE ASE 15)

set plan opttimeoutlimit 3

set statistics plancost on

set compatibility_mode on : activation du compatibility mode. C'est à dire activer l'optimiseur 12.5 sur une version 15

set statement_cache off : désactivation du statement cache

set opportunistic_distinct_view off : mis en place lors de la détection d'un bug SYBASE 15 sur la gestion d'un 'select into' vers une table temporaire #

set option show_missing_stats on : affiche les colonnes de la requete qui n'ont pas de statistiques (option de la 15)

set switch on PRINT_OUTPUT_TO_CLIENT (ASE 12.5.4) : permet de rediriger la sortie à l'écran

set switch on print_plan_index_selection (ASE 12.5.4) : équivalent au 302 (dbcc traceon(302), set switch on 302)

 

 

 

Les Procédures Stockées système :

 

sp_helpsort : configuration server (LANG)

sp_deviceattr : modifie l’option dsync

sp_dbcc_faultreport : liste des erreurs par table

sp_dbcc_faultreport(« long »,db_name,table_name) : specifie les erreurs détaillées sur une seule table

sp_showplan spid,null,null,null : montre le plan

sp_countmetadata ‘open objects’ ou ‘open indexes’ : compte les objets et la place memoire necessaire

sp_reportstats : permet d’obtenir les consommations CPU en fonction des logins

sp_clearstats : pour mettre à zéro les stats

sp_etspace : estime l’espace pris par une table

sp_helpsegment, sp_spaceused : donne l’espace d’une table

sp_object_stats "00:01:00", 5, faodb_agence : visualise les 5 tables les plus consommatrices en locks

sp_cachestrategy nom_base,nom_table,nom_index 

sp_cursorinfo :

sp_options 'show' : affiche les options de la session courante

sp_options 'show',null,null,4590 : affiche les options du spid 4590

 

 

Les variables globales :

@@timeticks (durée d’une impulsion en ms)

@@cpu_busy (nombre total d’impulsion CPU)

@@io_busy (impulsion consommées dans les E/S)

@@total_read (nombre total de lecture disque)

@@ total_write (nombre total d’écriture disque)

 

@@nestlevel compte le nombre d'imbrication.

@@identity

 

 

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