testdatura 发表于 2010-7-26 16:54:35

【急】QC数据库迁移后,无法登录

原先QC9.2安装在WINDOWS SERVER 2000 和SQL SERVER 2000平台上,现在想迁移到WINDOWS SERVER 2003和SQL SERVER 2005平台。操作步骤如下:
1.安装WINDOWS SERVER 2003和SQL SERVER 2005.
2.安装QC9.2和中文补丁。
3.备份老平台上的数据库,并还原到新的平台上。
4.COPY 老平台下的D:\Program Files\Mercury\Quality Center\repository目录下的所有目录和文件到新的平台下。

用管理员权限登录,报错如下:
iled to Login;
Failed to check authentication of user 'admin';
Cannot build directory item for key '' in SA Global Struct Dir;
Failed to fill table struct for table ADMIN in database qcsiteadmin_db@jdbc:mercury:sqlserver://zhiliangkz:1433(td);
Failed to determine structure of table 'ADMIN';
对象名'ADMIN' 无效。;

Stack Trace:
java.sql.SQLException: 对象名'ADMIN' 无效。
at com.mercury.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.mercury.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.mercury.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
at com.mercury.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
at com.mercury.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
at com.mercury.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
at com.mercury.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
at com.mercury.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
at com.mercury.jdbc.base.BaseStatement.commonExecute(Unknown Source)
at com.mercury.jdbc.base.BaseStatement.executeQueryInternal(Unknown Source)
at com.mercury.jdbc.base.BaseStatement.executeQuery(Unknown Source)
at com.mercury.optane.core.db.CDatabaseFieldsInfo.fillStructArray(CDatabaseFieldsInfo.java:302)
        wrapped in com.mercury.optane.core.db.CTdDbException: Failed to determine structure of table 'ADMIN'
at com.mercury.optane.core.db.CDatabaseFieldsInfo.fillStructArray(CDatabaseFieldsInfo.java:325)
at com.mercury.optane.core.db.CDatabaseFieldsInfo.obtainInfo(CDatabaseFieldsInfo.java:131)
        wrapped in com.mercury.optane.core.CTdException: Failed to fill table struct for table ADMIN in database qcsiteadmin_db@jdbc:mercury:sqlserver://zhiliangkz:1433(td)
at com.mercury.optane.core.db.CDatabaseFieldsInfo.obtainInfo(CDatabaseFieldsInfo.java:134)
at com.mercury.optane.core.db.CDatabaseFieldsInfo.<init>(CDatabaseFieldsInfo.java:67)
at com.mercury.optane.core.db.CAbsTablesStructDirectory.createDirectoryItem(CAbsTablesStructDirectory.java:44)
at com.mercury.optane.core.directory.CAbsDirectory.getDirectoryItem(CAbsDirectory.java:80)
        wrapped in com.mercury.optane.core.CTdException: Cannot build directory item for key '' in SA Global Struct Dir
at com.mercury.optane.core.directory.CAbsDirectory.getDirectoryItem(CAbsDirectory.java:86)
at com.mercury.optane.core.db.CAbsTablesStructDirectory.getDatabaseFieldsInfo(CAbsTablesStructDirectory.java:27)
at com.mercury.td.saserver.sautil.CSaDbSchemaProperties.getDatabaseFieldsInfo(CSaDbSchemaProperties.java:114)
at com.mercury.optane.core.db.CAbsDBContext.isComparisonCaseSensitive(CAbsDBContext.java:178)
at com.mercury.optane.core.db.utils.CDbGeneralFunctions.dbLowerComparison(CDbGeneralFunctions.java:530)
at com.mercury.td.saserver.sautil.CSaServerGeneralFunctions.saDbLowerComparison(CSaServerGeneralFunctions.java:428)
at com.mercury.td.saserver.api.logics.CTdUserLogic.authenticateUserAgainstTdDB(CTdUserLogic.java:1121)
        wrapped in com.mercury.optane.core.CTdException: Failed to check authentication of user 'admin'
at com.mercury.td.saserver.api.logics.CTdUserLogic.authenticateUserAgainstTdDB(CTdUserLogic.java:1145)
at com.mercury.td.saserver.api.logics.CTdUserLogic.checkUserPassword(CTdUserLogic.java:1062)
at com.mercury.td.saserver.api.logics.CSessionLogic.login(CSessionLogic.java:188)
at com.mercury.td.saserver.requests.Login.execute(Login.java:37)
at com.mercury.optane.core.web.RequestsDispatcher.execute(RequestsDispatcher.java:87)
        wrapped in com.mercury.optane.core.CTdException: Failed to Login
at com.mercury.optane.core.web.RequestsDispatcher.execute(RequestsDispatcher.java:93)
at com.mercury.optane.core.web.CAbsServlet.executeFunction(CAbsServlet.java:548)
at com.mercury.optane.core.web.CAbsServlet.processRequest(CAbsServlet.java:540)
at com.mercury.optane.core.web.CAbsServlet.doPost(CAbsServlet.java:423)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:153)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.valves.FastCommonAccessLogValve.invoke(FastCommonAccessLogValve.java:481)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:595)

其中,参考过论坛里的“qc服务器ip地址变了,无法打开”帖子,但是地址直接用机器名字访问,不是用ip地址。
哪位高手帮忙指点一下,很急呀!

testdatura 发表于 2010-7-26 17:42:37

在SQL SERVER 中运行:
1。sp_change_users_login 'report'
2。sp_addlogin 'admin'
3。sp_change_users_login 'update_one','TD','admin'
把数据库的用户名与登录名的关联了,但是,结果还是一样的!

testdatura 发表于 2010-7-27 13:08:21

找到原因了:
QC的qcsiteadmin_db数据库在WINDOWS SERVER 2003和SQL SERVER 2005平台上的表结构,跟在WINDOWS SERVER 2000 和SQL SERVER 2000平台上不一样。
少了一个表,还有几张表的少了字段!

testdatura 发表于 2010-7-29 14:47:47

这个问题基本搞定,不用强制还原,对应新旧表结构的不同,在新结构的基础上,把老结构的数据导入。
其中,新结构已有的数据保持不变。
页: [1]
查看完整版本: 【急】QC数据库迁移后,无法登录