Créer un utilisateur et se connecter via SQL*Plus
sqlplus / as sysdba
SQL> create user gregory
identified by zdlrskjhgqdzesq5#
default tablespace users
temporary tablespace temp;
SQL> grant create session to gregory;
SQL> create role gregory_role;
SQL> grant select on emp to gregory_role;
SQL> ALTER USER gregory GRANT CONNECT THROUGH scott WITH ROLES gregory_role;
sqlplus scott[gregory]@orcl
Entrez le mot de passe (de scott) : *****
Connecté.
SQL> select user from dual;
USER
------------------------------
GREGORY
Comparaisons des types de connexions
Le programme dont les éléments sont fourni dans la section suivante sur une base 10.2 donne les suivants dans ma configuration :
1000x connexions sans pool (secondes) : 162.093
1000x connexions avec pool (secondes) : 1.192
1000x connexions avec pool et proxy user (secondes) : 5.518
Sections de code Java
Creation d’une DataSource Oracle sans « connection cache » (i.e. sans pool) :
try {
ods = new OracleDataSource();
} catch (SQLException e) {
e.printStackTrace(System.out);
}
ods.setURL("jdbc:oracle:thin:@//leia:1521/orcl");
ods.setUser("scott");
ods.setPassword("tiger");
try {
ods.setConnectionCachingEnabled(false);
} catch (Exception e) {
e.printStackTrace(System.out);
}
Creation d’une DataSource Oracle avec « connection cache » (i.e. avec pool) :
try {
ods_c = new OracleDataSource();
} catch (SQLException e) {
e.printStackTrace(System.out);
}
ods_c.setURL("jdbc:oracle:thin:@//leia:1521/orcl");
ods_c.setUser("scott");
ods_c.setPassword("tiger");
try {
ods_c.setConnectionCachingEnabled(true);
} catch (Exception e) {
e.printStackTrace(System.out);
}
1000 connexions distinctes :
deptime = System.currentTimeMillis();
System.out.print("1000x connexions - sans pool (milliseconds) [");
j=100;
for (int i=0;i<=1000;i++) { j--; if (j==0) { j=100; System.out.print("."); } try { conn = (OracleConnection) ods.getConnection(); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select user from dual"); while (rset.next()) { //System.out.println("L'utilisateur connecté est : "+rset.getString("USER")); } conn.close(); } catch (SQLException e) { e.printStackTrace(System.out); } } System.out.println("] : "+Long.toString((System.currentTimeMillis()-deptime)));
1000 connexions via un pool de connexions :
deptime = System.currentTimeMillis();
System.out.print("1000x connexions - avec pool (milliseconds) [");
j=100;
for (int i=0;i<=1000;i++) { j--; if (j==0) { j=100; System.out.print("."); } try { conn = (OracleConnection) ods_c.getConnection(); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select user from dual"); while (rset.next()) { //System.out.println("L'utilisateur connecté est : "+rset.getString("USER")); } conn.close(); } catch (SQLException e) { e.printStackTrace(System.out); } } System.out.println("] : "+Long.toString((System.currentTimeMillis()-deptime)));
1000 connexions via un pool de connexions avec authentification via un proxy user:
deptime = System.currentTimeMillis();
System.out.print("1000x connexions - avec pool et proxyuser (milliseconds) [");
j=100;
Properties p = new Properties();
p.put("PROXY_USER_NAME", "gregory");
for (int i=0;i<=1000;i++) { j--; if (j==0) { j=100; System.out.print("."); } try { conn = (OracleConnection) ods_c.getConnection(); conn.openProxySession(OracleConnection.PROXYTYPE_USER_NAME, p); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select user from dual"); while (rset.next()) { //System.out.println("L'utilisateur connecté est : "+rset.getString("USER")); } conn.close(OracleConnection.PROXY_SESSION); conn.close(); } catch (SQLException e) { e.printStackTrace(System.out); } } System.out.println("] : "+Long.toString((System.currentTimeMillis()-deptime)));