diff --git a/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/AbstractDerbyMessageStore.java b/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/AbstractDerbyMessageStore.java
index d5a4de6..17b031c 100644
--- a/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/AbstractDerbyMessageStore.java
+++ b/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/AbstractDerbyMessageStore.java
@@ -126,6 +126,12 @@
     }
 
     @Override
+    protected String getSqlBlobStorage(String columnName)
+    {
+        return "";
+    }
+
+    @Override
     protected String getSqlVarBinaryType(int size)
     {
         return "varchar("+size+") for bit data";
diff --git a/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyConfigurationStore.java b/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyConfigurationStore.java
index 222306a..856ee2a 100644
--- a/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyConfigurationStore.java
+++ b/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyConfigurationStore.java
@@ -130,6 +130,12 @@
     }
 
     @Override
+    protected String getSqlBlobStorage(String columnName)
+    {
+        return "";
+    }
+
+    @Override
     protected String getSqlVarBinaryType(int size)
     {
         return "varchar("+size+") for bit data";
diff --git a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCConfigurationStore.java b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCConfigurationStore.java
index 1b57755..93b94e1 100644
--- a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCConfigurationStore.java
+++ b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCConfigurationStore.java
@@ -588,6 +588,8 @@
 
     protected abstract String getSqlBlobType();
 
+    protected abstract String getSqlBlobStorage(String columnName);
+
     protected abstract String getSqlVarBinaryType(int size);
 
     protected abstract String getSqlBigIntType();
diff --git a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java
index 171a2f9..d7a391b 100644
--- a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java
+++ b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java
@@ -252,6 +252,8 @@
 
     protected abstract String getSqlBlobType();
 
+    protected abstract String getSqlBlobStorage(String columnName);
+
     protected abstract String getSqlVarBinaryType(int size);
 
     protected abstract String getSqlBigIntType();
@@ -317,7 +319,8 @@
                              + getSqlBigIntType()
                              + " not null, meta_data "
                              + getSqlBlobType()
-                             + ", PRIMARY KEY ( message_id ) )");
+                             + ", PRIMARY KEY ( message_id ) ) "
+                             + getSqlBlobStorage("meta_data"));
             }
         }
 
@@ -335,7 +338,8 @@
                              + getSqlBigIntType()
                              + " not null, content "
                              + getSqlBlobType()
-                             + ", PRIMARY KEY (message_id) )");
+                             + ", PRIMARY KEY (message_id) ) "
+                             + getSqlBlobStorage("content"));
             }
         }
 
diff --git a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java
index e2a67be..1b86631 100644
--- a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java
+++ b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java
@@ -56,6 +56,7 @@
     private ConnectionProvider _connectionProvider;
 
     private String _blobType;
+    private String _blobStorage;
     private String _varBinaryType;
     private String _bigIntType;
     private boolean _useBytesMethodsForBlob;
@@ -95,6 +96,7 @@
 
         _connectionProvider = JdbcUtils.createConnectionProvider(parent, LOGGER);
         _blobType = details.getBlobType();
+        _blobStorage = details.getBlobStorage();
         _varBinaryType = details.getVarBinaryType();
         _useBytesMethodsForBlob = details.isUseBytesMethodsForBlob();
         _bigIntType = details.getBigintType();
@@ -166,6 +168,12 @@
     }
 
     @Override
+    protected String getSqlBlobStorage(String columnName)
+    {
+        return String.format(_blobStorage, columnName);
+    }
+
+    @Override
     protected String getSqlVarBinaryType(int size)
     {
         return String.format(_varBinaryType, size);
@@ -298,6 +306,12 @@
         }
 
         @Override
+        protected String getSqlBlobStorage(String columnName)
+        {
+            return GenericJDBCConfigurationStore.this.getSqlBlobStorage(columnName);
+        }
+
+        @Override
         protected String getSqlVarBinaryType(int size)
         {
             return GenericJDBCConfigurationStore.this.getSqlVarBinaryType(size);
diff --git a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCMessageStore.java b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCMessageStore.java
index 9b13da3..694ae5b 100644
--- a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCMessageStore.java
+++ b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCMessageStore.java
@@ -49,6 +49,7 @@
     private ConnectionProvider _connectionProvider;
 
     private String _blobType;
+    private String _blobStorage;
     private String _varBinaryType;
     private String _bigIntType;
     private boolean _useBytesMethodsForBlob;
@@ -73,6 +74,7 @@
         }
 
         _blobType = details.getBlobType();
+        _blobStorage = details.getBlobStorage();
         _varBinaryType = details.getVarBinaryType();
         _useBytesMethodsForBlob = details.isUseBytesMethodsForBlob();
         _bigIntType = details.getBigintType();
@@ -119,6 +121,12 @@
     }
 
     @Override
+    protected String getSqlBlobStorage(String columnName)
+    {
+        return String.format(_blobStorage, columnName);
+    }
+
+    @Override
     protected String getSqlVarBinaryType(int size)
     {
         return String.format(_varBinaryType, size);
diff --git a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCDetails.java b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCDetails.java
index b97269f..31c9dd0 100644
--- a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCDetails.java
+++ b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCDetails.java
@@ -34,6 +34,7 @@
     public static final String CONTEXT_JDBCSTORE_BIGINTTYPE = "qpid.jdbcstore.bigIntType";
     public static final String CONTEXT_JDBCSTORE_VARBINARYTYPE = "qpid.jdbcstore.varBinaryType";
     public static final String CONTEXT_JDBCSTORE_BLOBTYPE = "qpid.jdbcstore.blobType";
+    public static final String CONTEXT_JDBCSTORE_BLOBSTORAGE = "qpid.jdbcstore.blobStorage";
     public static final String CONTEXT_JDBCSTORE_TIMESTAMPTYPE = "qpid.jdbcstore.timestampType";
     public static final String CONTEXT_JDBCSTORE_USEBYTESFORBLOB = "qpid.jdbcstore.useBytesForBlob";
 
@@ -41,6 +42,8 @@
 
     public abstract String getBlobType();
 
+    public abstract String getBlobStorage();
+
     public abstract String getVarBinaryType();
 
     public abstract String getBigintType();
@@ -55,19 +58,19 @@
 
     static class KnownJDBCDetails extends JDBCDetails
     {
-        private static final JDBCDetails FALLBACK = new KnownJDBCDetails("fallback", "blob", "varchar(%d) for bit data", "bigint", "timestamp",
+        private static final JDBCDetails FALLBACK = new KnownJDBCDetails("fallback", "blob", "", "varchar(%d) for bit data", "bigint", "timestamp",
                 false, false);
-        private static final JDBCDetails ORACLE = new KnownJDBCDetails("oracle", "blob", "raw(%d)", "number", "timestamp",
+        private static final JDBCDetails ORACLE = new KnownJDBCDetails("oracle", "blob", "LOB (%s) STORE AS SECUREFILE (RETENTION NONE)", "raw(%d)", "number", "timestamp",
                 false, true);
-        private static final JDBCDetails SYBASE = new KnownJDBCDetails("sybase", "image null", "varbinary(%d)", "bigint", "datetime",
+        private static final JDBCDetails SYBASE = new KnownJDBCDetails("sybase", "image null", "", "varbinary(%d)", "bigint", "datetime",
                 false, true);
-        private static final JDBCDetails POSTGRES = new KnownJDBCDetails("postgresql", "bytea", "bytea", "bigint", "timestamp",
+        private static final JDBCDetails POSTGRES = new KnownJDBCDetails("postgresql", "bytea", "", "bytea", "bigint", "timestamp",
                 true, true);
-        private static final JDBCDetails DERBY = new KnownJDBCDetails("derby", "blob", "varchar(%d) for bit data", "bigint", "timestamp",
+        private static final JDBCDetails DERBY = new KnownJDBCDetails("derby", "blob", "", "varchar(%d) for bit data", "bigint", "timestamp",
                 false, true);
-        private static final JDBCDetails MYSQL = new KnownJDBCDetails("mysql", "longblob", "varbinary(%d)", "bigint", "timestamp",
+        private static final JDBCDetails MYSQL = new KnownJDBCDetails("mysql", "longblob", "", "varbinary(%d)", "bigint", "timestamp",
                 false, true);
-        private static final JDBCDetails MARIA_DB = new KnownJDBCDetails("mariadb", "longblob", "varbinary(%d)", "bigint", "timestamp",
+        private static final JDBCDetails MARIA_DB = new KnownJDBCDetails("mariadb", "longblob", "", "varbinary(%d)", "bigint", "timestamp",
                 false, true);
 
         static
@@ -94,6 +97,7 @@
 
         private final String _vendor;
         private final String _blobType;
+        private final String _blobStorage;
         private final String _varBinaryType;
         private final String _bigintType;
         private final String _timestampType;
@@ -102,6 +106,7 @@
 
         KnownJDBCDetails(String vendor,
                          String blobType,
+                         String blobStorage,
                          String varBinaryType,
                          String bigIntType,
                          String timestampType,
@@ -110,6 +115,7 @@
         {
             _vendor = vendor;
             _blobType = blobType;
+            _blobStorage = blobStorage;
             _varBinaryType = varBinaryType;
             _bigintType = bigIntType;
             _timestampType = timestampType;
@@ -130,6 +136,12 @@
         }
 
         @Override
+        public String getBlobStorage()
+        {
+            return _blobStorage;
+        }
+
+        @Override
         public String getVarBinaryType()
         {
             return _varBinaryType;
@@ -173,6 +185,7 @@
         return "JDBCDetails{" +
                "vendor='" + getVendor() + '\'' +
                ", blobType='" + getBlobType() + '\'' +
+               ", blobStorage='" + getBlobStorage() + '\'' +
                ", varBinaryType='" + getVarBinaryType() + '\'' +
                ", bigIntType='" + getBigintType() + '\'' +
                ", timestampType='" + getTimestampType() + '\'' +
@@ -216,6 +229,10 @@
         {
             return false;
         }
+        if (getBlobStorage() != null ? !getBlobStorage().equals(that.getBlobStorage()) : that.getBlobStorage() != null)
+        {
+            return false;
+        }
         if (getVarBinaryType() != null ? !getVarBinaryType().equals(that.getVarBinaryType()) : that.getVarBinaryType() != null)
         {
             return false;
@@ -237,6 +254,7 @@
     {
         int result = getVendor() != null ? getVendor().hashCode() : 0;
         result = 31 * result + (getBlobType() != null ? getBlobType().hashCode() : 0);
+        result = 31 * result + (getBlobStorage() != null ? getBlobStorage().hashCode() : 0);
         result = 31 * result + (getVarBinaryType() != null ? getVarBinaryType().hashCode() : 0);
         result = 31 * result + (getBigintType() != null ? getBigintType().hashCode() : 0);
         result = 31 * result + (getTimestampType() != null ? getTimestampType().hashCode() : 0);
@@ -249,7 +267,6 @@
     public static JDBCDetails getDetailsForJdbcUrl(String jdbcUrl, final ConfiguredObject<?> object)
     {
         String[] components = jdbcUrl.split(":", 3);
-        final JDBCDetails details;
         String vendor = null;
         if(components.length >= 2)
         {
@@ -364,6 +381,13 @@
             }
 
             @Override
+            public String getBlobStorage()
+            {
+                return contextMap.containsKey(CONTEXT_JDBCSTORE_BLOBSTORAGE)
+                        ? String.valueOf(contextMap.get(CONTEXT_JDBCSTORE_BLOBSTORAGE)) : details.getBlobStorage();
+            }
+
+            @Override
             public String getVarBinaryType()
             {
                 return contextMap.containsKey(CONTEXT_JDBCSTORE_VARBINARYTYPE)
@@ -404,6 +428,7 @@
                         || contextMap.containsKey(CONTEXT_JDBCSTORE_BIGINTTYPE)
                         || contextMap.containsKey(CONTEXT_JDBCSTORE_VARBINARYTYPE)
                         || contextMap.containsKey(CONTEXT_JDBCSTORE_BLOBTYPE)
+                        || contextMap.containsKey(CONTEXT_JDBCSTORE_BLOBSTORAGE)
                         || contextMap.containsKey(CONTEXT_JDBCSTORE_TIMESTAMPTYPE);
             }
         };
diff --git a/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCDetailsTest.java b/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCDetailsTest.java
index 4c65a0f..4ae3d6e 100644
--- a/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCDetailsTest.java
+++ b/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCDetailsTest.java
@@ -33,6 +33,7 @@
 
 
 public class JDBCDetailsTest extends UnitTestBase{
+
     @Test
     public void testDerby()
     {
@@ -41,6 +42,8 @@
         assertEquals("varchar(%d) for bit data", derbyDetails.getVarBinaryType());
         assertEquals("bigint", derbyDetails.getBigintType());
         assertEquals("blob", derbyDetails.getBlobType());
+        assertEquals("", derbyDetails.getBlobStorage());
+        assertEquals("timestamp", derbyDetails.getTimestampType());
         assertFalse(derbyDetails.isUseBytesMethodsForBlob());
 
         assertTrue(derbyDetails.isKnownVendor());
@@ -55,7 +58,10 @@
         assertEquals("varchar(%d) for bit data", details.getVarBinaryType());
         assertEquals("bigint", details.getBigintType());
         assertEquals("blob", details.getBlobType());
-        assertEquals(false, details.isUseBytesMethodsForBlob());
+        assertEquals("", details.getBlobStorage());
+        assertEquals("timestamp", details.getTimestampType());
+        assertFalse(details.isUseBytesMethodsForBlob());
+
         assertFalse(details.isOverridden());
         assertFalse(details.isKnownVendor());
     }
@@ -63,7 +69,6 @@
     @Test
     public void testDerbyWithOverride()
     {
-
         Map<String, String> contextMap = new HashMap<>();
         contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_VARBINARYTYPE, "myvarbin");
 
@@ -72,15 +77,14 @@
         assertEquals("myvarbin", derbyDetails.getVarBinaryType());
         assertEquals("bigint", derbyDetails.getBigintType());
         assertEquals("blob", derbyDetails.getBlobType());
+        assertEquals("", derbyDetails.getBlobStorage());
+        assertEquals("timestamp", derbyDetails.getTimestampType());
         assertFalse(derbyDetails.isUseBytesMethodsForBlob());
 
         assertTrue(derbyDetails.isKnownVendor());
         assertTrue(derbyDetails.isOverridden());
     }
 
-
-
-
     @Test
     public void testRecognisedDriver_AllDetailsProvidedByContext()
     {
@@ -88,6 +92,7 @@
         contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_VARBINARYTYPE, "myvarbin");
         contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_BIGINTTYPE, "mybigint");
         contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_BLOBTYPE, "myblob");
+        contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_BLOBSTORAGE, "myblobstorage");
         contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_TIMESTAMPTYPE, "mytimestamp");
         contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_USEBYTESFORBLOB, "true");
 
@@ -96,10 +101,27 @@
         assertEquals("myvarbin", details.getVarBinaryType());
         assertEquals("mybigint", details.getBigintType());
         assertEquals("myblob", details.getBlobType());
+        assertEquals("myblobstorage", details.getBlobStorage());
         assertEquals("mytimestamp", details.getTimestampType());
         assertEquals(true, details.isUseBytesMethodsForBlob());
+
         assertTrue(details.isKnownVendor());
         assertTrue(details.isOverridden());
     }
 
+    @Test
+    public void testOracle()
+    {
+        JDBCDetails oracleDetails = JDBCDetails.getJdbcDetails("oracle", Collections.emptyMap());
+        assertEquals("oracle", oracleDetails.getVendor());
+        assertEquals("raw(%d)", oracleDetails.getVarBinaryType());
+        assertEquals("number", oracleDetails.getBigintType());
+        assertEquals("blob", oracleDetails.getBlobType());
+        assertEquals("LOB (%s) STORE AS SECUREFILE (RETENTION NONE)", oracleDetails.getBlobStorage());
+        assertEquals("timestamp", oracleDetails.getTimestampType());
+        assertFalse(oracleDetails.isUseBytesMethodsForBlob());
+
+        assertTrue(oracleDetails.isKnownVendor());
+        assertFalse(oracleDetails.isOverridden());
+    }
 }
