faq.html 12.8 KB
Newer Older
1 2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
3
Copyright 2004-2010 H2 Group. Multiple-Licensed under the H2 License, Version 1.0,
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
and under the Eclipse Public License, Version 1.0
(http://h2database.com/html/license.html).
Initial Developer: H2 Group
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>
Frequently Asked Questions
</title><link rel="stylesheet" type="text/css" href="stylesheet.css" />
<!-- [search] { -->
<script type="text/javascript" src="navigation.js"></script>
</head><body onload="frameMe();">
<table class="content"><tr class="content"><td class="content"><div class="contentDiv">
<!-- } -->

<h1>Frequently Asked Questions</h1>

20 21
<a href="#support">
    I Have a Problem or Feature Request</a><br />
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
<a href="#known_bugs">
    Are there Known Bugs? When is the Next Release?</a><br />
<a href="#open_source">
    Is this Database Engine Open Source?</a><br />
<a href="#create_database">
    How to Create a New Database?</a><br />
<a href="#connect">
    How to Connect to a Database?</a><br />
<a href="#database_files">
    Where are the Database Files Stored?</a><br />
<a href="#size_limit">
    What is the Size Limit (Maximum Size) of a Database?</a><br />
<a href="#reliable">
    Is it Reliable?</a><br />
<a href="#slow_open">
    Why is Opening my Database Slow?</a><br />
Thomas Mueller's avatar
Thomas Mueller committed
38 39 40 41
<a href="#query_slow">
    My Query is Slow</a><br />
<a href="#database_slow">
    H2 is Very Slow</a><br />
42 43
<a href="#column_names_incorrect">
    Column Names are Incorrect?</a><br />
Thomas Mueller's avatar
Thomas Mueller committed
44 45
<a href="#float_is_double">
    Float is Double?</a><br />
46 47
<a href="#gcj">
    Is the GCJ Version Stable? Faster?</a><br />
Thomas Mueller's avatar
Thomas Mueller committed
48
<a href="#how_to_translate">
49
    How to Translate this Project?</a><br />
Thomas Mueller's avatar
Thomas Mueller committed
50 51
<a href="#how_to_contribute">
    How to Contribute to this Project?</a><br />
52

53 54 55 56
<h3 id="support">I Have a Problem or Feature Request</h3>
<p>
Please read the <a href="build.html#support">support checklist</a>.
</p>
57

Thomas Mueller's avatar
Thomas Mueller committed
58
<h3 id="known_bugs">Are there Known Bugs? When is the Next Release?</h3>
59 60 61 62
<p>
Usually, bugs get fixes as they are found. There is a release every few weeks.
Here is the list of known and confirmed issues:
</p>
Thomas Mueller's avatar
Thomas Mueller committed
63 64 65
<ul><li>Apache Harmony: there seems to be a bug in Harmony that affects H2.
    See <a href="https://issues.apache.org/jira/browse/HARMONY-6505">HARMONY-6505</a>.
</li><li>Tomcat and Glassfish 3 set most static fields (final or non-final) to <code>null</code> when
66
    unloading a web application. This can cause a <code>NullPointerException</code> in H2 versions
67
    1.1.107 and older, and may still not work in newer versions. Please report it if you
Thomas Mueller's avatar
Thomas Mueller committed
68
    run into this issue. In Tomcat &gt;= 6.0 this behavior can be disabled by setting the
69 70 71
    system property <code>org.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES=false</code>,
    however Tomcat may then run out of memory. A known workaround is to
    put the <code>h2*.jar</code> file in a shared <code>lib</code> directory
72
    (<code>common/lib</code>).
73 74
</li><li>Some problems have been found with right outer join. Internally, it is converted
    to left outer join, which does not always produce the same results as other databases
75
    when used in combination with other joins.
76 77 78 79
</li><li>When using Install4j before 4.1.4 on Linux and enabling <code>pack200</code>,
    the <code>h2*.jar</code> becomes corrupted by the install process, causing application failure.
    A workaround is to add an empty file <code>h2*.jar.nopack</code>
    next to the <code>h2*.jar</code> file.
80 81
    This problem is solved in Install4j 4.1.4.
</li></ul>
Thomas Mueller's avatar
Thomas Mueller committed
82 83 84
<p>
For a complete list, see <a href="http://code.google.com/p/h2database/issues/list">Open Issues</a>.
</p>
85

Thomas Mueller's avatar
Thomas Mueller committed
86
<h3 id="open_source">Is this Database Engine Open Source?</h3>
87 88 89 90 91
<p>
Yes. It is free to use and distribute, and the source code is included.
See also under license.
</p>

Thomas Mueller's avatar
Thomas Mueller committed
92
<h3 id="create_database">How to Create a New Database?</h3>
93 94
<p>
By default, a new database is automatically created if it does not yet exist.
95
See <a href="tutorial.html#creating_new_databases">Creating New Databases</a>.
96 97
</p>

Thomas Mueller's avatar
Thomas Mueller committed
98
<h3 id="connect">How to Connect to a Database?</h3>
99
<p>
100 101
The database driver is <code>org.h2.Driver</code>,
and the database URL starts with <code>jdbc:h2:</code>.
102 103
To connect to a database using JDBC, use the following code:
</p>
104
<pre>
105 106 107 108
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
</pre>

Thomas Mueller's avatar
Thomas Mueller committed
109
<h3 id="database_files">Where are the Database Files Stored?</h3>
110
<p>
111
When using database URLs like <code>jdbc:h2:~/test</code>,
112
the database is stored in the user directory.
113
For Windows, this is usually <code>C:\Documents and Settings\&lt;userName&gt;</code>.
114
If the base directory is not set (as in <code>jdbc:h2:test</code>),
115 116
the database files are stored in the directory where the application is started
(the current working directory). When using the H2 Console application from the start menu,
117
this is <code>&lt;Installation Directory&gt;/bin</code>.
118
The base directory can be set in the database URL. A fixed or relative path can be used. When using the URL
119 120
<code>jdbc:h2:file:data/sample</code>, the database is stored in the directory
<code>data</code> (relative to the current working directory).
121 122
The directory is created automatically if it does not yet exist. It is also possible to use the
fully qualified directory name (and for Windows, drive name).
123
Example: <code>jdbc:h2:file:C:/data/test</code>
124 125
</p>

Thomas Mueller's avatar
Thomas Mueller committed
126
<h3 id="size_limit">What is the Size Limit (Maximum Size) of a Database?</h3>
127
<p>
Thomas Mueller's avatar
Thomas Mueller committed
128
See <a href="advanced.html#limits_limitations">Limits and Limitations</a>.
129 130
</p>

Thomas Mueller's avatar
Thomas Mueller committed
131
<h3 id="reliable">Is it Reliable?</h3>
132 133 134
<p>
That is not easy to say. It is still a quite new product. A lot of tests have been written,
and the code coverage of these tests is very high. Randomized stress tests
135
are run regularly. But there are probably still
136
bugs that have not yet been found (as with most software). Some features are known
137 138
to be dangerous, they are only supported for situations where performance is more important
than reliability. Those dangerous features are:
139
</p>
140 141
<ul><li>Disabling the transaction log or FileDescriptor.sync() using LOG=0 or LOG=1.
</li><li>Using the transaction isolation level <code>READ_UNCOMMITTED</code>
142
    (<code>LOCK_MODE 0</code>) while at the same time using multiple
143
    connections.
144 145
</li><li>Disabling database file protection using (setting <code>FILE_LOCK</code> to
    <code>NO</code> in the database URL).
146
</li><li>Disabling referential integrity using <code>SET REFERENTIAL_INTEGRITY FALSE</code>.
147 148 149
</li></ul>
<p>
In addition to that, running out of memory should be avoided.
150
In older versions, OutOfMemory errors while using the database could corrupt a databases.
151 152
</p>
<p>
Thomas Mueller's avatar
Thomas Mueller committed
153 154 155 156
This database is well tested using automated test cases. The tests run every night
and run for more than one hour. But not all areas of this database are equally well tested.
When using one of the following features for production, please ensure your use case
is well tested (if possible with automated test cases). The areas that are not well tested are:
157 158
</p>
<ul>
Thomas Mueller's avatar
Thomas Mueller committed
159
<li>Platforms other than Windows XP, Linux, Mac OS X, or JVMs other than Sun 1.5 or 1.6
Thomas Mueller's avatar
Thomas Mueller committed
160
</li><li>The features <code>AUTO_SERVER</code> and <code>AUTO_RECONNECT</code>
161
</li><li>The file locking method 'Serialized'
162 163
</li><li>Cluster mode, 2-phase commit, savepoints
</li><li>24/7 operation
164 165
</li><li>Fulltext search
</li><li>Operations on LOBs over 2 GB
Thomas Mueller's avatar
Thomas Mueller committed
166 167
</li><li>Some operations on databases larger than 500 MB may be slower than expected
</li><li>The optimizer may not always select the best plan
168 169
</li></ul>
<p>
170
Areas considered experimental are:
171 172 173
</p>
<ul>
<li>The PostgreSQL server
174
</li><li>Multi-threading within the engine using <code>SET MULTI_THREADED=1</code>
175
</li><li>Compatibility modes for other databases (only some features are implemented)
Thomas Mueller's avatar
Thomas Mueller committed
176
</li><li>The soft reference cache (<code>CACHE_TYPE=SOFT_LRU</code>). It might not improve performance,
177
    and out of memory issues have been reported.
178
</li></ul>
179
<p>
Thomas Mueller's avatar
Thomas Mueller committed
180 181 182
Some users have reported that after a power failure, the database cannot be opened sometimes.
In this case, use a backup of the database or the Recover tool. Please report such problems.
The plan is that the database automatically recovers in all situations.
183
</p>
184

Thomas Mueller's avatar
Thomas Mueller committed
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
<h3 id="slow_open">Why is Opening my Database Slow?</h3>
<p>
To find out what the problem is, use the H2 Console and click on "Test Connection"
instead of "Login". After the "Login Successful" appears, click on it (it's a link).
This will list the top stack traces. Then either analyze this yourself, or
post those stack traces in the Google Group.
</p>
<p>
Other possible reasons are: the database is very big (many GB), or contains linked tables
that are slow to open.
</p>

<h3 id="query_slow">My Query is Slow</h3>
<p>
Slow <code>SELECT</code> (or <code>DELETE, UPDATE, MERGE</code>)
statement can have multiple reasons. Follow this checklist:
</p>
<ul>
<li>Run <code>ANALYZE</code> (see documentation for details).
</li><li>Run the query with <code>EXPLAIN</code> and check if indexes are used
    (see documentation for details).
</li><li>If required, create additional indexes and try again using
    <code>ANALYZE</code> and <code>EXPLAIN</code>.
</li><li>If it doesn't help please report the problem.
</li>
</ul>


<h3 id="database_slow">H2 is Very Slow</h3>
<p>
By default, H2 closes the database when the last connection is closed.
If your application closes the only connection after each operation,
the database is opened and closed a lot, which is quite slow.
Thomas Mueller's avatar
Thomas Mueller committed
218
There are multiple ways to solve this problem, see
Thomas Mueller's avatar
Thomas Mueller committed
219 220 221
<a href="performance.html#database_performance_tuning">Database Performance Tuning</a>.
</p>

222 223 224 225 226 227 228 229 230
<h3 id="column_names_incorrect">Column Names are Incorrect?</h3>
<p>
For the query <code>SELECT ID AS X FROM TEST</code> the method
<code>ResultSetMetaData.getColumnName()</code> returns <code>ID</code>, I expect it to
return <code>X</code>. What's wrong?
</p>
<p>
This is not a bug. According the the JDBC specification, the method
<code>ResultSetMetaData.getColumnName()</code> should return the name of the column
231
and not the alias name. If you need the alias name, use
232
<a href="http://java.sun.com/javase/6/docs/api/java/sql/ResultSetMetaData.html#getColumnLabel(int)"><code>ResultSetMetaData.getColumnLabel()</code></a>.
Thomas Mueller's avatar
Thomas Mueller committed
233
Some other database don't work like this yet (they don't follow the JDBC specification).
234
If you need compatibility with those databases, use the <a href="features.html#compatibility">Compatibility Mode</a>,
Thomas Mueller's avatar
Thomas Mueller committed
235
or append <a href="../javadoc/org/h2/constant/DbSettings.html#ALIAS_COLUMN_NAME"><code>;ALIAS_COLUMN_NAME=TRUE</code></a> to the database URL.
236
</p>
Thomas Mueller's avatar
Thomas Mueller committed
237 238 239 240
<p>
This also applies to DatabaseMetaData calls that return a result set.
The columns in the JDBC API are column labels, not column names.
</p>
241

Thomas Mueller's avatar
Thomas Mueller committed
242 243 244 245 246 247 248
<h3 id="float_is_double">Float is Double?</h3>
<p>
For a table defined as <code>CREATE TABLE TEST(X FLOAT)</code> the method
<code>ResultSet.getObject()</code> returns a <code>java.lang.Double</code>, I expect it to
return a <code>java.lang.Float</code>. What's wrong?
</p>
<p>
249
This is not a bug. According the the JDBC specification, the JDBC data type <code>FLOAT</code>
Thomas Mueller's avatar
Thomas Mueller committed
250
is equivalent to <code>DOUBLE</code>, and both are mapped to <code>java.lang.Double</code>.
251
See also
Thomas Mueller's avatar
Thomas Mueller committed
252 253 254
<a href="http://java.sun.com/j2se/1.5.0/docs/guide/jdbc/getstart/mapping.html#1055162">
Mapping SQL and Java Types - 8.3.10 FLOAT</a>.</p>

Thomas Mueller's avatar
Thomas Mueller committed
255
<h3 id="gcj">Is the GCJ Version Stable? Faster?</h3>
256 257 258 259 260 261 262 263
<p>
The GCJ version is not as stable as the Java version.
When running the regression test with the GCJ version, sometimes the application just stops
at what seems to be a random point without error message.
Currently, the GCJ version is also slower than when using the Sun VM.
However, the startup of the GCJ version is faster than when using a VM.
</p>

Thomas Mueller's avatar
Thomas Mueller committed
264
<h3 id="how_to_translate">How to Translate this Project?</h3>
265 266 267 268 269
<p>
For more information, see
<a href="build.html#translating">Build/Translating</a>.
</p>

Thomas Mueller's avatar
Thomas Mueller committed
270 271
<h3 id="how_to_contribute">How to Contribute to this Project?</h3>
<p>
Thomas Mueller's avatar
Thomas Mueller committed
272
There are various way to help develop an open source project like H2. The first step could be to
Thomas Mueller's avatar
Thomas Mueller committed
273
<a href="build.html#translating">translate</a> the error messages and the GUI to your native language.
Thomas Mueller's avatar
Thomas Mueller committed
274
Then, you could
Thomas Mueller's avatar
Thomas Mueller committed
275
<a href="build.html#providing_patches">provide patches</a>.
Thomas Mueller's avatar
Thomas Mueller committed
276
Please start with small patches. That could be adding a test case to improve the
Thomas Mueller's avatar
Thomas Mueller committed
277 278
<a href="build.html#automated">code coverage</a> (the target code coverage for this project is 90%, higher is better).
You will have to <a href="build.html">develop, build and run the tests</a>.
Thomas Mueller's avatar
Thomas Mueller committed
279
Once you are familiar with the code, you could implement missing features from the
Thomas Mueller's avatar
Thomas Mueller committed
280 281 282 283 284
<a href="roadmap.html">feature request list</a>.
I suggest to start with very small features that are easy to implement.
Keep in mind to provide test cases as well.
</p>

285
<!-- [close] { --></div></td></tr></table><!-- } --><!-- analytics --></body></html>