Archives mensuelles : décembre 2018

[Oracle] : comment lister les tables lockées et les dévérouiller ?

Un article oracle, cela faisait longtemps il me semble. Lorsqu’un moteur de base de donnée travaille, il est parfois nécessaire pour lui de vérouiller (locker) certains éléments notamment des tables.

Vous pouvez retrouver d’autres articles de ce type sur la page databases.

L’inconvénient c’est que suivant les cas vous ne pouvez plus y accéder. Attention, généralement un lock a toujours une bonne raison d’être posé (sauvegarde en cours, modifications, plantage, processus en attente…). Bien que chaque moteur est conçu pour limiter au maximum ces verrous cela arrive encore (les verrous se trouvent maintenant plus au niveau des lignes que sur des tables entières et le mvcc intervient également). Mais des moteurs comme mysql myisam ne savent pas fonctionner autrement (au profit d’autres intérêts : performance notamment).

Bref, pour oracle, et pour d’autres moteurs avant d’intervenir vous devez identifier pourquoi les tables sont lockées (parfois cela vient de connexions qui bouclent, de sauvegardes en cours qui buggent…). Bref comment lister les tables en question ?

A l’aide d’une requête sur la vue oracle v$locked :

> sqlplus '/ as sysdba'
> select
obj.owner, obj.object_name, obj.object_type,
sess.sid, sess.serial#, sess.status, sess.osuser, sess.machine
from
v$locked_object lock, v$session sess, dba_objects obj
where
sess.sid = lock.session_id and lock.object_id = obj.object_id;

Vous voyez aussi l’intérêt d’appeler aussi la table dba_objects et la vues v$session car vous pouvez plus facilement identifier la session et le user à l’origine du lock. Remarquez aussi que des locks peuvent être posés sur d’autres objets que des tables.

Mais que faire ensuite ? déverrouiller pardi lol !

Et là c’est simple.

> sqlplus '/ as sysdba'> alter table nom_de_table disable table lock;

Voilà je pense que nous avez fait le tour sur cette petite manip que l’on peut demander à un dba oracle.

[Linux] comment activer son wifi en ligne de commande ?

Fichu WIFI, parfois il s’active bien, d’autres fois je me galère pour le lancer. Du coup, je me préfère le gérer en ligne de commande. A terme cela peut permettre d’aboutir à un script si vraiment j’en ai raz le bol.

Vérifiez les paramètres de votre interface wiki

Pour cela on utilise le binaire « iw »

└─ $ ▶ /sbin/iw dev
phy#0
Interface wlp3s0
ifindex 3
wdev 0x1
addr xx:xx:xx:xx:xx:xx
type managed

Ainsi vous pouvez retenir le nom de votre interface.

Vérifiez si l’interface wifi est UP

On utilise le binaire « ip » comme ceci

└─ $ ▶ ip link show wlan0
Device "wlan0" does not exist.

Et là confirmation, je n’ai pas de wifi.

Montez votre interface

Toujours avec IP on tente de monter la carte.

└─ $ ▶ sudo ip link set wlp3s0 up 
RTNETLINK answers: Operation not possible due to RF-kill

Mais là on a un message d’erreur. On ne peut pas remonter la carte car il y a un verrou. Donc on va le lever.

└─ $ ▶ rfkill list all
0: tpacpi_bluetooth_sw: Bluetooth
Soft blocked: yes
Hard blocked: no
1: tpacpi_wwan_sw: Wireless WAN
Soft blocked: no
Hard blocked: no
2: phy0: Wireless LAN
Soft blocked: yes
Hard blocked: no

Bon pour simplifier on va tous les délockés.

sudo rfkill unblock all

et ensuite on retente de monter notre wlp3s0

└─ $ ▶ sudo ip link set wlp3s0 up
└─ $ ▶ ip link show wlp3s0
3: wlp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

et là pas de souci.

Vérification et connexion

Maintenant vérifions si nous avons du wifi de connecter dessus.

└─ $ ▶ sudo /sbin/iw wlp3s0 link
Not connected.

Donc rien pour l’instant. Alors on lance un scan des réseaux wifi à disposition.

└─ $ ▶ sudo /sbin/iw wlp3s0 scan
BSS xx:xx:xx:xx:xx:xx (on wlp3s0)
	TSF: 4058009 usec (0d, 00:00:04)
	freq: 2462
	beacon interval: 100 TUs
	capability: ESS Privacy SpectrumMgmt ShortSlotTime RadioMeasure (0x1511)
	signal: -6.00 dBm
	last seen: 88 ms ago
	Information elements from Probe Response frame:
	SSID: iPhone
	Supported rates: 1.0* 2.0* 5.5* 11.0* 18.0 24.0 36.0 54.0 
	DS Parameter set: channel 11
	Country: FR	Environment: Indoor/Outdoor
		Channels [1 - 13] @ 20 dBm
	Power constraint: 0 dB
	TPC report: TX power: 15 dBm
	ERP: <no flags>
	Extended supported rates: 6.0 9.0 12.0 48.0 
	RSN:	 * Version: 1
		 * Group cipher: CCMP
		 * Pairwise ciphers: CCMP
		 * Authentication suites: PSK
		 * Capabilities: 16-PTKSA-RC 1-GTKSA-RC (0x000c)

Puis connexion au wpa/wpa2

sudo wpa_supplicant -B -D wext -i wlp3s0 -D nl80211 -c /etc/wpa_supplicant.conf

/sbin/iw wlp3s0 link
Connected to xx:xx:xx:xx:xx:xx

Utiliser DHCP pour obtenir une adresse IP

sudo dhclient wlp3s0

Et voilà, vous n’avez plus qu’à faire quelques ping pour tester.

 

[Bash] : le bloc note de Wget

Un article pour retenir l’essentiel dans la commande wget. C’est une commande que l’on utilise souvent mais trop rarement on s’y intéresse en détails.

Quelques essentiels :

  • Télécharger simplement un fichier
wget http://google.fr
  • Pour savoir où vous en êtes en cas de crash lors du téléchargement
wget -c http://google.fr
  • Télécharger en arrière plan
wget -b http://google.fr
  • Limiter la vitesse de téléchargement
wget --limit-rate=200k http://google.fr
  • Télécharger à partir d’un fichier contenant une liste d’url
wget -i liste.txt
  • Aspirer la totalité d’un site
wget --mirror -p --convert-links -P ./madestination/ https://xavki.blog
  • Aspirer un ftp avec user/password
wget --ftp-user=user --ftp-password=motdepasse ftp://url

[MySql] : sauvegarder les bases une à une individuellement

Sauvegarder ses bases de données est essentiel en cas de crash mais aussi pour être en mesure de fournir à tout moment un dump. N’oubliez pas que vous pouvez retrouver les autres articles databases sur cette page.

Par contre il existe de nombreuses manière de faire. Mysql fait cela très bien et très facilement. Mais parfois on a des besoins particuliers.

Par exemple, comme les restaurations portent souvent sur une seule base, on ne souhaite pas disposer d’un dump complet. D’ailleurs cela peut aussi éviter de se trimbaler des fichiers trop gros ou encore de gérer la confidentialité de données entre clients.

Comment sauvegarder les bases mysql une à une c’est à dire en ayant un fichier par base ?

C’est assez simple avec une petite boucle :

for db in $(mysql -e 'show databases' -s --skip-column-names); do mysqldump $db | gzip > "/backups/mysqldump-$(hostname)-$db-$(date +%Y-%m-%d-%H.%M.%S).gz"; done

Donc :

  • on dresse la liste des bases avec un show databases
  • on parcourt tout cela avec un for
  • pour chaque base on lance un mysqldump
  • puis on gzippe chaque fichier généré