mercredi 8 décembre 2010

Bréviaire Oracle

Démarrer Oracle

su - oracle
cd $ORACLE_HOME/bin
./lsnrctl start --> démarrage du TNS
export ORACLE_SID=
sqlplus '/ as sysdba'
startup
quit

Se connecter en tant que sysdba

Se connecter en avec l'utilisateur oracle (utilisateur unix) sur la machine hébergeant l'instance, puis :
sqlplus / as sysdba

sometimes it could be
sqlplus system/monpasswd as sysdba

Sous windows:

sqlplus "/ as sysdba"


Voir les logs

SELECT object_name, session_id , oracle_username , os_user_name, VLO.object_id, PROCESS
FROM v$locked_object VLO INNER JOIN dba_objects DO ON VLO.object_id = DO.object_id;


Unlocker une table
select sid, serial# from v$session where sid in (SELECT session_id FROM v$locked_object);
alter system kill session 'sid, serial';

USER

Lister

select USERNAME, PASSWORD from DBA_USERS order by USERNAME;

Créer

CREATE USER PHARERHCSD IDENTIFIED BY PHARERHCSD
DEFAULT tablespace PHARERHCSD;

GRANT CONNECT,RESOURCE,DBA to PHARERHCSD;

connect PHARERHCSD/PHARERHCSD

Modifier

Changer le password

ALTER USER  IDENTIFIED BY 

ALTER USER  IDENTIFIED BY ;

Lister toutes les tables

Lister toutes les tables de l'utilisateur
select * from user_tables

Lister toutes les tables
select * from all_tables

Tablespace

Lister

select * from USER_TABLESPACES

Créer


create tablespace PHARERHCSD datafile '/data/ora/D59A001/u03/dta_PHARERHCSD.dbf'
size 10M
autoextend on maxsize 200M
extent management local uniform size 64K;

Supprimer


DROP TABLESPACE DTA_ELECTION_ISOPROD_20081216
INCLUDING CONTENTS CASCADE CONSTRAINTS;
DROP TABLESPACE tbs_02 INCLUDING CONTENTS AND DATAFILES;

Libérer de l'espace disque


ALTER DATABASE DATAFILE '/data/ora/D59A001/u03/dta_ELECT_isoprod_20081216.dbf' offline DROP;
conn / as sysdba
shutdown immediate;
startup mount
host
$ cp /u01/oradata/tools01.dbf /u06/oradata/tools01.dbf
$ exit
alter database rename file '/u01/oradata/tools01.dbf' to '/u06/oradata/tools01.dbf';
alter database open
host
$ rm /u01/oradata/tools.01.dbf
$ exit


Si le message est :
ORA-01034: ORACLE not available, cela signifie que l'instance n'est pas démarrée. Et pour démarrer l'instance oracle :
export ORACLE_SID
sqlplus /nolog
connect as sysdba
startup

Pour créer un tablespace


sqlplus system/pwd
CREATE TABLESPACE MYTABLESPACE DATAFILE  '/export/oradata/mynamespace.dbf' size 5M MINIMUM EXTENT 65536 DEFAULT STORAGE (initial 1M next 1M MAXEXTENTS 500 PCTINCREASE 0);

Pour contrôler le listener :

lsnrctl stop
lsnrctl start
lsnrctl services


Voici un exemple de fichier listener.ora

# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER_MYDB =
 (DESCRIPTION_LIST =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = mymachine.mycompany.com)(PORT = 1521))
   )
 )

Voici un exemple de fichier TNSNAMES.ORA

MYDB =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = mymachine.mycompany.com)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = mydb.mycompany.com)
   )
 )

Si le message est no services started il y a une erreur d'écriture dans le fichier listener.ora

Exporter des données, créer des dumps oracle : 

 Dump binaire

Il existe deux manière pour exporter les donnée. La première consiste à faire un dump binaire, le dump binaire peut uniquement s'importer à l'aide de la commande imp.

exp userid=MYUSERFROM@MYSID file=D:\export_full.dump log=d:\export_full.log

Sur oracle 11 préferer la commande

create directory dump_dir as '/home/oracle/dump';
GRANT CREATE ANY DIRECTORY TO myuser;
expdp SILAADD/SILAADD DUMPFILE=my_dump.dmp DIRECTORY=dump_dir SCHEMAS=SILAADD

Dump SQL oracle

En utilisant SQL developer il est également possible de faire des dumps SQL, lesquels peuvent être chargé par SQL*PLUS. Aller dans le menu Outils --> Export de données.


Puis renseigner les options :

Importer des données, insérer des dumps oracles :



imp system/mymdp@mydb file=/local/schemas/mydbdump.dmp FULL=Y ROWS=Y Ignore=Y FROMUSER=MYSRCTABLESPACE TOUSER=MYDSTTABLESPACE

ou


imp system/ouch  ROWS=Y Ignore=Y  file=D:\export_full.dump TOUSER=MYUSERFROM FROMUSER=MYUSERFROM

Sur oracle 11 préférer la commande


create directory import_dir as '/home/oracle/import';
GRANT CREATE ANY DIRECTORY TO silaadd;
impdp MYSCHEMA/MYSCHEMA remap_schema=MYSCHEMA_PROD:MYSCHEMA DUMPFILE=mysqchema_prod_20092013.dmp directory=import_dir log=myschema.log

Créer un user



create user myuser identified by myuser_pwd default tablespace MYTABLESPACE temporary tablespace TEMP;


Affecter les droits à cet utilisateur :



grant connect,resource to mydb;
Grant succeeded.


Vérifier que l'on peut se connecter avec cet utilisateur

connect myuser/mypwd

Affecter à cet utilisateur le namespace par défauts




ALTER USER myuser  QUOTA UNLIMITED ON MYTABLESPACE;



Créer une instance ORACLE

Plusieurs instances peuvent tourner sur un même numéro de port. Le SID permet de faire la distinction. Dans le plupart des cas, il vaut mieux éviter de créer de nouvelles instances.
Il est suffisant de créer un nouvel utilisateur, l'utilisateur est une notion confondue avec celle du schéma.

Copier le fichier
dbca.rsp et l'éditer

dbca -progress_only -responseFile dbca.rsp

L'instance est créee

mercredi 1 décembre 2010

Installer sqlplus de la version XE (client et serveur)

Oracle propose une distribution libre de sa base avec XE(expresse edition).
Téléchargez oracle-xe-client-10.2.0.1-1.0

Puis installez :
rpm -i oracle-xe-client-10.2.0.1-1.0.rpm


Comme il fallait s'y attendre, ORACLE ne faitrien pour nous simplifier la tâche. Car à ce point, rien n'est fait :
Il faut d'abord créer le répertoire de configuration :
mkdirhier /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/network/admin/


Puis
La variable définir la variable TNS_ADMIN pour qu'elle pointe sur le répertoire de configuration :


export TNS_ADMIN=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/network/admin/
export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
export ORACLE_SID=ARCHIVER
export NLS_LANG=`$ORACLE_HOME/bin/nls_lang.sh`
PATH=$ORACLE_HOME/bin:$PATH



Le fichier tnsnames.ora contient les informations suivantes


MYSID =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 66.65.66.66)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ARCHIVER)
)
)

On s'y connecte ensuite par la ligne de commande :


sqlplus MYUSER/MYPWD@MYSID

lundi 29 novembre 2010

Faire du port forwarding à l'aide de SSH


En ligne de commande
 
Avec cette ligne de commande, la connexion sur le port local 10999 est équivalent à une connection sur le port 10389 de la machine distante. Cela permet de contourner les firewall. 

 
ssh -L 10999:targetmachine:10389 factory@targetmachine
 
 
Par putty
On peut faire la même chose par putty. 

Dans les fichier de conf
Pour faire du port forwarding, éditer le fichier .ssh/config et lui donne le contenu suivant
(Ici le port 80 de la machine est forwardée sur la machine 55.6.110.96 sur le port 1521)

Host 127.0.0.1
        LocalForward 80 55.6.110.96:1521
        GatewayPorts yes

Pour que la connexion fonctionne, il est nécessaire que le programme ssh soit actif (C'est à dire qu'il soit démarré et figure dans les process de la machine locale). Il est également possible de procéder à l'opération inverse en se servant de la commande RemotePort

To set a specific user to connect a remot host
Host myhost
        User myuser
        ForwardX11 yes    

Externaliser la configuration de ses webapp

Dans les webapps utilisant spring il est possible d'externaliser sa configuration à l'aide de variables d'environnement pour log4j :

<bean id="log4jConfigurer"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass">
<value>org.springframework.util.Log4jConfigurer</value>
</property>
<property name="targetMethod">
<value>initLogging</value>
</property>
<property name="arguments">
<list>
<value>${MYREP_CONF}/log4j.xml</value>
<!-- or you could use an absolute path: <value>file:D:\\etc\\myapp\\log4j.properties</value> -->
</list>
</property>
</bean>

jeudi 25 novembre 2010

Port forwarding à l'aide de iptable

Ip/Port rewriting


Ces commandes se passent en root

Ip table permet de forwarder des ports d'une machine vers une autre.

Les instructions sont à renouveler à chaque démarrage de la machine




#Réécriture du port d'un paquet
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 1521 -j DNAT --to 55.6.110.96:1521

iptables -A INPUT -p tcp -m state --state NEW --dport 1521 -i eth0 -j ACCEPT
#Sécurité par défaut autorise l'accès à la chaine forward
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/ip_forward

# Pour intercepter les paquets à destination d'une ip différente de celle de l'interface

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE



Pour lister les chaines principales



iptable -L



Pour lister toutes les de nat (ip/port rewriting)



iptables -L -t nat



Pour supprimer les règles



iptables -F -t nat

jeudi 4 novembre 2010

Utiliser apache en frontal et forwarder les ports sur un Jetty

Je veux mettre en place un apache frontal lequel délègue sa requête à un serveur archiva ouvert sur le port 8081. Seul le port 80 est ouvert sur le réseau. Je ne souhaite pas de connecteur complexe, car il ne s'agit pas d'une question de performance.
Pour ce faire, j'ai utilisé le mod_proxy de apache et les virtualHost.

<IfModule mod_proxy.c>
ProxyRequests Off

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

<VirtualHost archiva:80>
ServerAdmin webmaster@dummy-host.example.com
ProxyPass / http://archiva:8081/
ProxyPassReverse / http://archiva:8081/
ErrorLog logs/dummy-host.example.com-error_log
CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>