subsonic のDBを調べる
定期的にsubsonicのDBが壊れる。
具体的には実際のファイル数よりも明らかに少ないファイルしかスキャンされず、しかも何度スキャンしても状況が変わらない。
そのたびに直近のバックアップをrestoreしているのだが、proxmoxだから手軽に出来ているのであって、いつまでもこんなやり方ではまずい。
なので、出来ればDB(HSQL)の中で何が起こっているのか調べておきたい。
http://hsqldb.org/doc/guide/ch08.html
を参考に。
というわけで先ずは接続。
予めsubsonic の dbディレクトリを適当な場所にコピーしておく。subsonicをstopしてからやったほうがいいだろう。
java -jar /var/subsonic/jetty/[DIR]/webapp/WEB-INF/lib/hsqldb-1.8.0.7.jar --inlineRc URL=jdbc:hsqldb:file:[DB_PATH]/subsonic,user=sa,charset=UTF-8
subsonicの使っているHSQLのjarを使って、予めコピーしておいた subsonic の dbディレクトリを指定して、standaloneで接続して中身を見る、という事をやっている。dbのファイルは subsonic.* という名前なので、接続する時はファイル名を直接指定せずにsubsonicまでで止めること。
passwordは空っぽで良い。
sql> \dt TABLE_SCHEM TABLE_NAME ----------- ------------------- PUBLIC ALBUM PUBLIC ARTIST PUBLIC BOOKMARK PUBLIC CUSTOM_AVATAR PUBLIC GENRE PUBLIC INTERNET_RADIO PUBLIC MEDIA_FILE PUBLIC MUSIC_FILE_INFO PUBLIC MUSIC_FOLDER PUBLIC MUSIC_FOLDER_USER PUBLIC PLAYER PUBLIC PLAYER_TRANSCODING PUBLIC PLAYER_TRANSCODING2 PUBLIC PLAYLIST PUBLIC PLAYLIST_FILE PUBLIC PLAYLIST_USER PUBLIC PLAY_QUEUE PUBLIC PLAY_QUEUE_FILE PUBLIC PODCAST_CHANNEL PUBLIC PODCAST_EPISODE PUBLIC ROLE PUBLIC SHARE PUBLIC SHARE_FILE PUBLIC STARRED_ALBUM PUBLIC STARRED_ARTIST PUBLIC STARRED_MEDIA_FILE PUBLIC SYSTEM_AVATAR PUBLIC TRANSCODING PUBLIC TRANSCODING2 PUBLIC USER PUBLIC USER_RATING PUBLIC USER_ROLE PUBLIC USER_SETTINGS PUBLIC VERSION PUBLIC VIDEO_CONVERSION
で、テーブルの一覧を見れる。\d TABLE でテーブルの定義が見れる。
sql> \d MEDIA_FILE name datatype width no-nulls --------------------- --------- ----- -------- ID INTEGER 11 * PATH VARCHAR 32766 * FOLDER VARCHAR 32766 TYPE VARCHAR 32766 * FORMAT VARCHAR 32766 TITLE VARCHAR 32766 ALBUM VARCHAR 32766 ARTIST VARCHAR 32766 ALBUM_ARTIST VARCHAR 32766 DISC_NUMBER INTEGER 11 TRACK_NUMBER INTEGER 11 YEAR INTEGER 11 GENRE VARCHAR 32766 BIT_RATE INTEGER 11 VARIABLE_BIT_RATE BOOLEAN 5 * DURATION_SECONDS INTEGER 11 FILE_SIZE BIGINT 20 WIDTH INTEGER 11 HEIGHT INTEGER 11 COVER_ART_PATH VARCHAR 32766 PARENT_PATH VARCHAR 32766 PLAY_COUNT INTEGER 11 * LAST_PLAYED TIMESTAMP 6 COMMENT VARCHAR 32766 CREATED TIMESTAMP 6 * CHANGED TIMESTAMP 6 * LAST_SCANNED TIMESTAMP 6 * CHILDREN_LAST_UPDATED TIMESTAMP 6 * PRESENT BOOLEAN 5 * VERSION INTEGER 11 *
readlineなんて気の利いたものは無いので、操作はかなりストレスが溜まる。
あくまで予想、なのだが LAST_SCANNED や CHANGED 辺りがおかしくなっているのではと思い、幾つか調べてみる。
select top 10 * from media_file where artist = '[artist]' and type = 'MUSIC'; : 2013-02-12 01:49:48.0 2013-02-12 01:49:48.0 2016-12-22 00:09:44.479 1970-01-01 09:00:00.0 true 4
これは、CREATED以降のcolumnを調べてみたもの。壊れた時に調べてみればいいか。
parent_path には、ファイルのあるディレクトリが入っていた。
ちなみに、LIMITを使おうとしたら何故かエラーになった。しょうがなくTOPというもので代用している。マニュアルにLIMITはあるのだが。謎だ。