久々に Community Server をアップグレードしました。
元が Community Server 2007.x(細かいことは憶えていない) + SQL Server 2000。
新しい環境はCommunity Server 2008.5 SP2 + SQL Server 2005。
かめたろさんのブログ記事と原水さんの Wiki 記事を参考にしました。
かめたろさんの記事からは SQL Server のバージョンに注意という大きなヒントを頂きました。
が、すんなりとはいかず、アップグレードの処理中にエラーが発生しました。
2009/05/28 19:20:42 -- Executing sproc cs_Wiki_GetPageRevision.prc
2009/05/28 19:20:42 -- EXCEPTION: 列名 'Tags' が無効です。
場所 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
場所 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
場所 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
場所 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
場所 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async)
場所 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
場所 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
場所 CommunityServer.Upgrader.Part4.ExecuteSqlNonQuery(String sql, SqlConnection connection)
場所 CommunityServer.Upgrader.Part4.UpdateSprocs()
2009/05/28 19:39:19 -- Executing sproc cs_Points_CalculateForUser.PRC
2009/05/28 19:39:19 -- EXCEPTION: 列名 'RevisionNumber' が無効です。
列名 'RevisionNumber' が無効です。
場所 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
場所 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
場所 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
場所 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
場所 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async)
場所 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
場所 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
場所 CommunityServer.Upgrader.Part4.ExecuteSqlNonQuery(String sql, SqlConnection connection)
場所 CommunityServer.Upgrader.Part4.UpdateSprocs()
エラーが発生したストアドプロシージャを調べてみると、例外メッセージにある通り、稼働中の DB には存在しない列を参照しているようでした。
結局、問題の発生したテーブルを手動で削除した後、スキーマの準備ツールでテーブルを作成し直すことで解決しました。