BINARYのデータも移行したくて、あれこれ調査してみた。subsonicのDBはhsqldbを使用している。
hsqldbは、DB管理はDBManagerというのが、準備されている。
sudo java -cp /var/lib/tomcat6/webapps/subsonic/WEB-INF/lib/hsqldb-1.8.0.7.jar org.hsqldb.util.DatabaseManager
これはGUIの管理ツールなので、サーバー上では、実行できない。それは当然として、じゃあCLIの管理ツールとしてSqlToolが準備されているようななので、homeディレクトリに
urlid subsonic
url jdbc:hsqldb:hsql://localhost:[port番号]/subsonic
username sa
password
と記述されたsqltool.rcファイルを作成する。urlは通常、subsonicにアクセスするurlを記述(port番号も同じ)。urlidはSqlToolを起動するときの、db名になるので、なんでも良い。で、実行。
sudo java -cp /var/lib/tomcat6/webapps/subsonic/WEB-INF/lib/hsqldb-1.8.0.7.jar org.hsqldb.util.SqlTool --rcfile \~/sqltool.rc subsonic
java.sql.SQLException: Connection is broken: java.io.EOFException
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source)
at org.hsqldb.jdbcDriver.getConnection(Unknown Source)
at org.hsqldb.jdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:620)
at java.sql.DriverManager.getConnection(DriverManager.java:200)
at org.hsqldb.util.RCData.getConnection(Unknown Source)
at org.hsqldb.util.SqlTool.main(Unknown Source)
Failed to get a connection to jdbc:hsqldb:hsql://localhost:xxxx/subsonic
as sa. Connection is broken: java.io.EOFException
とエラーが出てできない。ちなみに外からDBManager使ったり、LibreOffice Baseを使っても同様にConnection is broken
で駄目。url自体が間違っているか、hsqldbが起動していないと
java.sql.SQLException: socket creation error
が出るので、接続先は合っている、起動もしている。
これは埋込でスタンドアローン・モードで起動しているから無理なのか?と思い、subsonicを停止。
sudo java -classpath /var/lib/tomcat6/webapps/subsonic/WEB-INF/lib/hsqldb-1.8.0.7.jar org.hsqldb.Server -database.0 /var/subsonic/db -dbname.0 subsonic
サーバー・モードで起動。そして、別セクションから、sqltool.rcを編集しなおす。
urlid subsonic
url jdbc:hsqldb:hsql://localhost/subsonic
username sa
password
そして、上記コマンドを再実行。接続はできた。が!!!!\dt
でテーブルを確認しても何も出ない。サーバー起動時のオプションが間違っているのか?
sql> \dt
TABLE_SCHEM TABLE_NAME
----------- ----------
0 rows
うーむ。どういうこっちゃ。これではテーブルのエクスポートとかできない。やっつけで、仕組もろくに理解せず、やっているからな・・・ともあれ、これはこれで外部からDBからイジられることがないということが分かって安心した。にしても、せめてテーブルのカラムのデータ型とか調べたい・・・
とりあえず、どんなテーブルが有るか知りたければ、
SELECT * FROM INFORMATION_SCHEMA.SYSTEM_TABLES
を叩けば、そこから頑張って調べていける事がわかった。
カラムを調べるには、
select TABLE_NAME, COLUMN_NAME, TYPE_NAME, BUFFER_LENGTH, IS_NULLABLE from INFORMATION_SCHEMA.SYSTEM_COLUMNS where TABLE_SCHEM = 'PUBLIC' order by TABLE_NAME
主キーを調べるには、
select TABLE_NAME, COLUMN_NAME, KEY_SEQ, PK_NAME from INFORMATION_SCHEMA.SYSTEM_PRIMARYKEYS order by TABLE_NAME
とすれば、調べられた。
しかし、一番の目的であるBINARY型のデータも移行はできないぞ!SqlTool、DatabaseManagerを使えれば、それが可能っぽいのに!ちょっと詰まってきたので、今日はこれで終わっておく。
追記: 2013-03-31
繋げれた!
次の日記参照。
追記ここまで