Browse Source

reinit notebook depot

pull/2/head
vincent 11 months ago
commit
ac403f2028
  1. 7
      .gitignore
  2. 56
      Cuisine/idee cuisine.md
  3. 3
      Divers/index.md
  4. 0
      Divers/joke.md
  5. 7
      Divers/lien/OpenData.md
  6. 3
      Divers/lien/index.md
  7. 9
      Divers/lien/mental_model.md
  8. 3
      Divers/replique citation/citation.md
  9. 26
      Divers/replique citation/eldorado.md
  10. 4
      Divers/replique citation/littanie_contre_la_peur.md
  11. 18
      Divers/replique citation/replique.md
  12. 1
      Divers/replique citation/republique-alamo.md
  13. 4
      Divers/replique citation/voyez_cela.md
  14. 1
      IT/JS/index.md
  15. 0
      IT/JS/vuejs.md
  16. BIN
      IT/SQL/(protegé)Memento SQL_2018 par3.pdf
  17. BIN
      IT/SQL/66Classeur1.pdf
  18. 784
      IT/SQL/FormationSQL.md
  19. 25
      IT/SQL/SCRIPTS SQL QSA ORSYS/DBA SURVEY.sql
  20. 12
      IT/SQL/SCRIPTS SQL QSA ORSYS/DEMO maintenance DBCC CHECK.sql
  21. 42
      IT/SQL/SCRIPTS SQL QSA ORSYS/DEMO trigger DDL base et serveur.sql
  22. 48
      IT/SQL/SCRIPTS SQL QSA ORSYS/Demo audit disques.sql
  23. 47
      IT/SQL/SCRIPTS SQL QSA ORSYS/Demo base snapshot.sql
  24. 13
      IT/SQL/SCRIPTS SQL QSA ORSYS/Demo déclencheur DDL LOGON.sql
  25. 42
      IT/SQL/SCRIPTS SQL QSA ORSYS/Demo exec session connexion et requêtes LIVE.sql
  26. 23
      IT/SQL/SCRIPTS SQL QSA ORSYS/Demo index a créer.sql
  27. 78
      IT/SQL/SCRIPTS SQL QSA ORSYS/Demo index en doublon ou inclus.sql
  28. 27
      IT/SQL/SCRIPTS SQL QSA ORSYS/Demo index et stats.sql
  29. 10
      IT/SQL/SCRIPTS SQL QSA ORSYS/Demo mise en table du résultat d'un DBCC TABLRESULTS.sql
  30. 32
      IT/SQL/SCRIPTS SQL QSA ORSYS/Demo partitionnement gestion.sql
  31. 32
      IT/SQL/SCRIPTS SQL QSA ORSYS/Demo top 10 des requêtes les plus pourries.sql
  32. 262
      IT/SQL/SCRIPTS SQL QSA ORSYS/Démo AUDIT DB.sql
  33. 0
      IT/SQL/SCRIPTS SQL QSA ORSYS/EX0 2.txt
  34. 11
      IT/SQL/SCRIPTS SQL QSA ORSYS/EXO 1.txt
  35. 65
      IT/SQL/SCRIPTS SQL QSA ORSYS/EXO 3 sécurité.sql
  36. 14
      IT/SQL/SCRIPTS SQL QSA ORSYS/EXO 5.txt
  37. 34
      IT/SQL/SCRIPTS SQL QSA ORSYS/EXO 6 tache plainfiées.sql
  38. 130
      IT/SQL/SCRIPTS SQL QSA ORSYS/EXO 7 indexation.sql
  39. 28
      IT/SQL/SCRIPTS SQL QSA ORSYS/EXO 8 restauration.sql
  40. 24
      IT/SQL/SCRIPTS SQL QSA ORSYS/Etapes du patitionnement.sql
  41. 63
      IT/SQL/SCRIPTS SQL QSA ORSYS/Exo 4.sql
  42. 27
      IT/SQL/SCRIPTS SQL QSA ORSYS/Exo 5 TDED.sql
  43. 103
      IT/SQL/SCRIPTS SQL QSA ORSYS/Liste des privilèges dans une base - version incomplete aujourd'hui.sql
  44. 134
      IT/SQL/SCRIPTS SQL QSA ORSYS/MAITENANCE INDEX ET STATS.sql
  45. 48
      IT/SQL/SCRIPTS SQL QSA ORSYS/Méta données du partitionnement.sql
  46. 30
      IT/SQL/SCRIPTS SQL QSA ORSYS/Métadonnées bases et fichiers.sql
  47. 48
      IT/SQL/SCRIPTS SQL QSA ORSYS/Métadonnées du partitionnement.sql
  48. 18
      IT/SQL/SCRIPTS SQL QSA ORSYS/Métadonnées sécurité niveau serveur.sql
  49. 74
      IT/SQL/SCRIPTS SQL QSA ORSYS/Métrique du stockage d'une base.sql
  50. 73
      IT/SQL/SCRIPTS SQL QSA ORSYS/Proc BACKUP.sql
  51. 8
      IT/SQL/SCRIPTS SQL QSA ORSYS/Reconfiuration instance SQL.sql
  52. 7
      IT/SQL/SCRIPTS SQL QSA ORSYS/Rectifier les croissance en pourcentage des fichiers des bases.sql
  53. 30
      IT/SQL/SCRIPTS SQL QSA ORSYS/Résoudre le problème des conflist de collations croisés.sql
  54. BIN
      IT/SQL/SCRIPTS SQL QSA ORSYS/SQLServer-Performance-Poster QUEST.pdf
  55. 93
      IT/SQL/SCRIPTS SQL QSA ORSYS/Solution exeo 2.sql
  56. 146
      IT/SQL/SCRIPTS SQL QSA ORSYS/Solution exo 1 stockage.sql
  57. 7
      IT/SQL/SCRIPTS SQL QSA ORSYS/Stagiaires.txt
  58. BIN
      IT/SQL/SCRIPTS SQL QSA ORSYS/Trace.sql
  59. 10
      IT/SQL/SCRIPTS SQL QSA ORSYS/Voir les transaction ancienne ou longues.sql
  60. 17
      IT/SQL/SCRIPTS SQL QSA ORSYS/audit du JT.sql
  61. 11
      IT/SQL/SCRIPTS SQL QSA ORSYS/divergence de collation.sql
  62. 14
      IT/SQL/SCRIPTS SQL QSA ORSYS/passage d'une commande DATABASE en mode SINGLE_USER.sql
  63. 24
      IT/SQL/add_partition.sql
  64. 195
      IT/SQL/cheasheet.md
  65. 83
      IT/SQL/commande.md
  66. 79
      IT/SQL/create_partition.SQL
  67. 48
      IT/SQL/show_partition.SQL
  68. 5
      IT/Soft_util.md
  69. 5
      IT/WebDesign/CSS.md
  70. 151
      IT/WebDesign/building_palette.md
  71. 1
      IT/WebDesign/emailHTML.md
  72. 2
      IT/WebDesign/html.md
  73. 21
      IT/ansible.md
  74. 130
      IT/docker/index.md
  75. 16
      IT/domotique/homeassistant.md
  76. 8
      IT/domotique/index.md
  77. 332
      IT/fail2ban.md
  78. 43
      IT/git.md
  79. 34
      IT/http/ampache_nginx_config.conf.md
  80. 57
      IT/http/index.md
  81. 19
      IT/http/nginx.md
  82. 12
      IT/hugo.md
  83. 189
      IT/install_nextcloud.md
  84. 5
      IT/linux/AUR.md
  85. 26
      IT/linux/LVM.md
  86. 9
      IT/linux/arch.md
  87. 133
      IT/linux/arch_install.md
  88. 45
      IT/linux/cron.md
  89. 28
      IT/linux/grubshell.md
  90. 48
      IT/linux/linux.md
  91. 8
      IT/migration_server_reminder.md
  92. 3
      IT/motorola.md
  93. 1
      IT/patron de conception.md
  94. 0
      IT/python/flask.md
  95. 14
      IT/python/index.md
  96. 9
      IT/raspberry.md
  97. 2
      IT/regex.md
  98. 17
      IT/ssh.md
  99. 15
      IT/syncthing.MD
  100. 8
      IT/synologyTips.md

7
.gitignore

@ -0,0 +1,7 @@
todoist
Quicknote.md
_docs
site
_build
note
logbook.md

56
Cuisine/idee cuisine.md

@ -0,0 +1,56 @@
# Idee Cuisine
## quotidien
- Pâte bolo
- Pâte carbo
- Pâte au saumon chaud
- Pate saumon surimi froid
- Pate facon risotto copa champigon
- Pate facon risotto crevette
- Ravioli
- Rissoto
- Escalope à la crème
- Gratin dauphinois
- Salade
- Pizza
- Lasagne saumon ou bœuf
- Steak haché/cordon bleue
- Steak pomme de terre
- Ouef à la cocq
- Salade de riz au thon
- Salade composée
- Omelette
- Wrap
- Ouef au thon
- Oeuf dur aumon fume
- Quiche
- Croque monsieur
- Pain perdu
- mont d or
- tardine gourmande
- Enchiladas
- Enchiladas saumon
- terrine surimi
- vol au vent
## sauce
- bechamel
- vinaigrette
- sauce au poivre
- Sauce au maroile
- sauce a l'oseille
# preparer
- Casoulet
- Chilicon carne
- filet mignon
- poulet roti
- carbonnade
- joue de porc
- roti orloff
# desert
- clafoutie au pomme
- mouse de fraise

3
Divers/index.md

@ -0,0 +1,3 @@
[site permettant d'avoir les prox d'achat de masion ou terrain](https://app.dvf.etalab.gouv.fr)
[liste api public](https://github.com/public-apis/public-apis)

0
Divers/joke.md

7
Divers/lien/OpenData.md

@ -0,0 +1,7 @@
# OpenData Link
[Visualisation budget France](https://budget.parlement-ouvert.fr/visualisation)
[Versionning git code de lois](https://archeo-lex.fr/codes)
[fabrique de la lois](https://www.lafabriquedelaloi.fr/)

3
Divers/lien/index.md

@ -0,0 +1,3 @@
[site permettant d'avoir les prox d'achat de masion ou terrain](https://app.dvf.etalab.gouv.fr)
[liste api public](https://github.com/public-apis/public-apis)

9
Divers/lien/mental_model.md

@ -0,0 +1,9 @@
# Mental Model
## Links
- [Ask HN: Which books teach mental models?](https://news.ycombinator.com/item?id=19895407)
- [Mental Models: The Best Way to Make Intelligent Decisions (109 Models Explained)](https://fs.blog/mental-models/)
- [The Great Mental Models Project](https://fs.blog/tgmm/) - Equalize opportunity in the world by making a high-quality multidisciplinary, interconnected, education free and available to everyone.
- [Model Thinking Course](https://www.coursera.org/learn/model-thinking)
- [The Power of Incentives: Inside the Hidden Forces That Shape Behavior](https://fs.blog/2017/10/bias-incentives-reinforcement/)
- [Mental Models I Find Repeatedly Useful (2016)](https://medium.com/@yegg/mental-models-i-find-repeatedly-useful-936f1cc405d)

3
Divers/replique citation/citation.md

@ -0,0 +1,3 @@
>Se vouloir libre, c'est aussi vouloir les autres libres
simone de beauvoir

26
Divers/replique citation/eldorado.md

@ -0,0 +1,26 @@
Un chevalier
sur son coursier,
jour et nuit au grand galop
, courut longtemps
tout en chantant.
Il cherchait l'El Dorado,
au-delà des monts
les plus hauts,
dans les profondeurs de la terre,
poursuivant sa chimère !
A moitié mort,
marchant encore,
il vit une ombre au grand galop.
Il lui cria, "
Ombre dis-moi, suis-je encore loin d'El Dorado ?
"
"
Au-delà des monts
les plus hauts,
dans les profondeurs de la terre,
chevauche sans repos,
dit l'ombre solitaire,
si tu cherches El Dorado !
"

4
Divers/replique citation/littanie_contre_la_peur.md

@ -0,0 +1,4 @@
Je ne connaîtrai pas la peur, car la peur tue l'esprit. La peur est la petite mort qui conduit à l'oblitération totale. J'affronterai ma peur. Je lui permettrai de passer sur moi, au travers de moi. Et lorsqu'elle sera passée, je tournerai mon œil intérieur sur son chemin. Et là où elle sera passée, il n'y aura plus rien. Rien que moi.
I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path. Where the fear has gone there will be nothing. Only I will remain.

18
Divers/replique citation/replique.md

@ -0,0 +1,18 @@
# replique
- C'est Pas piquer des hanneton
- on est pas la pour embrasser la princesse
- on est pas la pour enfiller des perles
- On n'est pas là pour sucer des glaçons
## audiart
- Le jour où on mettra les cons sur orbite, t'as pas fini de tourner
- Les cons, ça ose tout. C'est même à ça qu'on les reconnaît
- Dans la vie on partage toujours les emmerdes, jamais le pognon.
## inspecteur harry
> - Lorsque je vois un adulte du sexe masculin courir derrière une femelle avec l’intention évidente de la violer, je le descends avant, c’est ma politique.
> - L’intention ? Elle restait à établir.
> - Quand un gars à poil court derrière une fille la queue en l’air avec un couteau de boucher à la main, c’est drôle, j’ai peine à croire qu’il est en train de quêter pour la croix rouge.
- les avis c'est comme les trous du cul tout le monde en a un

1
Divers/replique citation/republique-alamo.md

@ -0,0 +1 @@
République. J’aime le son de ce mot. Il signifie que les gens peuvent vivre libres, parler comme bon leur semble, aller et venir, acheter ou vendre, s’enivrer ou rester sobres, selon leurs désirs. Certains mots vous font vibrer. République est l’un de ces mots qui me nouent la gorge – la même sensation qui s’empare du père voyant voit son bébé faire ses premiers pas ou son premier enfant entreprendre de se raser et parler comme un homme. Certains mots vous réchauffent le cœur. République est l’un de ces mots.

4
Divers/replique citation/voyez_cela.md

@ -0,0 +1,4 @@
Voyez cela je vois mon père.
Voyez cela je vois ma mère et mes sœurs et mes frères.
Voyez cela je vois tous mes ancêtres qui sont assis et me regardent.
Et voilà, voilà qu’ils m’appellent et me demandent de prendre place à leurs côtés dans le palais de Valhalla là ou les braves vivent à jamais.

1
IT/JS/index.md

@ -0,0 +1 @@
[Javascript without JQuery](https://github.com/nefe/You-Dont-Need-jQuery)

0
IT/JS/vuejs.md

BIN
IT/SQL/(protegé)Memento SQL_2018 par3.pdf

Binary file not shown.

BIN
IT/SQL/66Classeur1.pdf

Binary file not shown.

784
IT/SQL/FormationSQL.md

@ -0,0 +1,784 @@
# formation SQL SERVER
<!-- @import "[TOC]" {cmd="toc" depthFrom=1 depthTo=6 orderedList=false} -->
<!-- code_chunk_output -->
- [formation SQL SERVER](#formation-sql-server)
- [Vocabulaire](#vocabulaire)
- [historique de SQL server](#historique-de-sql-server)
- [Particularité de SQL Server](#particularité-de-sql-server)
- [nature des SGBDR](#nature-des-sgbdr)
- [conception de Codd](#conception-de-codd)
- [relation](#relation)
- [attributs](#attributs)
- [atomicité](#atomicité)
- [algébre relationell](#algébre-relationell)
- [migration de base](#migration-de-base)
- [instaltion/Configuration](#instaltionconfiguration)
- [patch](#patch)
- [choix immuable lors de l'instalation](#choix-immuable-lors-de-linstalation)
- [different service](#different-service)
- [instance](#instance)
- [configuration minimal](#configuration-minimal)
- [configuration Base](#configuration-base)
- [base system](#base-system)
- [renomer un serveur SQL](#renomer-un-serveur-sql)
- [outils](#outils)
- [SQLcmd.exe](#sqlcmdexe)
- [table d'admin](#table-dadmin)
- [sys.object](#sysobject)
- [table instance](#table-instance)
- [table base](#table-base)
- [stockage](#stockage)
- [groupe de fichier](#groupe-de-fichier)
- [definition de fichier](#definition-de-fichier)
- [planification de capacité](#planification-de-capacité)
- [disque](#disque)
- [SSD](#ssd)
- [machine virtuel](#machine-virtuel)
- [reduction de fichier](#reduction-de-fichier)
- [transaction](#transaction)
- [partitionnement](#partitionnement)
- [Type](#type)
- [Collonne calculée](#collonne-calculée)
- [Snapshot](#snapshot)
- [import export](#import-export)
- [Bulk INSERT](#bulk-insert)
- [SSIS](#ssis)
- [Schema SQL](#schema-sql)
- [Securité](#securité)
- [compte connexion](#compte-connexion)
- [Utilisateur SQL](#utilisateur-sql)
- [privilége](#privilége)
- [roles](#roles)
- [chifrement](#chifrement)
- [Tache d'administratrion](#tache-dadministratrion)
- [agent SQL](#agent-sql)
- [Database Mail](#database-mail)
- [Travaux](#travaux)
- [monitoring](#monitoring)
- [disque](#disque-1)
- [transaction](#transaction-1)
- [cache](#cache)
- [DBCC](#dbcc)
- [integrité des bases](#integrité-des-bases)
- [réparation base endommagée](#réparation-base-endommagée)
- [index](#index)
- [Sauvegarde](#sauvegarde)
- [mode de récupération](#mode-de-récupération)
- [syntaxe de commande](#syntaxe-de-commande)
- [Urgence](#urgence)
- [multifichier](#multifichier)
- [compresioon](#compresioon)
- [lire une sauvegarde](#lire-une-sauvegarde)
- [surveillance et performance](#surveillance-et-performance)
- [Historisation des données](#historisation-des-données)
- [verrouillages et blocages](#verrouillages-et-blocages)
<!-- /code_chunk_output -->
[benchmark professionnelle](http://www.tpc.org/information/benchmarks.asp)
## Vocabulaire
- SGBD:Système de gestion de base de données
- page: unité de stockage minimal de 8ko
- schema SQL: unité de stockage logique conteneur d'objet relationnelle (dbo est un schema) = namespace
- extention: block de 8 pages = 64ko
- lobs: large object
GO: séparateur de batch qui s'adresse au client il execute les requéte d'avant pour être sur que la requête c'est bien éxecuter
over():
## historique de SQL server
1974: ingres
1984: sybase (premier SGBD client serveur)
1988: accord sysbase/microsoft
1989: sortie de SQL server Unix
1993: rupture avec sysbase sortie de la premiére version de SQL server full windows
1999: version 7 premiére version professionnelle
2005: refonte monté en gamme
2012: SQL server devient plus performant que oracle
## Particularité de SQL Server
- information Schema: select * from information_Schema.Tables -> permet d'avoir la liste des tables
- multischema: chaque base peu contenire un nombre indeterminé de schema
- posibilité de requéter des base sur le meme serveur (oracle postgress foive utilisé un dblink)
- chaque base dispose son journal de transaction (oracle postgress un journal pour tous)
- transaction: lot de commande
- In Memory: plus d'écriture dans le journal de transaction (a utilisé en mode hight availlibility)
- strecht table: stockage de table dans le cloud
## nature des SGBDR
## conception de Codd
- Séparation HArdware/logique
- algébre relationelle
- insersion supression modification emsembliste (peut mettre a jour plusieur donné dans une seule requête)
### relation
- posséde un nom
- possésde une collection d'attributs
- posséde une clef primaire
- peut posséder d'autre clefs
- valeur atomique
- **pas de relation sans clef primaire**
### attributs
- non unique au sein de la relation
- **pas de null**
- fait partie d'un domaine (valeur possible de l'attribut)
### atomicité
donnée atomique: ne peut pas être subdiviser sans perte de sens
en base de donné il faut stockés les donnés au maximum de facon atomique (exemple un numéro de sécurité social est divisable en plusieurs informations)
## algébre relationell
**pas de jointure dans le where**
ordre d'exécution des requétes: *from,where,group by,having,select,orderby*
## migration de base
- de 7 a 2000
- 2000 a 2005 ou 2008
- 2005 - now
## instaltion/Configuration
- classement: french point de code binaire
- authent: mode mix
- **formatage du disque en cluster de 64KO pour s'aligner sur la taille de l'unité d'extention**
- pas de raid 5 6 faut mieux se limiter au raid 0 1 10
- **pas d'outil instalé sur le serveur**
### patch
- <2016 attendre la demande de microsft
- \>2016 faire au plus vite
### choix immuable lors de l'instalation
- répertoire des exe
- répertoire base systeme
- collation de base
### different service
- SQL server Broswer: permet de naviger dans les instance par non au lieux de port (recommandé de désactiver sur la prod)
- gérée les service via SQL Server Configuration Manager
### instance
- port 1433 si une seul instance
- **Ne jamais redemmarrer une instance sauf absolue neccesité**
#### configuration minimal
- max server memory
- cost threshold for parallelism -> cout pour que le moteur étudie le paralémlisme ->min 12 sur PC perso, 25 et 100 sur prod
- max degree of parrallelism -> nombre maximum de thread parralléle recommandation sur grosse machine 1/4 des coeur -1 sur du transactionnelle, plus sur du decissionelle
- optimize for ad hoc workloads:1
- Backup compression default:1 gain sur la vitesse de compression cpu vs vitesse écriture disque sauf si base sont setter en 'transparente data encryption' (chiffrage des fichier de la base)
- Backup checksum default',1
### configuration Base
**ne jamais mettre en ON:**
- AUTO_CLOSE
- AUTO_SHRINK
**mettre a ON:**
- AUTO_CREATE_STATISTICS
- AUTO_UPDATE_STATISTICS
- pour version entreprise: AUTO_UPDATE_STATISTICS_ASYNC
activé l'autonomie partielle pemet de créer des compte user dédiéet de réglé des probléme de collation
```SQL
ALTER DATABASE [DB_GRAND_HOTEL] SET CONTAINMENT = PARTIAL WITH NO_WAIT
```
### base system
**visible:**
- master: liste des bases,connexions,lessage d'erreur (a sauvegarder impérativement tous les jour)
- model: template pour création des basrs
- msdb: gestion des travaux SQL SERVER (a sauvegarder impérativement tous les jour)
- tempdb: objet temporaire
**invisible:**
- mssqlsystemresource: routine systéme
**optionel:**
- ditribution (réplication)
- semanticdb (recherche sémantique)
### renomer un serveur SQL
- renomer le serveur au niveau de windows
- changer le nom dans master
```SQL
select * from sys.servers
exec sp_dropserver ''
exec sp_addserver '', local
```
- redemmarré le service
## outils
- SQL server Management Studio (ne pas utilisé sur une instance deffectueuse)
- SentryONe Plan Explorer (add on permetant d'améliorer le plan d'éxécution des requête)
- Gestionnaire de configuration SQL Server
- apexlog visualisation de log
### SQLcmd.exe
utilitaire en ligne de commande
option:
- *-S* nom du serveur
- *-U" login
- *-P* MDP
- *-E* Sécurité intégré windows
- *-q* tamponne unse requéte (go pour lancer)
- *-Q* lance une requête
- *-A* mode DAC (Dedicated Administrative Connector) connection d'urgence permet de mobiliser les resource pour la connection a utiliser en local
## table d'admin
### sys.object
- contient tous les objet de la base
- *is_ms_shipped* permet de voir les objet system
### table instance
- sys.servers
- sys.databases
- sys.master_files
- sys.configuration
### table base
- sys.table
- sys.schema
- sys.database_files
- sys.indexes
- sys.index_column
- sys.stats
## stockage
considérer les fichier comme si s'était des disque d'OS
deux fichier:
- mdf fichier de donnée (Master Data File)
- ldf journal de transaction (Log Data File)
### groupe de fichier
possibilité de cré diferent group de fichier pour la même base par example
mettre les collonnes purement relationelle dans un group dans un groupe de fichier X
mettre les donné de type blob dans un groupe de fichier spécifique
### definition de fichier
name
filename
Size
MaxSize
Filegrowth
- les taille sont exprimé en KB,MB,GB
- pas de croisance en pourcentage.
### planification de capacité
- journale de transaction 20% des donnée pour les grosse base,40% pour les petitte
- ne pas placez les table ddans le groupe primary
- creer un groupe de fichier blob
- créer plusieur fichier par groupe de fichier en fonction de disques physique
### disque
- raid 0 ou 1 uniquement
#### SSD
optmisation des écriture necesaire **need disk write intensive**
#### machine virtuel
vaux mieux utiliser le stockage non virtuel
non recommandé pour utilisation particuliére
#### reduction de fichier
DBCC SHRINKFILE
options:
- EMPTYFILE: permet de vider le fichier (besoin d'un autre fichier dans le groupfile pour transférer les donnés)
### transaction
aficher le journal de transaction
`select * from sys.fn_dblog(null, null)`
fichier de transaction est le plus sensible a la vitesse d'écriture
3 mode de journalisation:
- Full: journalisation max, aucune purge
- BULK logged: journalisation min, aucune purge
- Simple: journalisation min, purge auto
les deux premier necesitte des savegarde transactionelle pour purger
dans base transactionelle utilisé le mode full
dans les base decisionnelle BI plutot simple
frequence de sauvegarde du journal de transaction:20 a 30 min
si JT plein passez en mode simple.
` alter database [toto] set recovery simple `
### partitionnement
permet de diminuer ou ventiler la plage es données scrutées:
- les recherches
- les mises a jour (prallélisme)
1 création des espace de stockage
2 creation de la fonction de partitionnement
create PArtition Function PF_Date_facture (Datetime2(0))
```SQL
AS RANGE Right
For values ('2018-01-01','2019-01-01','2020-01-01');
```
3 création du schema de répartition
```SQL
Create PARTITION SCHEME PS_DATE FACTURE
as PARTITION PF_DATE_FACTURE
to (FG_OLD,FG_2018,FG2019,FG2020)
```
**on ne peut pas avoir une table stocker sous forme de cluster et partitioner pour cela il
faut supprimer le cluster et recréer un cluster sur la partition**
4 création de l'objet sur la partition
```SQL
create table (...)
ON PS_DATE_FACTURE (coll_critere)
create INDEX (...)
ON PS_DATE_FACTURE (coll_critere)
```
## Type
litteraux: *char,varchar,nchar,nvarchar*
Numérique: *int,smallint,bigint,tinyint,decimal,numeric,float,real*
time: *datetime(obsolete),**datetime2**,time,datetimeoffset*
Binaire: *bit,binary,varbinary,hierarchyID,uniqueindetifier*
Lobs:
- CLOB => varchar(max)
- NCLOB => NVARCHAR(max)
- BLOB => VARBINARY(max), XML, GEOGRAPHY, GEOMETRY
## Collonne calculée
## Snapshot
limité édition enterprise
photographie de la base de données (assimilé a un journal de trasaction inversé).
a utilisé pour les grosse base avec un serveur qui tien la route car le serveur doit mettre a jour le snapshot a chaque modification de la base.
## import export
### Bulk INSERT
- CHECK_CONSTRAINTS: verifie les contraintes Check et FK
- FIRE_TRIGGER: execute les déclencheur
- KEEPIDENTITY: force la valeur dans les auto increments
- KEEPNULLS: collonnes vides transformées en NULL
- BATCHSIZE: spécifie la taille du lot de données
- KILOBYTES_PER_BATCH: Découpe le lot par volume
- ROWS_PER_BATCH: Découpe le lot par ligne
### SSIS
## Schema SQL
Espace de stockage des objet relationelle
- schema par default de la base: dbo
deux niveaux:
- un schema par default est attribuer a un utilisateur
- un schema par default de la base
creation
```SQL
create schema nom_schema
Authorization = nom_utilisateur
```
transfert
```SQL
Alter SCHEMA nom_schema
TRANSFER nom_objet
```
delete
```SQL
DROP SCHEMA nom_Schema
```
## Securité
### compte connexion
create SQL login :
```SQL
create LOGIN CNX_SQL_LAMBDA WITH PASSWORD = 'AZERT123'
```
create WIndows login :
```SQL
create LOGIN CNX_SQL_LAMBDA From windows
with DEFAULT_DATABASE=toto,DEFAULT_LANGUAGE= us_english
```
### Utilisateur SQL
Utilisateur SQL autonome
deux cas:
- utilisateur sans compte de connexion
- utilisateur se conenctant directement a la base
pour le dernier cas la base doit être paramétrée en *contained*
```SQL
ALTER DATABASE [DB_GRAND_HOTEL] SET CONTAINMENT = PARTIAL WITH NO_WAIT
```
### privilége
afficher priovilége
```SQL
select * FROM sys.fn_builtin_permissions(null)
ORDER BY parent_class_desc,covering_permission_name, class_desc
```
```SQL
GRANT <liste de privilèges>
ON <objet a privilégier>
to <liste des entité bénéficiaire>
DENY EXECUTE
ON SCHEMA::[dbo]
TO [USR_ECRIVAIN]
```
### roles
permet de presetter des proviléges
sysadmin,bulkadmin,dbcreator,setupadmin,securityadmin,serveradmin
metadonné:
sys.server_principals
sys.server_permissions
role predefinit de database: db_owner,db_datareader,db_datawriter,db_denydatareader,db_denydatawriter,db_securityadmin,db_accessadmin,db_ddladmin,db_backupoperator
public: roles de base que tous les utilisateur on
revoir les fonction de sécurité sur le diapo
## chifrement
revoir les fonction de sécurité sur le diapo
## Tache d'administratrion
### agent SQL
planificateur de tache associé a SQL SERVER.
les donnée de l'agent sont stockés dans la base msdb.
on y trouve des jog et des alerte
#### Database Mail
permet d'envoyer des mail par le biais du moteur SQL
### Travaux
ensemble d'étape a réaliser
s'execute par default sur le compte de service de l'agent
sur le compte de Service SQL server pour les Transactions
pour les extention de droit on doit utiliser un "proxy"
### monitoring
#### disque
saturation disque
taux de remplisage des fichier de bases
drossisement des fichier SQL des bases
activité IO de disque
#### transaction
longue transaction
blocages
verrou mortels
#### cache
rémanence des pages en cache
taux de mise en cache
### DBCC
DAtabase console Command
utilitaire permettant
- obtenir des informations
- modifier le comportement du moteur
- effectuer la maintenance bas nivaux
#### integrité des bases
- CHECKALLOC
- CHECKCATALOG
- CHECKTABLE
- CHECKFILEGROUP
- CHECKDB
- CHECKCONSTRAINTS
#### réparation base endommagée
lire le diagnostique mais
- ne pas ce précipitez sur la commandes REPAIR
- Commencez par revoir le support (disque)
- Déplacer la base si besoin
- si l'objet endommagé est un index non clustered, supprimez et recréez
- si c'est une table vous pouvez peut être récupérer les pages endommagées (RESTORE PAGE)
si repair_allow_DATA_LOSS est utilisé:
- vérifier les contraintes (notamment FK) sur les tables réparées (checkconstraint)
- supprimez les lignes orpheline a l'aide de requéte (semi aniti joiture left)
- désactiver préalablement les contraints FK
## index
- Primary Key création index cluster par default
- foreign key: ne neccesite pas tous le temps un index
structure de donnée redondante pour acccélérer certaine recherche
relationelle:
- B-tree+
- hash
- BW-Tree
Analyptique
- ColumnStore
PArticuler
- XML
- GEO
- full TEXT
les index B-tree peut être utilisé par
- =
- < > >=>=
- Between
- LIKE 'blalal%'
- Group By
- Order by
2 type d'index:
- clustered table triée par la cled d'index (un par table comme il represente la table)
- NONCLUSTERED: index avec copie des données
ce dernior neccesite un renvoie pour retrouver la ligne originelle de la table
- par un row ID (si pas de index clustered)
- la valeur de la cles clustered
le row ID contien 3 info:
- numéro de fichier dans la base (file_id)
- numéro de page dans le fichier
- numéro de slot de ligne dans la page
les clef d'index clustered devrait:
- être unique
- Not Null
- être la plus petite possible
- ne pas pouvoir être modifié
- toute table doit avoir une clés PRIMAIRE
- la clef Primaire devrait être un collonne IDENTITY
pour voir la fragmentation des index
```SQL
select * from sys.dm_db_index_physical_stats(NULL,NULL,NULL,NULL)
where avg_fragmentation_in_percent > 10 and page_count > 64
```
pour défragmenter
```SQL
alter index .... reorganize -> pas bloquant mais pas top
alter index ..... Rebuild -> bloquant mais pas top (nom bloquant si verzsion entreprise et mode online)
```
## Sauvegarde
consite a dupliquer les données contenu dans un systeme inforamtique de maniére a pouvoir le restaurer
deux conception:
- sauvegarde pour pallier a l'erreur humaine
- sauvegarde pour archivage
3 mode de sauvegarde:
- complet:
- Enregistre l'intéfrité de la base de données a l'huere de fin de la sauvegarde compléte.
- Laisse le journal tel quel.
- initialise les sauvegarde diferentielles et du journal de transaction.
- diferentille: enregistre les pages modifiées depuis la derniére sauvegarde compléte et les transactions qui ont eu lieu pendant la sauvegarde
- journal de transactions: enregistre mes transactions qui ont eu lieu depuis la derniére sauvegarde
### mode de récupération
- full (par default) obligatoire en haute dispo
- bulk logged
- simple
### syntaxe de commande
complete
BAckup DATABASE
differentiel
Backup DATABASE WITH DIFFERENTIAL
transactionelle
BAckup LOG
### Urgence
**COPY_ONLY**: effectue une sauvegarde dans inscription dans le plan de sauvegarde
### multifichier
il est possible d'envoyer la sauvegarde sur plusieur fichier en paralléle chaque ficcier contien une partie de la sauvegarde
il est aussi possible d'envoyer la sauvegarde sur diferent device
### compresioon
WITH COMPRESSION
gain sur le temps de sauvegarde
gain important sur le temps de restauration
gain importants sur le volume
### lire une sauvegarde
RESTORE LABELONLY: donne des info sur lr média de sauvegarde
RESTORE HEADERONLY: liste les fichier de sauvgarde dans le média
RESTORE FILELISTONLY list les fichier restaurable pour l'in des sauvegarde contenue
RESTORE VERIFYONLY: controle la sauvegarde
## surveillance et performance
### Historisation des données
Tables temporelles:
- Table Temporalisée: une table de production dont on rajoute 2 collonnes techniques qui peuvent être "hidden" et qui sont alimentées automatiquement a chaque insert update
- table d'historisation: table technique contenant l'historique des évolution de chacune des lignes de la table a laquelle elle est associée.
l'intervalle de temps est ouvert a droite fermée a gauche
interrogation temporelle
- as-of
- from
- between
- contained in
- all
### verrouillages et blocages
mode de verrouillage pessimiste par default
- une écriture bloque la lecture et l'écriture d'autre processus
- le verrouillafe peut entrainner des: wait,Blocage,deadlock

25
IT/SQL/SCRIPTS SQL QSA ORSYS/DBA SURVEY.sql

@ -0,0 +1,25 @@
-- DISQUES
-- 1 saturation des disques
-- 2 taux de remplissage des fichiers des bases
-- 3 grossissement des fichiers SQL des bases
-- 4 activité IO des disques (latence)
-- TRANSACTIONS
-- 1 longues transactions (oui, mais quelle durée ??? dépend des applications...)
-- 2 blocages
-- 3 verrous mortels
-- CACHE
-- rémanence des pages en cache
-- taux de mise en cache

12
IT/SQL/SCRIPTS SQL QSA ORSYS/DEMO maintenance DBCC CHECK.sql

@ -0,0 +1,12 @@
DECLARE @SQL NVARCHAR(max) = N'';
SELECT @SQL = @SQL + 'DBCC CHECKDB ([' + name + ']) WITH NO_INFOMSGS;'
FROM sys.databases
WHERE state = 0
AND source_database_id IS NULL
AND name NOT IN ('tempdb', 'model');
EXEC (@SQL);

42
IT/SQL/SCRIPTS SQL QSA ORSYS/DEMO trigger DDL base et serveur.sql

@ -0,0 +1,42 @@
CREATE OR ALTER TRIGGER E_DDL_CREATE_TABLE
ON DATABASE
FOR CREATE_TABLE
AS
BEGIN
DECLARE @XML XML = EVENTDATA();
-- contrôle du nom
IF @XML.value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname') NOT LIKE 'T?_%' ESCAPE('?')
OR @XML.value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname') NOT LIKE '%_[A-Z][A-Z][A-Z]' ESCAPE('?')
BEGIN
ROLLBACK;
THROW 66666, 'Le nom d''une table doit être préfixé par "T_" et suffixé par un trigramme, par exemple "_ABC"', 1;
END;
-- utilisation de types obsolètes
IF EXISTS(SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @XML.value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname')
AND TABLE_SCHEMA = @XML.value('(/EVENT_INSTANCE/SchemaName)[1]', 'sysname')
AND DATA_TYPE IN ('text', 'ntext', 'image', 'datetime', 'smalldatetime'))
BEGIN
ROLLBACK;
THROW 66666, 'les colonnes d''une table ne doivent pas comporter de type de données obsolètes ("text", "ntext", "image", "datetime", "smalldatetime").', 1;
END;
END;
GO
CREATE TRIGGER E_DDL_CREATE_TABLE
ON ALL SERVER
FOR CREATE_DATABASE
AS
BEGIN
DECLARE @XML XML = EVENTDATA();
IF @XML.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'sysname') NOT LIKE 'DB?_%' ESCAPE '?'
BEGIN
ROLLBACK;
THROW 66666, 'Le nom d''une base de données doit être préfixé par "DB_".', 1;
END;
END;
GO

48
IT/SQL/SCRIPTS SQL QSA ORSYS/Demo audit disques.sql

@ -0,0 +1,48 @@
SELECT mf.*, volume_mount_point, 1.0 * total_bytes / POWER(1024, 3) AS DISK_SIZE_GB,
1.0 * available_bytes / POWER(1024, 3) AS FREE_SIZE_GB,
100 * (1 - 1.0 * available_bytes/total_bytes) PERCENT_USED
FROM sys.master_files AS mf
CROSS APPLY sys.dm_os_volume_stats(database_id, file_id);
WITH
disk_activity AS
(SELECT LEFT(mf.physical_name, 2) AS Drive,
SUM(num_of_reads) AS num_of_reads,
SUM(io_stall_read_ms) AS io_stall_read_ms,
SUM(num_of_writes) AS num_of_writes,
SUM(io_stall_write_ms) AS io_stall_write_ms,
SUM(num_of_bytes_read) AS num_of_bytes_read,
SUM(num_of_bytes_written) AS num_of_bytes_written, SUM(io_stall) AS io_stall
FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS vfs
INNER JOIN sys.master_files AS mf WITH (NOLOCK)
ON vfs.database_id = mf.database_id AND vfs.file_id = mf.file_id
GROUP BY LEFT(mf.physical_name, 2))
SELECT (SELECT sqlserver_start_time FROM sys.dm_os_sys_info) AS SINCE,
Drive AS DISK_DRIVE,
CASE
WHEN num_of_reads = 0 THEN 0
ELSE (io_stall_read_ms/num_of_reads)
END AS READ_LATENCY,
CASE
WHEN io_stall_write_ms = 0 THEN 0
ELSE (io_stall_write_ms/num_of_writes)
END AS WRITE_LATENCY,
CASE
WHEN (num_of_reads = 0 AND num_of_writes = 0) THEN 0
ELSE (io_stall/(num_of_reads + num_of_writes))
END AS GLOBAL_LATENCY,
CASE
WHEN num_of_reads = 0 THEN 0
ELSE (num_of_bytes_read/num_of_reads)
END AS AVG_BYTES_PER_READ,
CASE
WHEN io_stall_write_ms = 0 THEN 0
ELSE (num_of_bytes_written/num_of_writes)
END AS AVG_BYTES_PER_WRITE,
CASE
WHEN (num_of_reads = 0 AND num_of_writes = 0) THEN 0
ELSE ((num_of_bytes_read + num_of_bytes_written)/(num_of_reads + num_of_writes))
END AS AVG_BYTES_PER_TRANSFER
FROM disk_activity AS tab
ORDER BY GLOBAL_LATENCY
OPTION (RECOMPILE);

47
IT/SQL/SCRIPTS SQL QSA ORSYS/Demo base snapshot.sql

@ -0,0 +1,47 @@
USE master;
GO
CREATE PROCEDURE dbo.sp__DB_SNAP @DB NVARCHAR(128), @PATH NVARCHAR(256)
AS
IF NOT EXISTS(SELECT *
FROM master.sys.databases
WHERE name = @DB
AND source_database_id IS NULL
AND state_desc = 'ONLINE')
BEGIN
RAISERROR('Le nom de base %s n''existe pas sur ce serveur ou n''est pas en état copiable.', 16, 1, @DB);
RETURN;
END;
IF RIGHT(@PATH, 1) = '\'
SET @PATH = @PATH + '\';
DECLARE @T TABLE (file_exists bit, file_is_dir bit, parent_dir_exists bit);
INSERT INTO @T
EXEC master.sys.xp_fileexist @PATH;
IF NOT EXISTS(SELECT 0
FROM @T
WHERE file_is_dir = 1)
BEGIN
RAISERROR('Le chemin passé en arguement, n''est pas un répertoire valide.' , 16, 1);
RETURN
END
DECLARE @SQL VARCHAR(MAX);
SET @SQL = 'CREATE DATABASE [' + @DB +'_SNAP_'
+ REPLACE(REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(23), CURRENT_TIMESTAMP, 121), '-', ''), ' ', '_'), ':', ''), '.', '_')
+ '] ON '
SELECT @SQL = @SQL + '( NAME = ' + name +', FILENAME = '''
+ @PATH + REVERSE(SUBSTRING(REVERSE(physical_name), 1, CHARINDEX('\', REVERSE(physical_name)) - 1))
+ '''),'
from sys.master_files
WHERE type = 0
AND database_id = DB_ID(@DB)
SET @SQL = SUBSTRING(@SQL, 1, LEN(@SQL) - 1) + ' AS SNAPSHOT OF ['
+ @DB + ']'
EXEC (@SQL)
GO
EXEC sp_MS_marksystemobject 'sp__DB_SNA'

13
IT/SQL/SCRIPTS SQL QSA ORSYS/Demo déclencheur DDL LOGON.sql

@ -0,0 +1,13 @@
CREATE TRIGGER E_LOGON_LIMIT_SA
ON ALL SERVER
FOR LOGON
AS
BEGIN
IF EXISTS(SELECT 1
FROM sys.dm_exec_sessions
WHERE is_user_process = 1
AND ORIGINAL_LOGIN()= 'sa'
AND original_login_name = 'sa'
HAVING COUNT(*) > 1)
ROLLBACK;
END;

42
IT/SQL/SCRIPTS SQL QSA ORSYS/Demo exec session connexion et requêtes LIVE.sql

@ -0,0 +1,42 @@
SELECT *
FROM sys.dm_exec_connections
OUTER APPLY sys.dm_exec_sql_text(most_recent_sql_handle);
SELECT *
FROM sys.dm_exec_sessions AS s
LEFT OUTER JOIN sys.dm_exec_connections AS c
ON s.session_id = c.session_id
CROSS APPLY sys.dm_exec_sql_text(most_recent_sql_handle);
SELECT *
FROM sys.dm_exec_sessions AS s
LEFT OUTER JOIN sys.dm_exec_connections AS c
ON s.session_id = c.session_id
LEFT OUTER JOIN sys.dm_exec_requests AS r
ON s.session_id = r.session_id
OUTER APPLY sys.dm_exec_sql_text(sql_handle)
OUTER APPLY sys.dm_exec_query_plan(plan_handle);
--> bloqueurs et bloqués
SELECT *
FROM sys.dm_exec_sessions AS s
LEFT OUTER JOIN sys.dm_exec_connections AS c
ON s.session_id = c.session_id
LEFT OUTER JOIN sys.dm_exec_requests AS r
ON s.session_id = r.session_id
OUTER APPLY sys.dm_exec_sql_text(sql_handle)
OUTER APPLY sys.dm_exec_query_plan(plan_handle)
WHERE s.session_id IN (SELECT blocking_session_id
FROM sys.dm_exec_requests AS r
WHERE blocking_session_id > 0)
UNION ALL
SELECT *
FROM sys.dm_exec_sessions AS s
LEFT OUTER JOIN sys.dm_exec_connections AS c
ON s.session_id = c.session_id
LEFT OUTER JOIN sys.dm_exec_requests AS r
ON s.session_id = r.session_id
OUTER APPLY sys.dm_exec_sql_text(sql_handle)
OUTER APPLY sys.dm_exec_query_plan(plan_handle)
WHERE blocking_session_id <> 0;

23
IT/SQL/SCRIPTS SQL QSA ORSYS/Demo index a créer.sql

@ -0,0 +1,23 @@
-- diagnotsic des index a créer
--!!!!!!!!!!!!!!!!!!!!!!!!! ATTENTION : ne pas utiliser si moins de 30 jours de fonctionnement CONTINU du SGBDR
SELECT sqlserver_start_time FROM sys.dm_os_sys_info
-- 2 moyens
-- 1) grossier : je prend le top n des index qui me font ganger le MAX
SELECT TOP (SELECT COUNT(*) / 3 FROM [dbo].[sys_dm_db_missing_index_details])
statement, equality_columns, inequality_columns, included_columns
FROM [dbo].[sys_dm_db_missing_index_details] AS mid
JOIN [dbo].[sys_dm_db_missing_index_groups] AS mig ON mid.index_handle = mig.index_handle
JOIN [dbo].[sys_dm_db_missing_index_group_stats] AS mis ON mig.index_group_handle = mis.group_handle
ORDER BY statement, equality_columns, inequality_columns, included_columns
-- 2) analyse des pertinence des index à créer...
SELECT statement, equality_columns, inequality_columns, included_columns
FROM [dbo].[sys_dm_db_missing_index_details] AS mid
ORDER BY statement, COALESCE(equality_columns+ ', ' + inequality_columns, equality_columns, inequality_columns)
CREATE INDEX XYZ ON [Anthadine_prod].[dbo].[C_C_CSTPAT] ([CSTTYP_CODE], [INDI_CODE] [CSTPAT_DATE], [CSTPAT_ESTREF])
INCLUDE ([CSTPAT_CODE], [UTIL_INDI_CODE], [CSTPAT_HEURE], [IDENT], [CSTPAT_TEXTE], [CSTPAT_VALE], [CSTPAT_ESTREF], [TRACE_INS_INDI_CODE], [TRACE_UPD_INDI_CODE], [TRACE_INS_DATE], [TRACE_UPD_DATE], [TRACE_FLAG_DELETE], [EFEV_CODE])

78
IT/SQL/SCRIPTS SQL QSA ORSYS/Demo index en doublon ou inclus.sql

@ -0,0 +1,78 @@
WITH
-- sous requête CTE donnant les index avec leurs colonnes
T0 AS (SELECT ic.object_id, index_id, c.column_id, key_ordinal,
CASE is_descending_key
WHEN '0' THEN 'ASC'
WHEN '1' THEN 'DESC'
END AS sens, c.name AS column_name,
ROW_NUMBER() OVER(PARTITION BY ic.object_id, index_id ORDER BY key_ordinal DESC) AS N,
is_included_column
FROM sys.index_columns AS ic
INNER JOIN sys.columns AS c
ON ic.object_id = c.object_id
AND ic.column_id = c.column_id
WHERE key_ordinal > 0
AND index_id > 0),
-- sous requête CTE récursive composant les clefs des index sous forme algébrique et littérale
T1 AS (SELECT object_id, index_id, column_id, key_ordinal, N,
CASE WHEN is_included_column = 0 THEN CAST(column_name AS VARCHAR(MAX)) + ' ' + sens ELSE '' END AS COMP_LITTERALE,
CASE WHEN is_included_column = 0 THEN CAST(column_id AS VARCHAR(MAX)) + SUBSTRING(sens, 1, 1) ELSE '' END AS COMP_MATH,
MAX(N) OVER(PARTITION BY object_id, index_id) AS CMAX,
CASE WHEN is_included_column = 1 THEN CAST(column_name AS VARCHAR(MAX)) ELSE '' END AS COLONNES_INCLUSES
FROM T0
WHERE key_ordinal = 1
UNION ALL
SELECT T0.object_id, T0.index_id, T0.column_id, T0.key_ordinal, T0.N,
COMP_LITTERALE +
CASE WHEN is_included_column = 0 THEN ', ' + CAST(T0.column_name AS VARCHAR(MAX)) + ' ' + T0.sens ELSE '' END,
COMP_MATH +
CASE WHEN is_included_column = 0 THEN CAST(T0.column_id AS VARCHAR(MAX)) + SUBSTRING(T0.sens, 1, 1) ELSE '' END,
T1.CMAX, COLONNES_INCLUSES + CASE WHEN is_included_column = 1 THEN ', ' + CAST(column_name AS VARCHAR(MAX)) ELSE '' END
FROM T0
INNER JOIN T1
ON T0.object_id = T1.object_id
AND T0.index_id = T1.index_id
AND T0.key_ordinal = T1.key_ordinal + 1),
-- sous requête CTE de dédoublonnage
T2 AS (SELECT object_id, index_id, COMP_LITTERALE, COMP_MATH, CMAX, COLONNES_INCLUSES
FROM T1
WHERE N = 1),
-- sous requête sélectionnant les anomalies
T4 AS (SELECT T2.object_id, T2.index_id,
T3.index_id AS index_id_anomalie,
T2.COMP_LITTERALE AS CLEF_INDEX,
T3.COMP_LITTERALE AS CLEF_INDEX_ANORMAL,
T2.COLONNES_INCLUSES, T3.COLONNES_INCLUSES AS COLONNES_INCLUSES_ANORMAL,
CASE
WHEN T2.COMP_MATH = T3.COMP_MATH
THEN 'DOUBLONS'
WHEN T2.COMP_MATH LIKE T3.COMP_MATH +'%'
THEN 'INCLUS'
END AS ANOMALIE,
ABS(T2.CMAX - T3.CMAX) AS DISTANCE
FROM T2
INNER JOIN T2 AS T3
ON T2.object_id = T3.object_id
AND T2.index_id <> T3.index_id
AND T2.COMP_MATH LIKE T3.COMP_MATH +'%')
-- Requête finale rajoutant les informations manquantes
SELECT T4.*,
s.name +'.' + o.name AS NOM_TABLE,
i1.name AS NOM_INDEX,
i2.name AS NOM_INDEX_ANORMAL
--, i1.filter_definition AS FILTRE_INDEX
--, i2.filter_definition AS FILTRE_INDEX_ANORMAL
FROM T4
INNER JOIN sys.objects AS o
ON T4.object_id = o.object_id
INNER JOIN sys.schemas AS s
ON o.schema_id = s.schema_id
INNER JOIN sys.indexes AS i1
ON T4.object_id = i1.object_id
AND T4.index_id = i1.index_id
INNER JOIN sys.indexes AS i2
ON T4.object_id = i2.object_id
AND T4.index_id_anomalie = i2.index_id
WHERE o."type" IN ('U', 'V')
ORDER BY NOM_TABLE, NOM_INDEX;

27
IT/SQL/SCRIPTS SQL QSA ORSYS/Demo index et stats.sql

@ -0,0 +1,27 @@
-- diagnostic des index fragmentés
SELECT * FROM sys.dm_db_index_physical_stats(NULL, NULL, NULL, NULL, NULL)
WHERE avg_fragmentation_in_percent > 10
AND page_count>64
-- ALTER INDEX .... REORGANIZE --> pas bloquant mais pas top
-- ALTER INDEX .... REBUILD --> bloquant mais top (peut être non bloquant si ed. Enterprise et mode ONLINE)
-- diagnostic des index inutilisés
-- !!!!!!!!!!!!!!!!!!!!!!!!! ATTENTION : ne pas utiliser si moins de 30 jours de fonctionnement CONTINU du SGBDR
SELECT sqlserver_start_time FROM sys.dm_os_sys_info
SELECT *
FROM sys.dm_db_index_usage_stats
WHERE index_id > 1
ORDER BY user_seeks, user_lookups, user_scans, user_updates DESC
-- recalcul des statistiques
SELECT *
FROM sys.stats AS s
CROSS APPLY sys.dm_db_stats_properties(s.object_id, s.stats_id)
WHERE modification_counter > rows / 10
UPDATE STATISTICS .... WITH FULLSCAN

10
IT/SQL/SCRIPTS SQL QSA ORSYS/Demo mise en table du résultat d'un DBCC TABLRESULTS.sql

@ -0,0 +1,10 @@
DECLARE @LOGSPACE TABLE
(DATABASE_NAME sysname,
LOG_SIZE_MB FLOAT,
LOG_USE_PERCENT FLOAT,
STATUS INT);
INSERT INTO @LOGSPACE
EXEC ('DBCC SQLPERF(LOGSPACE);');
SELECT * FROM @LOGSPACE WHERE LOG_USE_PERCENT > 30;

32
IT/SQL/SCRIPTS SQL QSA ORSYS/Demo partitionnement gestion.sql

@ -0,0 +1,32 @@
USE [DB_GRAND_HOTEL];
GO
-- rajouter une partition :
-- 1) créer le stockage
ALTER DATABASE [DB_GRAND_HOTEL]
ADD FILEGROUP FG_PART_2009;
ALTER DATABASE [DB_GRAND_HOTEL]
ADD FILE (NAME = 'F_PART_2009',
FILENAME = 'H:\DATABASE_SQL\SQL2019FBIN2\DATA\HOTEL_PART_2009.ndf',
SIZE = 25,
FILEGROWTH = 10)
TO FILEGROUP FG_PART_2009;
-- 2) modifier le schema de paritionnement
ALTER PARTITION SCHEME PS_DATE_FACTURE
NEXT USED FG_PART_2009;
GO
-- 3) ajouter le "piquet" de partitionnement
ALTER PARTITION FUNCTION PF_DATE_FACTURE()
SPLIT RANGE ('2009-01-01');
-- autres possibilités
-- XXX) réaranger les partitions => ALTER PARTITION FUNCTION ... MERGE
-- XXX) supprimer les données de certainers partitions => TRUNCATE PARTITION

32
IT/SQL/SCRIPTS SQL QSA ORSYS/Demo top 10 des requêtes les plus pourries.sql

@ -0,0 +1,32 @@
-- top 10 des requêtes les plus pourries
SELECT TOP 10
SUBSTRING(text,
(statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(text)
ELSE statement_end_offset
END - statement_start_offset)/2) + 1)
AS QUERY,
*
FROM sys.dm_exec_query_stats
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle);
GO
-- top 10 des procédures les plus pourries
SELECT *
FROM sys.dm_exec_procedure_stats
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle);
-- top 10 des déclencheurs les plus pourries
SELECT *
FROM sys.dm_exec_trigger_stats
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle);
-- top 10 des UDF les plus pourries
SELECT *
FROM sys.dm_exec_function_stats
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle);

262
IT/SQL/SCRIPTS SQL QSA ORSYS/Démo AUDIT DB.sql

@ -0,0 +1,262 @@
/******************************************************************************
* PREPARATION
******************************************************************************/
USE master;
GO
IF EXISTS(SELECT * FROM sys.configurations WHERE name = 'xp_cmdshell' AND value_in_use = 0)
BEGIN
IF EXISTS(SELECT * FROM sys.configurations WHERE name = 'show advanced options' AND value_in_use = 0)
BEGIN
EXEC ('EXEC sp_configure ''show advanced options'', 1');
EXEC ('RECONFIGURE');
END
EXEC ('EXEC sp_configure ''xp_cmdshell'', 1');
EXEC ('RECONFIGURE');
END;
GO
EXEC xp_cmdshell 'MKDIR "C:\!\SQL Server Database AUDIT\"';
EXEC xp_cmdshell 'MKDIR "C:\!\SQL Server BACKUP\"';
IF EXISTS(SELECT * FROM sys.databases WHERE name = 'DB_TEST_AUDIT')
BEGIN
EXEC ('USE DB_TEST_AUDIT;ALTER DATABASE DB_TEST_AUDIT SET SINGLE_USER WITH ROLLBACK IMMEDIATE;')
EXEC ('USE master;DROP DATABASE DB_TEST_AUDIT');
END
GO
IF EXISTS(SELECT * FROM sys.server_principals WHERE name = 'CNX_LECTEUR')
EXEC ('DROP LOGIN CNX_LECTEUR');
GO
IF EXISTS(SELECT * FROM sys.server_principals WHERE name = 'CNX_ECRIVAIN')
EXEC ('DROP LOGIN CNX_ECRIVAIN');
GO
IF EXISTS(SELECT * FROM sys.server_audits WHERE name = 'SVA_FRED')
BEGIN
EXEC ('USE master;ALTER SERVER AUDIT SVA_FRED WITH (STATE = OFF);')
EXEC ('USE master;DROP SERVER AUDIT SVA_FRED');
END
GO
IF EXISTS(SELECT * FROM sys.server_audit_specifications WHERE name = 'SAS_BACKUP_RESTORE_SRV')
BEGIN
EXEC ('USE master;ALTER SERVER AUDIT SPECIFICATION SAS_BACKUP_RESTORE_SRV WITH (STATE = OFF);')
EXEC ('USE master;DROP SERVER AUDIT SPECIFICATION SAS_BACKUP_RESTORE_SRV');
END
GO
IF EXISTS(SELECT * FROM sys.server_triggers WHERE name = 'E_LOGON')
EXEC ('DROP TRIGGER E_LOGON ON ALL SERVER');
GO
EXEC xp_cmdshell 'DEL /Q "C:\!\SQL Server BACKUP\*.*"';
EXEC xp_cmdshell 'DEL /Q "C:\!\SQL Server Database AUDIT\*.*"';
GO
/******************************************************************************
* CRÉATION DE LA BASE DE TEST ET MISE EN PLACE D'OBJETS
******************************************************************************/
USE master;
GO
CREATE DATABASE DB_TEST_AUDIT;
GO
CREATE LOGIN CNX_LECTEUR
WITH PASSWORD = 'Maux 2 p@stAga',
DEFAULT_DATABASE = DB_TEST_AUDIT,
DEFAULT_LANGUAGE = French;
GO
CREATE LOGIN CNX_ECRIVAIN
WITH PASSWORD = 'Maux 2 p@stAga',
DEFAULT_DATABASE = DB_TEST_AUDIT,
DEFAULT_LANGUAGE = French;
GO
USE DB_TEST_AUDIT;
GO
CREATE USER USR_LECTEUR FROM LOGIN CNX_LECTEUR;
GO
CREATE USER USR_ECRIVAIN FROM LOGIN CNX_ECRIVAIN;
GO
CREATE SCHEMA S_BOUQUIN
GO
CREATE TABLE S_BOUQUIN.T_LIVRE_LVR
(LVR_ID INT IDENTITY PRIMARY KEY,
LVR_TITRE VARCHAR(256))
GO
CREATE TABLE dbo.acces
(id INT IDENTITY PRIMARY KEY,
nom sysname DEFAULT USER,
moment DATETIME2(3) DEFAULT GETDATE())
GO
GRANT SELECT ON DATABASE::DB_TEST_AUDIT TO USR_LECTEUR;
GO
GRANT INSERT ON dbo.acces TO USR_LECTEUR;
GO
GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::S_BOUQUIN TO USR_ECRIVAIN;
GO
GRANT INSERT ON dbo.acces TO USR_ECRIVAIN;
GO
CREATE TRIGGER E_LOGON
ON ALL SERVER
FOR LOGON
AS
IF EXISTS(SELECT *
FROM sys.server_principals
WHERE name = USER
AND default_database_name = 'DB_TEST_AUDIT')
INSERT INTO DB_TEST_AUDIT.dbo.acces
DEFAULT VALUES;
GO
/******************************************************************************
* PARTIE AUDIT : mise en place du suivi
******************************************************************************/
USE master;
GO
-- création de l'espace de travail pour les audits
CREATE SERVER AUDIT SVA_FRED
TO FILE ( FILEPATH = 'C:\!\SQL Server Database AUDIT\'
, MAXSIZE = 1 GB
, MAX_ROLLOVER_FILES = 256
, RESERVE_DISK_SPACE = OFF )
WITH ( QUEUE_DELAY = 3000
, ON_FAILURE = SHUTDOWN );
GO
-- suivie d'une action de groupe au niveau serveur :
CREATE SERVER AUDIT SPECIFICATION SAS_BACKUP_RESTORE_SRV
FOR SERVER AUDIT SVA_FRED
ADD (BACKUP_RESTORE_GROUP);
GO
-- concernant les sauvegardes et restaurations de toutes bases
USE DB_TEST_AUDIT;
GO
-- suivie d'une action de groupe au niveau base
CREATE DATABASE AUDIT SPECIFICATION SAS_SUIVI_BASE
FOR SERVER AUDIT SVA_FRED
ADD (DATABASE_OBJECT_CHANGE_GROUP)
GO
-- concernant les modification de structure des objets de la base
-- suivi d'une action particulière au niveau objet, pour toute la base
ALTER DATABASE AUDIT SPECIFICATION SAS_SUIVI_BASE
ADD ( SELECT
ON DATABASE::DB_TEST_AUDIT
BY dbo);
-- concerne le SELECT sur tous les objets de la base DB_TEST_AUDIT
-- suivie de plusieurs action spécifique au niveau objet, pour tout un schema SQL
ALTER DATABASE AUDIT SPECIFICATION SAS_SUIVI_BASE
ADD ( INSERT, UPDATE, DELETE
ON SCHEMA::S_BOUQUIN
BY USR_ECRIVAIN);
-- concerne les mises à jour (INSERT, UPDATE, DELETE) sur tous les objets ddu schéma SQL S_BOUQUIN
-- suivi de l'action INSERT sur la table dbo.acces.
ALTER DATABASE AUDIT SPECIFICATION SAS_SUIVI_BASE
ADD ( INSERT
ON dbo.acces
BY USR_ECRIVAIN, USR_LECTEUR);