faq.html 11.5 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 38 39
<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="#query_slow">
    My Query is Slow</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 />
40 41
<a href="#column_names_incorrect">
    Column Names are Incorrect?</a><br />
Thomas Mueller's avatar
Thomas Mueller committed
42 43
<a href="#float_is_double">
    Float is Double?</a><br />
44 45
<a href="#gcj">
    Is the GCJ Version Stable? Faster?</a><br />
Thomas Mueller's avatar
Thomas Mueller committed
46
<a href="#how_to_translate">
47
    How to Translate this Project?</a><br />
48

49 50 51 52
<h3 id="support">I Have a Problem or Feature Request</h3>
<p>
Please read the <a href="build.html#support">support checklist</a>.
</p>
53

Thomas Mueller's avatar
Thomas Mueller committed
54
<h3 id="known_bugs">Are there Known Bugs? When is the Next Release?</h3>
55 56 57 58
<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
59 60 61
<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
62
    unloading a web application. This can cause a <code>NullPointerException</code> in H2 versions
63
    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
64
    run into this issue. In Tomcat &gt;= 6.0 this behavior can be disabled by setting the
65 66 67
    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
68
    (<code>common/lib</code>).
69 70
</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
71
    when used in combination with other joins.
72 73 74 75
</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.
76 77
    This problem is solved in Install4j 4.1.4.
</li></ul>
Thomas Mueller's avatar
Thomas Mueller committed
78 79 80
<p>
For a complete list, see <a href="http://code.google.com/p/h2database/issues/list">Open Issues</a>.
</p>
81

Thomas Mueller's avatar
Thomas Mueller committed
82
<h3 id="open_source">Is this Database Engine Open Source?</h3>
83 84 85 86 87
<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
88
<h3 id="query_slow">My Query is Slow</h3>
89
<p>
90
Slow <code>SELECT</code> (or <code>DELETE, UPDATE, MERGE</code>)
91
statement can have multiple reasons. Follow this checklist:
92 93
</p>
<ul>
94 95
<li>Run <code>ANALYZE</code> (see documentation for details).
</li><li>Run the query with <code>EXPLAIN</code> and check if indexes are used
96 97
    (see documentation for details).
</li><li>If required, create additional indexes and try again using
98
    <code>ANALYZE</code> and <code>EXPLAIN</code>.
99 100 101 102
</li><li>If it doesn't help please report the problem.
</li>
</ul>

Thomas Mueller's avatar
Thomas Mueller committed
103
<h3 id="create_database">How to Create a New Database?</h3>
104 105
<p>
By default, a new database is automatically created if it does not yet exist.
106
See <a href="tutorial.html#creating_new_databases">Creating New Databases</a>.
107 108
</p>

Thomas Mueller's avatar
Thomas Mueller committed
109
<h3 id="connect">How to Connect to a Database?</h3>
110
<p>
111 112
The database driver is <code>org.h2.Driver</code>,
and the database URL starts with <code>jdbc:h2:</code>.
113 114
To connect to a database using JDBC, use the following code:
</p>
115
<pre>
116 117 118 119
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
</pre>

Thomas Mueller's avatar
Thomas Mueller committed
120
<h3 id="database_files">Where are the Database Files Stored?</h3>
121
<p>
122
When using database URLs like <code>jdbc:h2:~/test</code>,
123
the database is stored in the user directory.
124
For Windows, this is usually <code>C:\Documents and Settings\&lt;userName&gt;</code>.
125
If the base directory is not set (as in <code>jdbc:h2:test</code>),
126 127
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,
128
this is <code>&lt;Installation Directory&gt;/bin</code>.
129
The base directory can be set in the database URL. A fixed or relative path can be used. When using the URL
130 131
<code>jdbc:h2:file:data/sample</code>, the database is stored in the directory
<code>data</code> (relative to the current working directory).
132 133
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).
134
Example: <code>jdbc:h2:file:C:/data/test</code>
135 136
</p>

Thomas Mueller's avatar
Thomas Mueller committed
137
<h3 id="size_limit">What is the Size Limit (Maximum Size) of a Database?</h3>
138
<p>
Thomas Mueller's avatar
Thomas Mueller committed
139
See <a href="advanced.html#limits_limitations">Limits and Limitations</a>.
140 141
</p>

Thomas Mueller's avatar
Thomas Mueller committed
142
<h3 id="reliable">Is it Reliable?</h3>
143 144 145
<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
146
are run regularly. But there are probably still
147
bugs that have not yet been found (as with most software). Some features are known
148 149
to be dangerous, they are only supported for situations where performance is more important
than reliability. Those dangerous features are:
150
</p>
Thomas Mueller's avatar
Thomas Mueller committed
151
<ul><li>Using the transaction isolation level <code>READ_UNCOMMITTED</code>
152
    (<code>LOCK_MODE 0</code>) while at the same time using multiple
153
    connections.
154 155
</li><li>Disabling database file protection using (setting <code>FILE_LOCK</code> to
    <code>NO</code> in the database URL).
156
</li><li>Disabling referential integrity using <code>SET REFERENTIAL_INTEGRITY FALSE</code>.
157 158 159
</li></ul>
<p>
In addition to that, running out of memory should be avoided.
160
In older versions, OutOfMemory errors while using the database could corrupt a databases.
161 162
</p>
<p>
163
Some areas of this database are not fully tested.
Thomas Mueller's avatar
Thomas Mueller committed
164
When using one of those features for production, please ensure your use case
165 166
is well tested (if possible with automated test cases).
Those areas are:
167 168
</p>
<ul>
Thomas Mueller's avatar
Thomas Mueller committed
169
<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
170
</li><li>The feature <code>MULTI_THREADED</code>
171 172
</li><li>The features <code>AUTO_SERVER</code> and
    <code>AUTO_RECONNECT</code>
173
</li><li>The file locking method 'Serialized'
174 175 176 177 178
</li><li>The MVCC (multi version concurrency) mode
</li><li>Cluster mode, 2-phase commit, savepoints
</li><li>24/7 operation
</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
179 180
</li><li>Fulltext search
</li><li>Operations on LOBs over 2 GB
181 182
</li></ul>
<p>
183
Areas considered experimental are:
184 185 186
</p>
<ul>
<li>The PostgreSQL server
187
</li><li>Multi-threading within the engine using <code>SET MULTI_THREADED=1</code>
188
</li><li>Compatibility modes for other databases (only some features are implemented)
189 190
</li><li>The soft reference cache (CACHE_TYPE=SOFT_LRU). It might not improve performance,
    and out of memory issues have been reported.
191
</li></ul>
192
<p>
Thomas Mueller's avatar
Thomas Mueller committed
193 194 195
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.
196
</p>
197

198 199 200 201 202 203 204 205 206
<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
207
and not the alias name. If you need the alias name, use
208
<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
209
Some other database don't work like this yet (they don't follow the JDBC specification).
210
If you need compatibility with those databases, use the <a href="features.html#compatibility">Compatibility Mode</a>,
211 212
or set the system property <a href="../javadoc/org/h2/constant/SysProperties.html#h2.aliasColumnName"><code>h2.aliasColumnName</code></a>.
</p>
Thomas Mueller's avatar
Thomas Mueller committed
213 214 215 216
<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>
217

Thomas Mueller's avatar
Thomas Mueller committed
218 219 220 221 222 223 224
<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>
225
This is not a bug. According the the JDBC specification, the JDBC data type <code>FLOAT</code>
Thomas Mueller's avatar
Thomas Mueller committed
226
is equivalent to <code>DOUBLE</code>, and both are mapped to <code>java.lang.Double</code>.
227
See also
Thomas Mueller's avatar
Thomas Mueller committed
228 229 230
<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
231
<h3 id="slow_open">Why is Opening my Database Slow?</h3>
232
<p>
Thomas Mueller's avatar
Thomas Mueller committed
233 234 235 236
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.
237 238 239
</p>
<p>
To find out what the problem is, open the database in embedded mode using the H2 Console.
240
This will print progress information. If you have many lines with 'Creating index' it is an indication that the
241 242 243 244 245 246 247
database was not closed the last time.
</p>
<p>
Other possible reasons are: the database is very big (many GB), or contains linked tables
that are slow to open.
</p>

Thomas Mueller's avatar
Thomas Mueller committed
248
<h3 id="gcj">Is the GCJ Version Stable? Faster?</h3>
249 250 251 252 253 254 255 256
<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
257
<h3 id="how_to_translate">How to Translate this Project?</h3>
258 259 260 261 262 263
<p>
For more information, see
<a href="build.html#translating">Build/Translating</a>.
</p>

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