传奇世界单机启动提示no such table StdItems物品数据表缺失修复教程

来源: 作者: 点击:
启动服务端出现正在读取配置信息正在加载物品数据库之后弹出服务器启动异常,提示no such table StdItems,执行语句为select * from StdItems order by idx,这个提示代表当前数据库内不存在StdItems这张物品数据表,引擎读取物品数据时找不到目标表,直接终止启动流程,按照下面步骤依次排查处理。

先区分版本使用的数据库类型,传奇世界单机常见分为Access、Sqlite和Mysql三种存储方式,这条报错语句是sqlite的报错格式,说明当前版本采用sqlite数据库存储物品数据,并不是传统DBC2000数据库,不要继续按照HeroDB别名的方式去配置DBC,方向错误会一直无法解决。找到服务端目录下的数据库文件,后缀一般是db或者sqlite,部分版本放在DBServer文件夹内部,文件名常见为GameDB.db、Account.db或者StdItems.db,先确认这个数据库文件是否存在,如果文件被误删、解压不全、压缩包损坏,就不会有数据表载体,直接出现表不存在提示。

数据库文件存在的情况下,检查DBServer配置,打开DBServer程序对应的ini配置文件,找到数据库连接路径配置项,核对指向的数据库文件路径,路径不能带有中文、空格和特殊字符,路径写错会让程序打开一个空白的全新库文件,空白库里面没有任何数据表,自然找不到StdItems。修改路径之后保存ini,完全关闭DBServer和GameCenter,重新启动整套服务端,让程序读取正确的库文件。

拿到干净原版数据库文件进行替换测试是很直接的办法,备份当前出错的db文件,从原版资源包里面提取初始空白库文件放入对应目录,原版初始库自带StdItems、Items、Guild这类基础数据表,替换完成再启动。如果原版库文件替换之后可以正常加载物品库,说明原有库文件已经损坏,数据表结构丢失,这种损坏大多来自异常关闭进程、磁盘读写报错、杀毒软件隔离删除库内表结构。

如果资源包里面没有现成可用的初始库,就需要手动重建StdItems数据表,使用sqlite可视化工具打开db文件,执行建表语句,字段需要匹配传奇世界服务端要求的字段结构,包含idx、name、stdmode、shape、weight、anicount、source、reserved、looks、price、stock、need、needlevel等一系列对应字段,字段类型和字段顺序不能随意改动,字段和引擎预期不一致,就算表名创建正确,后续加载也会报字段不匹配。建表完成之后,还要导入物品基础数据,导入配套的物品数据sql脚本,只建空表没有数据,数据库可以打开但是物品信息为空,进游戏之后物品图标、属性全部异常。

检查DBServer程序版本和数据库文件是否配套,高版本DBServer无法读取低版本导出的库,反过来低版本程序打开高版本生成的库,也会出现识别不到数据表的情况,程序和数据库文件不匹配是很容易忽略的点,要使用版本自带配套的DBServer程序,不要随意混用别的版本数据库组件。

查看安全软件隔离记录,安全软件会把db数据库文件判定为风险文件,隔离或者删除库内索引结构,文件看着还在,内部数据表已经损坏,恢复隔离文件之后,最好直接替换干净库文件,隔离恢复后的文件结构大多已经受损。同时检查文件权限,数据库文件设置为只读状态时,部分程序打开之后无法读取内部表结构,右键取消只读属性。

还有一种情况是配置文件里面数据库类型写错,版本本身是sqlite库,但是ini里面配置成access模式,程序打开数据库的驱动切换错误,解析库文件失败,识别不出里面的StdItems表,打开DBServer.ini,找到DbType参数,对应sqlite版本填写正确类型标识。

完成替换或者重建数据表操作之后,不要直接点控制器重启,先全部关闭GameCenter、DBServer、LoginSrv、LoginGate所有窗口,等待进程完全退出,再按顺序重新启动,先启动DBServer观察日志,看日志提示成功加载StdItems表,再继续启动其他组件。启动成功之后进入游戏,查看物品面板、NPC售卖物品、怪物掉落物品是否正常读取,没有缺失和属性错乱,代表修复完成。如果更换原版库之后依旧报同一个错误,继续核对ini内数据库文件名、路径、数据库类型三项参数,这三项是sqlite版本触发该报错最高发的原因。