Database

Oracle

Oracle

Acces base oracle

Sudo su - oracle 
Setup l'affichage et voir les session connecte à la basse :

SET pages 400 lines 200
COLUMN spid FORMAT A10
COLUMN username FORMAT A20
COLUMN program FORMAT A45
SELECT s.inst_id,
       s.sid,
       s.serial#,
       p.spid,
       s.username,
       s.program
FROM   gv$session s
       JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE  s.type != 'BACKGROUND';

Générer le path et sid

export PATH=$PATH:/app/oracle/product/11.2.0.4/dbhome_1/bin/
export ORACLE_SID=Nom database
export ORACLE_HOME=/app/oracle/product/11.2.0.4/dbhome_1/

. oraenv mettre le sid et path en rapport 

sqlplus / as sysdba
drop user TABLE cascade;

Oracle

Vérifier et débloquer un compte verrouillé

- Se connecter au serveur en SSH via putty ou winscp (> putty).
- Se connecter en tant que compte oracle
su oracle

- Ajouter les arguments pour les variables d'environnement pour se connecter à l'instance

export ORACLE_HOME=/u01/app/oracle/product/11gr2/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=gcldev


- Se connecter à l'instance SQL:
sqlplus /nolog
connect / as sysdba

- Lister tous les comptes de l'instance SQL :
SELECT username, account_status FROM dba_users;
- Lister tous les comptes avec leurs dates de création, date d'expiration et l'état de verrouillage :

SELECT username, account_status, created, lock_date, expiry_date  FROM dba_users  WHERE account_status != 'OPEN';


- Requête pour débloquer un compte (nomducompte à remplacer) :
ALTER USER nomducompte ACCOUNT UNLOCK;


- Note en plus pour reset un password :
ALTER USER nomducompte BY new_password; 

Oracle

Problème demarrage timezone

ps -ef | grep pmon

image.png

Pour redémarrer les bases manuellement :

export ORACLE_HOME=/app/oracle/product/10.2.0.5SE/dbhome_1
export ORACLE_BASE=/app/oracle/product/10.2.0.5SE/dbhome_1
export ORACLE_SID=PIMS1
sqlplus / as sysdba

Démarrer la base

startup


Pour arrêter la base:

shutdown immediate


============================================================================

Lorsque l'on exécute la commande (sqlplus / as sysdba) surtout sur la base l'on obtient le message d'erreur suivant :

ORA-01804: failure to initialize timezone information

Solution :

Prendre un autre fichier timezone sur n'importe quel répertoire :

export ORA_TZFILE=/app/oracle/product/11.2.0.4/dbhome_1/oracore/zoneinfo/timezlrg_14.dat

============================================================================

Pour supprimer les logs de listener de plus de Xjour (exemple +24)

cd /app/oracle/diag/tnslsnr/prdoran1/listener/alert
find . -name "log_*.xml" -ctime +24 -exec rm -f  {} \;

Pour lister les traces +15 j :

 find . -name "*.trc" -ctime +15 -exec ls -l  {} \;

Avant de remplacer "ls -l" par "rm -f" assure toi que la base est démarrée depuis plus de 15 j
============================================================================
Il existe des bases selon la version d'oracle, pour les lister :

cd /app/oracle/product/

Ensuite la version ex :

cd /app/oracle/product/11.2.0.4/dbhome_1/dbs/

Ce qui nous intéresse c'est le init* pour savoir le nom de la base (ex: la base initNODHOS1.ora ça représente la base NODHOS1 donc pour l'utiliser on doit lancer l'export :  

export ORACLE_HOME=/app/oracle/product/11.2.0.4/dbhome_1


ensuite :

export ORACLE_SID=NODHOS1

image.png

Après on va pouvoir lancer sqlplus en tant que NODHOS1 et démarrer la base

MYSQL

MYSQL

PB SQL FAILOVER

image.png

image.png

image.png

Clic droit --> Failover…

image.png

Next

image.png

Next

image.png

Finish

image.png

image.png

image.png

Vérifier que le 1 est bien passé en Primary ainsi que le 2 en Secondary

image.png

MYSQL

Commandes General

 

Poids base de doonnées

SELECT sum( data_length + index_length) / 1024 / 1024 "Nom-de-la-base Taille en Mo" FROM information_schema.TABLES WHERE table_schema = "nom-de-base" GROUP BY table_schema;

Read permission

GRANTSELECTON DBNAME.TABLE_NAME TO USERNAME 

liste toutes les BDD

show databases;

se met sur la BDD qui nous intéresse 

Use nomdelabdd; 

Suppression de la BDD

Drop database nomdelabdd;

Création de la BDD 

Create database nomdelabdd;

Dans le cas où le compte mysqldump n'a pas les droits de restauration de dump

grant all privileges on *.* to mysqldump@localhost;

Restauration du dump dans la BDD

mysql -u mysqldump -p "nomdelabdd" < "/production/mysql_dump/nomdelabdd.sql"

Vérification de la bonne restauration du dump

ls -alsh /production/mysql/nomdelabdd/ 

Pour se connecter

mysql

Pour avoir la taille de toutes les BDD:

SELECT table_schema AS "Database",  ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)"  FROM information_schema.TABLES  GROUP BY table_schema;

Pour avoir la taille de toutes les tables d'une BDD:

SELECT table_name AS "Table", ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)" FROM information_schema.TABLES WHERE table_schema = "database_name" ORDER BY (data_length + index_length) DESC;

Reset Mot de passe Mysql:

ALTER USER 'mysqldump'@'localhost' IDENTIFIED BY 'dump';
MYSQL

Dump/Restore

Création de dump Mysql: 

/usr/bin/mysqldump -u mysqldump -p name | gzip -c --best > /production/mysql_dump/Save_25.sql.gz

Dezip d'un dump au format sql.gz :   

gunzip /production/mysql_dump/Save_25.sql.gz /tmp

Attention cela remplace le fichier d'origine en .sql

Affichage de tous les droits sur une BDD: 

Use name;
SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user;

Restauration d'un dump Mysql avec le dump au format .sql :


show databases;     --> liste toutes les BDD
Use nomdelabdd;    --> On se met sur la BDD qui nous intéresse 
Drop database nomdelabdd;    --> Suppression de la BDD actuelle
Create database nomdelabdd;    --> Création de la BDD 
grant all privileges on *.* to mysqldump@localhost;    --> Dans le cas où le compte mysqldump n'a pas les droits de restauration de dump
mysql -u mysqldump -p nomdelabdd < /production/mysql_dump/nomdelabdd.sql     --> Restauration du dump dans la BDD nouvellement créée
ls -alsh /production/mysql/nomdelabdd/    --> Vérification de la bonne restauration du dump, voir s'il y a des éléments récents

Pour info, utiliser la commande pv lors de la restauration d'un dump afin de voir en live ce que fait la restauration:

MYSQL

Mysql innodb cache info

Vérifier taille Buffer Pool Size:

mysql
SELECT FORMAT (BufferPoolPages*PageSize/POWER(1024,3),2) BufferPoolDataGB FROM (SELECT variable_value BufferPoolPages FROM information_schema.global_status WHERE variable_name ='Innodb_buffer_pool_pages_total') A, (SELECT variable_value PageSize FROM information_schema.global_status WHERE variable_name ='Innodb_page_size') B;

image.png

Vérifier données en cache:

Mysql

 

SELECT FORMAT (BufferPoolPages*PageSize/POWER(1024,3),2) BufferPoolDataGB FROM (SELECT variable_value BufferPoolPages FROM information_schema.global_status WHERE variable_name ='Innodb_buffer_pool_pages_data') A, (SELECT variable_value PageSize FROM information_schema.global_status WHERE variable_name ='Innodb_page_size') B;

image.png

Vérifier % d'utilisation en cache:

 

SELECT CONCAT (FORMAT (DataPages*100.0/TotalPages,2),' %') BufferPoolDataPercentage FROM (SELECT variable_value DataPages FROM information_schema.global_status WHERE variable_name ='Innodb_buffer_pool_pages_data') A, (SELECT variable_value TotalPages FROM information_schema.global_status WHERE variable_name ='Innodb_buffer_pool_pages_total') B;

image.png


Données supplémentaires sur le cache:

SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool%';

image.png

Statut Innodb:

SHOW ENGINE INNODB STATUS;

Buffer hit ratio:

SELECT round ((P2.variable_value /P1.variable_value),4),  P2.variable_value, P1.variable_value FROM information_schema.GLOBAL_STATUS P1, information_schema.GLOBAL_STATUS P2 WHERE P1. variable_name ='innodb_buffer_pool_read_requests'ANDP2. variable_name ='innodb_buffer_pool_reads'; 

image.png

MYSQL

Modification du compte mysql_monitor

mysql
SHOW DATABASES;
select user, host from mysql.users;
UPDATE user SET password=PASSWORD('PASSWORD') WHERE user='mysql_monitor';

si la commande ci-dessous ne fonctionne pas

ALTER USER 'mysql_monitor' IDENTIFIED BY '************';
FLUSH PRIVILEGES;

POSTGRES

POSTGRES

TimescaleDB Update

image.png

Ajouter le proxy avec la commande export

Yum update

image.png


Installation à la mano:
yum update timescaledb-2-postgresql-12
systemctl restart postgresql-12
timescaledb-tune --pg-config=/usr/pgsql-12/bin/pg_config

image.png

sudo -u "user" -i psql
\c database
\dx
ALTER EXTENSION timescaledb UPDATE;

image.png\q


Infos supplémentaire:
Je vois bien la dernière version de timescaledb dans pg_available_extensions, mais la version installée sur la BDD reste toujours la 2.8.1.

image.png

image.png

Il faudrait donc mettre à jour la version de timescaledb sur la BDD MASS.
Exemple :
- ALTER EXTENSION timescaledb  UPDATE TO '2.11.2';
https://www.postgresql.org/docs/12/sql-alterextension.html
- Ou si ça ne fonctionne pas, désinstaller puis réinstaller : 
DROP EXTENSION timescaledb CASCADE; 
CREATE EXTENSION IF NOT EXISTS timescaledb;
POSTGRES

Création user en lecture seul

 

sudo -u postgres -i

 

CREATE USER servicenav LOGIN PASSWORD 'Password';
GRANT CONNECT ON DATABASE contact TO servicenav;
GRANT CONNECT ON DATABASE side TO servicenav;
GRANT CONNECT ON DATABASE vac TO servicenav;

 

GRANT USAGE ON SCHEMA public TO servicenav;
GRANT SELECT ON ALL TABLES IN schema public TO servicenav;
POSTGRES

Modification du compte Monitor

sudo -u postgres -i
cd /production/pgsql/data/

Modification :

vim /production/pgsql/data/pg_hba.conf

#host    all         monitor     10.0.0.0/8            password
host    all         monitor     10.1.1.85/32            password

Modification mot de passe compte postgresql monitor :

psql test

test=# \du
                                     List of roles
  Role name   |                         Attributes                         | Member of 
--------------+------------------------------------------------------------+-----------
 test               |                                                                  | {}
 monitor        | Superuser                                                 | {}
 postgres       | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 postgresdump | Superuser                                               | {}


ALTER USER monitor WITH PASSWORD 'password';

systemctl reload postgresql-12
Nb : pour avoir le nom exact du service : systemctl --type=service | grep postgre

POSTGRES

Vacuum


sudo -u postgres -i psql

postgres=# \c "nom_de_la_bdd"

nom_de_la_bdd=#  VACUUM VERBOSE ANALYZE;

nom_de_la_bdd=# \q
POSTGRES

Splitbrain

Reconstruction du cluster Postgresql sous Centos

Premièrement sauvegarder la VM via un quick backup du côté du serveur VEEAM ou autre
Deuxièmement : vérifier qu'il n'existe pas de job de dump sql sur les serveurs membres du cluster

UNIQUEMENT QUAND CECI EST FAIT désactiver le service PostgreSQL sur le Node qui sera le slave/standby

Service postgres12 stop

Dans le cas où il risque d'y avoir des cron de sauvegarde ou autre désactiver aussi le service crond

Service crond stop

Puis, toujours sur le node standby lancez cette commande en se positionnant sur un dossier qui est "possédé" par le user qui a accès à la/aux base/s ici c'est postgres et on effectue à partir du dossier /production/pgsql 

/usr/pgsql-12/bin/repmgr -h POSTGRESQL1.repli -U repmgr -d repmgr standby clone -F

 Ici POSTGRESQL1 est le node master
Afin de forcer la synchronisation des données entre le nœud master et standby

image.png


Astuce : utilisez watch -n1 df -h côté nœud standby pour regarder l'évolution du remplissage du disque et pour vérifier qu'entre le nœud principal et secondaire une même quantité de données est utilisée.

Une fois cette opération qui peut prendre du temp est terminée
Relancer le service postgresql

Service postgresql12 start

Vérifier son état

Service postgresql12 status

Maintenant lancer cette commande sur le nœud qui est censé être le standby

repmgr standby register --force

image.png

Ensuite vérifier que les rôles sont de nouveau assignés normalement

repmgr cluster show --verbose

image.png

Astuce si vous avez dût fermer le service Cron pensez à le redémarrer

Service crond start

Vérifier

Service crond status 



Et regarder si des jobs qui devaient se lancer n'ont pas été rater et dans le cas où si c'est le cas demander au client si vous pouvez les lancer ou bien vous le signaler au client pour qu'il fasse ses vérifications lui-même

POSTGRES

Commande Postgresql

SQLPLUS

Notes Général

POUR SQLITE 3

Les commandes deletes s'executent sans * comme dans l'exemple suivant :
DELETE from users WHERE id IN (3, 9);