Index: django/conf/global_settings.py
===================================================================
--- django/conf/global_settings.py	(revision 8066)
+++ django/conf/global_settings.py	(working copy)
@@ -129,6 +129,13 @@
 DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.
 DATABASE_OPTIONS = {}          # Set to empty dictionary for default.
 
+#Database session pool settings. At this monent only oracle backend use.
+DATABASE_SESSION_POOL=False    
+DATABASE_SESSION_POOL_MIN=1
+DATABASE_SESSION_POOL_MAX=3
+DATABASE_SESSION_POOL_INCREMENT=1
+
+
 # Host for sending e-mail.
 EMAIL_HOST = 'localhost'
 
Index: django/db/backends/oracle/base.py
===================================================================
--- django/db/backends/oracle/base.py	(revision 8066)
+++ django/db/backends/oracle/base.py	(working copy)
@@ -198,21 +198,47 @@
         'iendswith': "LIKEC UPPER(%s) ESCAPE '\\'",
     }
     oracle_version = None
+    
+    def _get_pool (self):
+        if not hasattr (self.__class__, '_pool'):
+            from django.conf import settings
+            Database.OPT_Threading = 1
+            if len(settings.DATABASE_HOST.strip()) == 0:
+                settings.DATABASE_HOST = 'localhost'
+            if len(settings.DATABASE_PORT.strip()) != 0:
+                dsn = Database.makedsn(settings.DATABASE_HOST, int(settings.DATABASE_PORT), settings.DATABASE_NAME)
+                p = Database.SessionPool(settings.DATABASE_USER, settings.DATABASE_PASSWORD, dsn, settings.DATABASE_SESSION_POOL_MIN, settings.DATABASE_SESSION_POOL_MAX, settings.DATABASE_SESSION_POOL_INCREMENT, threaded = True)
+            else:
+                p = Database.SessionPool(settings.DATABASE_USER, settings.DATABASE_PASSWORD, settings.DATABASE_NAME, settings.DATABASE_SESSION_POOL_MIN, settings.DATABASE_SESSION_POOL_MAX, settings.DATABASE_SESSION_POOL_INCREMENT, threaded = True)
+            setattr(self.__class__, '_pool', p)
 
+        return getattr(self.__class__, '_pool')
+        
+        
+    pool = property (_get_pool)
+
     def _valid_connection(self):
         return self.connection is not None
 
+	
     def _cursor(self, settings):
         cursor = None
-        if not self._valid_connection():
-            if len(settings.DATABASE_HOST.strip()) == 0:
-                settings.DATABASE_HOST = 'localhost'
-            if len(settings.DATABASE_PORT.strip()) != 0:
-                dsn = Database.makedsn(settings.DATABASE_HOST, int(settings.DATABASE_PORT), settings.DATABASE_NAME)
-                self.connection = Database.connect(settings.DATABASE_USER, settings.DATABASE_PASSWORD, dsn, **self.options)
-            else:
-                conn_string = "%s/%s@%s" % (settings.DATABASE_USER, settings.DATABASE_PASSWORD, settings.DATABASE_NAME)
-                self.connection = Database.connect(conn_string, **self.options)
+	if settings.DATABASE_SESSION_POOL:
+    	    if self.pool is not None:
+        	if self.connection is None:
+            	    self.connection = self.pool.acquire()
+	else:
+            if not self._valid_connection():
+        	if len(settings.DATABASE_HOST.strip()) == 0:
+            	    settings.DATABASE_HOST = 'localhost'
+        	if len(settings.DATABASE_PORT.strip()) != 0:
+            	    dsn = Database.makedsn(settings.DATABASE_HOST, int(settings.DATABASE_PORT), settings.DATABASE_NAME)
+            	    self.connection = Database.connect(settings.DATABASE_USER, settings.DATABASE_PASSWORD, dsn, **self.options)
+        	else:
+            	    conn_string = "%s/%s@%s" % (settings.DATABASE_USER, settings.DATABASE_PASSWORD, settings.DATABASE_NAME)
+            	    self.connection = Database.connect(conn_string, **self.options)
+
+        	
             cursor = FormatStylePlaceholderCursor(self.connection)
             # Set oracle date to ansi date format.  This only needs to execute
             # once when we create a new connection.
@@ -236,12 +262,26 @@
                 # Django docs specify cx_Oracle version 4.3.1 or higher, but
                 # stmtcachesize is available only in 4.3.2 and up.
                 pass
+        
         if not cursor:
             cursor = FormatStylePlaceholderCursor(self.connection)
         # Default arraysize of 1 is highly sub-optimal.
         cursor.arraysize = 100
         return cursor
 
+    def close(self):
+	from django.conf import settings
+	if settings.DATABASE_SESSION_POOL:
+    	    if self.connection is not None:
+        	self.pool.release(self.connection)
+        	self.connection = None
+	else:
+    	    if self.connection is not None:
+        	self.connection.close()
+        	self.connection = None
+
+
+
 class FormatStylePlaceholderCursor(Database.Cursor):
     """
     Django uses "format" (e.g. '%s') style placeholders, but Oracle uses ":var"
