• Facebookで共有する
  • Twitterで共有する

データベースのアップグレードに失敗する時は

ぴろり上西
2011年05月13日

 特にプラグインなどの開発中に出くわすことがあって、一般のユーザが普通に使っている分には、おそらく目にすることはないと思います。プラグインのスキーマバージョンが変更されたりすると、データベースのアップグレード処理が走ります。この時、以下のようなエラーが表示されてアップグレードが完了しない、ということがあります。

アップグレード中にエラーが発生しました [Microsoft][SQL Server Native Client X.X][SQL Server]データベースに 'mt_log_upgrade' という名前のオブジェクトが既に存在します。 at C:\vhost\mta\addons\Enterprise.pack\lib/MT/ObjectDriver/Driver/DBD/MSSQLServer.pm line 156.

 これはプラグインやMTの論理エラーではなく、データベースに一時テーブルが残ってしまうことが原因です。前回のアップグレード処理の最中に、無理矢理処理を中断するなどすると、mt_xxx_upgrade という一時テーブルが残ってしまい、次のアップグレード処理時に、同名の一時テーブルを作成しようとしてエラーになることが理由です。溜まりに溜まったログなどの巨大なテーブルがある場合に発生しやすいようです。論理バグって感じですかね。
 このような時には、SQL サーバに直接ログインして、問題の一時テーブル(mt_xxx_upgrade)を DROP TABLE してやれば解決します。