Index: src/main/org/h2/command/Parser.java
===================================================================
--- src/main/org/h2/command/Parser.java	(revision 3763)
+++ src/main/org/h2/command/Parser.java	(working copy)
@@ -603,6 +603,9 @@
             if (equalsToken("SESSION", schemaName)) {
                 // for local temporary tables
                 schema = database.getSchema(session.getCurrentSchemaName());
+            } else if (schemaName.equals("SYSIBM")
+                    && (database.getMode().getName().equals("DB2") || database.getMode().getName().equals("Derby"))) {
+                // for db2 and derby compatibility(SYSIBM.SYSDUMMY1)
             } else {
                 throw DbException.get(ErrorCode.SCHEMA_NOT_FOUND_1, schemaName);
             }
@@ -1063,6 +1066,9 @@
                 }
             } else if (equalsToken("DUAL", tableName)) {
                 table = getDualTable(false);
+            } else if (equalsToken("SYSDUMMY1", tableName)
+                    && (database.getMode().getName().equals("DB2") || database.getMode().getName().equals("Derby"))) {
+                table = getDualTable(false);
             } else {
                 table = readTableOrView(tableName);
             }
Index: src/test/org/h2/test/db/TestCompatibility.java
===================================================================
--- src/test/org/h2/test/db/TestCompatibility.java	(revision 3766)
+++ src/test/org/h2/test/db/TestCompatibility.java	(working copy)
@@ -40,6 +40,8 @@
         testUniqueIndexOracle();
         testHsqlDb();
         testMySQL();
+        testDB2();
+        testDerby();
         testPlusSignAsConcatOperator();
 
         conn.close();
@@ -223,4 +225,37 @@
 
     }
 
+    private void testDB2() throws SQLException {
+        conn = getConnection("compatibility;MODE=DB2");
+        ResultSet res = conn.createStatement().executeQuery("SELECT 1 FROM sysibm.sysdummy1");
+        res.next();
+        assertEquals("1", res.getString(1));
+        conn.close();
+        conn = getConnection("compatibility;MODE=MySQL");
+        try {
+            conn.createStatement().executeQuery("SELECT 1 FROM sysibm.sysdummy1");
+            fail();
+        } catch (SQLException e) {
+            // can't lookup sysibm.sysdummy1 on mode=MySQL etc.
+        }
+        conn.close();
+        conn = getConnection("compatibility");
+    }
+
+    private void testDerby() throws SQLException {
+        conn = getConnection("compatibility;MODE=Derby");
+        ResultSet res = conn.createStatement().executeQuery("SELECT 1 FROM sysibm.sysdummy1");
+        res.next();
+        assertEquals("1", res.getString(1));
+        conn.close();
+        conn = getConnection("compatibility;MODE=PostgreSQL");
+        try {
+            conn.createStatement().executeQuery("SELECT 1 FROM sysibm.sysdummy1");
+            fail();
+        } catch (SQLException e) {
+            // can't lookup sysibm.sysdummy1 on mode=MySQL etc.
+        }
+        conn.close();
+        conn = getConnection("compatibility");
+    }
 }
