#### **Ò»¡¢Êý¾Ý¿â°æ±¾²»¼æÈݵĺËÐıíÏÖÓëΣº¦**
µ±´«Ææ·þÎñ¶Ë³öÏÖ"DB°æ±¾²»¶Ô"µÄ´íÎóÌáʾʱ£¬Í¨³£°éËæÒÔÏÂÏÖÏó£º
- **·þÎñ¶ËÆô¶¯Ê§°Ü**£ºM2ServerÆô¶¯Ê±Ìáʾ"Êý¾Ý¿â°æ±¾²»Æ¥Åä"»ò"ÎÞ·¨¶ÁÈ¡DBÎļþ"£¨³£¼ûÓÚGOM/GEEÒýÇæ£©
- **×°±¸/½ÇÉ«Êý¾ÝÒì³£**£ºÎïÆ·ÊôÐÔ´íÂÒ¡¢NPC¶Ô»°ÂÒÂ룬»òÍæ¼ÒÊý¾ÝÎÞ·¨Õý³£¼ÓÔØ
- **¹¦ÄÜÄ£¿éʧЧ**£ºÈçÈÎÎñϵͳ¡¢½»Ò×ϵͳÒòÊý¾Ý¿â×Ö¶Îȱʧ¶ø±ÀÀ£
**Σº¦²ã¼¶**£º
1. ³õ¼¶·çÏÕ£ºÐ¹¦ÄÜÎÞ·¨ÆôÓã¨ÈçÀ©Õ¹±³°ü¡¢×øÆïϵͳ£©
2. Öм¶·çÏÕ£ºÍæ¼ÒÊý¾Ý¶ªÊ§»òËð»µ
3. ¸ß¼¶·çÏÕ£ºÈ«·þ±ÀÀ£µ¼ÖÂÍ£·þ
---
#### **¶þ¡¢°æ±¾Õï¶ÏËIJ½·¨**
1. **ÒýÇæÓëÊý¾Ý¿âÓ³Éä¹ØÏµÈ·ÈÏ**
- **GOMÒýÇæ**£ºÐèÆ¥ÅäAccess 2003¸ñʽÊý¾Ý¿â£¨HeroDB.mdb£©£¬Ð°æ¿ÉÄÜÒªÇóSQLite
- **GEEÒýÇæ**£ºÖ§³ÖSQL Server 2012+»òMySQL 5.7+£¬×¢Òâ×ֶ㤶ÈÏÞÖÆ
- **´«Í³ÒýÇæ**£ºÒÀÀµDBC2000¹¤¾ß¹ÜÀíDBÎļþ£¬±ØÐëʹÓÃANSI±àÂëµÄParadoxÊý¾Ý¿â
2. **Îļþ½á¹¹Ð£Ñé**
- ʹÓÃDB Commander¼ì²éDBÎļþÍ·ÐÅÏ¢£º
```sql
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'Magic' -- ÑéÖ¤ºËÐıí½á¹¹
```
- ¶Ô±È·þÎñ¶ËÎĵµÖеÄDB°æ±¾ÒªÇó£¨ÈçHeroDB°æ±¾ºÅÐè≥2.15£©
3. **ϵͳ»·¾³¼ì²â**
- 32λϵͳÐè°²×°Jet 4.0×é¼þÖ§³Ö¾É°æAccess
- 64λϵͳÔËÐÐDBC2000±ØÐëÅäÖÃODBCµÄ32λÊý¾ÝÔ´
4. **´íÎóÈÕÖ¾·ÖÎö**
- ²é¿´M2Server.logÖеĹؼü±¨´í£º
> "[´íÎó] DB°æ±¾Ð£Ñéʧ°Ü£ºµ±Ç°°æ±¾(118), ÐèÒª°æ±¾(121)"
---
#### **Èý¡¢ÁùÖÖ°æ±¾ÊÊÅä·½°¸Ïê½â**
**·½°¸1£ºÊý¾Ý¿â½µ¼¶/Éý¼¶¹¤¾ßÁ´**
- **ʹÓô«ÆæÊý¾Ý¿â±à¼Æ÷**£º
1. µ¼Èë¾É°æDBÎļþʱ¹´Ñ¡"×Ô¶¯×ª»»×Ö¶ÎÀàÐÍ"
2. µ¼³öʱѡÔñÄ¿±êÒýÇæ¸ñʽ£¨ÈçGEEÒýÇæ×¨ÓÃSQLiteÄ£°å£©
- *×¢£ºÍòÓÎ±à¼Æ÷ÔÚ´¦Àív2.3+°æ±¾Ê±´æÔÚ×ֶνضϷçÏÕ£¬ÍƼöʹÓÃа湤¾ß*
**·½°¸2£ºSQL Server¼æÈݼ¶±ðµ÷Õû**
- Õë¶ÔSQL Server°æ±¾³åÍ»£º
```sql
EXEC sp_dbcmptlevel 'HeroDB', 110; -- ÉèÖÃΪSQL Server 2012¼æÈÝģʽ
```
Ðèͬ²½Ð޸ķþÎñ¶ËÅäÖÃÎļþµÄÁ¬½Ó×Ö·û´®£º
```ini
[Database]
Provider=SQLOLEDB;Data Source=127.0.0.1;Initial Catalog=HeroDB;User ID=sa;Password=123456;
```
**·½°¸3£ºAccessÊý¾Ý¿â°æ±¾Ç¨ÒÆ**
- **·Ö½×¶Î²Ù×÷Á÷³Ì**£º
1. ʹÓÃMicrosoft Access 2016´ò¿ªHeroDB.mdb
2. Îļþ > Áí´æÎª > Access 2002-2003¸ñʽ£¨*.mdb£©
3. ÔËÐÐCompact and Repair Database¹¤¾ßÐÞ¸´Ë÷Òý
**·½°¸4£ºMySQL°æ±¾Ëø¶¨¼¼Êõ**
- ͨ¹ýDockerÈÝÆ÷¹Ì¶¨Êý¾Ý¿â°æ±¾£º
```dockerfile
FROM mysql:5.7
COPY my.cnf /etc/mysql/conf.d/
RUN chmod 644 /etc/mysql/conf.d/my.cnf
```
ÔÚmy.cnfÖÐÉèÖãº
```ini
[mysqld]
explicit_defaults_for_timestamp = ON # ½â¾öGEEÒýÇæÊ±¼ä´Á±¨´í
```
**·½°¸5£º¿ç°æ±¾Êý¾ÝÇ¨ÒÆ²ßÂÔ**
- **ʹÓð¢ÀïÔÆDTS¹¤¾ß**£º
1. ÅäÖÃÈ«Á¿+ÔöÁ¿Ç¨ÒÆÈÎÎñ
2. ÉèÖùýÂËÌõ¼þ£¨Èç½öÇ¨ÒÆºËÐÄ±í£ºMonster¡¢Magic¡¢Items£©
3. ¿ªÆôSchema Convert¹¦ÄÜ×Ô¶¯×ª»»×Ö¶ÎÀàÐÍ
**·½°¸6£ºÊý¾Ý¿âÒýÇæÌæ»»·½°¸**
- ½«AccessÊý¾Ý¿âÇ¨ÒÆÖÁSQLite£º
```powershell
Import-Module SqlServer
ConvertTo-SQLite -Source "Microsoft.ACE.OLEDB.12.0" -DataSource "D:\mirserver\mud2\db"
```
ÐèÐÞ¸ÄGOMÒýÇæµÄÊý¾Ý¿âÁ¬½ÓÅäÖÃ
---
#### **ËÄ¡¢°æ±¾³åͻԤ·ÀÌåϵ**
1. **»·¾³¸ôÀë·½°¸**
- ʹÓÃVMware ESXi´´½¨¶ÀÁ¢ÐéÄâ»ú£º
- Windows Server 2008 R2£¨ÔËÐÐDBC2000£©
- Windows Server 2019£¨ÔËÐÐSQL Server 2019£©
2. **°æ±¾¼à¿ØÔ¤¾¯**
- ²¿ÊðPrometheus+AlertManager¼à¿ØÌåϵ£º
```yaml
- alert: DB_Version_Mismatch
expr: db_version{instance="m2server"} != on() target_version
for: 5m
```
3. **×Ô¶¯»¯²âÊÔÁ÷Ë®Ïß**
- ÔÚCI/CDÁ÷³ÌÖмÓÈ룺
- Êý¾Ý¿â°æ±¾Ð£Ñé²âÊÔ£¨DBUnit¿ò¼Ü£©
- ×Ö¶ÎÀàÐͼæÈÝÐÔ²âÊÔ£¨Apache JMeter£©
---
#### **Îå¡¢ÌØÊⳡ¾°½â¾ö·½°¸**
**³¡¾°1£ºGOMÒýÇæSQLite±¨´í**
- ÏÖÏó£ºÆô¶¯Ê±Ìáʾ"SQLite version 3.8.2 required"
- ½â¾ö£º
1. ÏÂÔØsqlite3.dllÌæ»»System32Ŀ¼ÏµÄÎļþ
2. ×¢²áCOM×é¼þ£º
```reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\COM3]
"SQLiteVersion"="3.8.2"
```
**³¡¾°2£ºÎ¢¶Ë¼Ü¹¹°æ±¾³åÍ»**
- µ±Î¢¶Ë·þÎñÆ÷ʹÓø߰汾DB¶øÖ÷·þΪµÍ°æ±¾Ê±£º
1. ÔÚÖ÷·þ°²×°SQL Server Replication·þÎñ
2. ÅäÖõ¥ÏòÊÂÎñ¸´ÖÆ£¬ÉèÖüæÈݼ¶±ðΪ"90 (2005)"
---
#### **Áù¡¢ÐÐÒµ×î¼Ñʵ¼ù**
1. **°æ±¾¼æÈݾØÕóά»¤**£¨Ê¾Àý£©£º
| ÒýÇæÀàÐÍ | Ö§³ÖDB°æ±¾ | ΣÏÕ°æ±¾ |
|----------|---------------------|-------------------|
| GOM1108 | SQLite 3.8.2-3.15.1 | SQLite ≥3.20.0 |
| GEE2022 | MySQL 5.7.28-8.0.19 | MySQL ≥8.0.20 |
| BLUEÒýÇæ | DBC2000+Access97 | Access ≥2007 |
2. **¿ç°æ±¾µ÷ÊÔ¼¼ÇÉ**
- ÔÚWiresharkÖйýÂËTDSÐÒé°ü£¬·ÖÎö×Ö¶ÎУÑé¹ý³Ì£º
```
tds.type == 0x01 && tds.status == 0x81
```
¿É¶¨Î»°æ±¾Ð£Ñéʧ°ÜµÄ¾ßÌå×Ö¶Î
---
ͨ¹ýϵͳÐÔʵʩÉÏÊö·½°¸£¬¿É³¹µ×½â¾ö´«Ææ·þÎñ¶ËÊý¾Ý¿â°æ±¾²»¼æÈÝÎÊÌâ¡£½¨ÒéÿÖÜÖ´ÐÐÒ»´Î`DBCC CHECKDB`ÑéÖ¤Êý¾ÝÍêÕûÐÔ£¬²¢½¨Á¢°æ±¾±ä¸üÈÕÖ¾»úÖÆ¡£¶ÔÓÚ¸´ÔÓ»·¾³£¬ÍƼö²ÉÓÃÌÚÑ¶ÔÆDTS»ò°¢ÀïÔÆADB½øÐÐ¿ç°æ±¾Êý¾Ýͬ²½¡£
µ±´«Ææ·þÎñ¶Ë³öÏÖ"DB°æ±¾²»¶Ô"µÄ´íÎóÌáʾʱ£¬Í¨³£°éËæÒÔÏÂÏÖÏó£º
- **·þÎñ¶ËÆô¶¯Ê§°Ü**£ºM2ServerÆô¶¯Ê±Ìáʾ"Êý¾Ý¿â°æ±¾²»Æ¥Åä"»ò"ÎÞ·¨¶ÁÈ¡DBÎļþ"£¨³£¼ûÓÚGOM/GEEÒýÇæ£©
- **×°±¸/½ÇÉ«Êý¾ÝÒì³£**£ºÎïÆ·ÊôÐÔ´íÂÒ¡¢NPC¶Ô»°ÂÒÂ룬»òÍæ¼ÒÊý¾ÝÎÞ·¨Õý³£¼ÓÔØ
- **¹¦ÄÜÄ£¿éʧЧ**£ºÈçÈÎÎñϵͳ¡¢½»Ò×ϵͳÒòÊý¾Ý¿â×Ö¶Îȱʧ¶ø±ÀÀ£
**Σº¦²ã¼¶**£º
1. ³õ¼¶·çÏÕ£ºÐ¹¦ÄÜÎÞ·¨ÆôÓã¨ÈçÀ©Õ¹±³°ü¡¢×øÆïϵͳ£©
2. Öм¶·çÏÕ£ºÍæ¼ÒÊý¾Ý¶ªÊ§»òËð»µ
3. ¸ß¼¶·çÏÕ£ºÈ«·þ±ÀÀ£µ¼ÖÂÍ£·þ
---
#### **¶þ¡¢°æ±¾Õï¶ÏËIJ½·¨**
1. **ÒýÇæÓëÊý¾Ý¿âÓ³Éä¹ØÏµÈ·ÈÏ**
- **GOMÒýÇæ**£ºÐèÆ¥ÅäAccess 2003¸ñʽÊý¾Ý¿â£¨HeroDB.mdb£©£¬Ð°æ¿ÉÄÜÒªÇóSQLite
- **GEEÒýÇæ**£ºÖ§³ÖSQL Server 2012+»òMySQL 5.7+£¬×¢Òâ×ֶ㤶ÈÏÞÖÆ
- **´«Í³ÒýÇæ**£ºÒÀÀµDBC2000¹¤¾ß¹ÜÀíDBÎļþ£¬±ØÐëʹÓÃANSI±àÂëµÄParadoxÊý¾Ý¿â
2. **Îļþ½á¹¹Ð£Ñé**
- ʹÓÃDB Commander¼ì²éDBÎļþÍ·ÐÅÏ¢£º
```sql
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'Magic' -- ÑéÖ¤ºËÐıí½á¹¹
```
- ¶Ô±È·þÎñ¶ËÎĵµÖеÄDB°æ±¾ÒªÇó£¨ÈçHeroDB°æ±¾ºÅÐè≥2.15£©
3. **ϵͳ»·¾³¼ì²â**
- 32λϵͳÐè°²×°Jet 4.0×é¼þÖ§³Ö¾É°æAccess
- 64λϵͳÔËÐÐDBC2000±ØÐëÅäÖÃODBCµÄ32λÊý¾ÝÔ´
4. **´íÎóÈÕÖ¾·ÖÎö**
- ²é¿´M2Server.logÖеĹؼü±¨´í£º
> "[´íÎó] DB°æ±¾Ð£Ñéʧ°Ü£ºµ±Ç°°æ±¾(118), ÐèÒª°æ±¾(121)"
---
#### **Èý¡¢ÁùÖÖ°æ±¾ÊÊÅä·½°¸Ïê½â**
**·½°¸1£ºÊý¾Ý¿â½µ¼¶/Éý¼¶¹¤¾ßÁ´**
- **ʹÓô«ÆæÊý¾Ý¿â±à¼Æ÷**£º
1. µ¼Èë¾É°æDBÎļþʱ¹´Ñ¡"×Ô¶¯×ª»»×Ö¶ÎÀàÐÍ"
2. µ¼³öʱѡÔñÄ¿±êÒýÇæ¸ñʽ£¨ÈçGEEÒýÇæ×¨ÓÃSQLiteÄ£°å£©
- *×¢£ºÍòÓÎ±à¼Æ÷ÔÚ´¦Àív2.3+°æ±¾Ê±´æÔÚ×ֶνضϷçÏÕ£¬ÍƼöʹÓÃа湤¾ß*
**·½°¸2£ºSQL Server¼æÈݼ¶±ðµ÷Õû**
- Õë¶ÔSQL Server°æ±¾³åÍ»£º
```sql
EXEC sp_dbcmptlevel 'HeroDB', 110; -- ÉèÖÃΪSQL Server 2012¼æÈÝģʽ
```
Ðèͬ²½Ð޸ķþÎñ¶ËÅäÖÃÎļþµÄÁ¬½Ó×Ö·û´®£º
```ini
[Database]
Provider=SQLOLEDB;Data Source=127.0.0.1;Initial Catalog=HeroDB;User ID=sa;Password=123456;
```
**·½°¸3£ºAccessÊý¾Ý¿â°æ±¾Ç¨ÒÆ**
- **·Ö½×¶Î²Ù×÷Á÷³Ì**£º
1. ʹÓÃMicrosoft Access 2016´ò¿ªHeroDB.mdb
2. Îļþ > Áí´æÎª > Access 2002-2003¸ñʽ£¨*.mdb£©
3. ÔËÐÐCompact and Repair Database¹¤¾ßÐÞ¸´Ë÷Òý
**·½°¸4£ºMySQL°æ±¾Ëø¶¨¼¼Êõ**
- ͨ¹ýDockerÈÝÆ÷¹Ì¶¨Êý¾Ý¿â°æ±¾£º
```dockerfile
FROM mysql:5.7
COPY my.cnf /etc/mysql/conf.d/
RUN chmod 644 /etc/mysql/conf.d/my.cnf
```
ÔÚmy.cnfÖÐÉèÖãº
```ini
[mysqld]
explicit_defaults_for_timestamp = ON # ½â¾öGEEÒýÇæÊ±¼ä´Á±¨´í
```
**·½°¸5£º¿ç°æ±¾Êý¾ÝÇ¨ÒÆ²ßÂÔ**
- **ʹÓð¢ÀïÔÆDTS¹¤¾ß**£º
1. ÅäÖÃÈ«Á¿+ÔöÁ¿Ç¨ÒÆÈÎÎñ
2. ÉèÖùýÂËÌõ¼þ£¨Èç½öÇ¨ÒÆºËÐÄ±í£ºMonster¡¢Magic¡¢Items£©
3. ¿ªÆôSchema Convert¹¦ÄÜ×Ô¶¯×ª»»×Ö¶ÎÀàÐÍ
**·½°¸6£ºÊý¾Ý¿âÒýÇæÌæ»»·½°¸**
- ½«AccessÊý¾Ý¿âÇ¨ÒÆÖÁSQLite£º
```powershell
Import-Module SqlServer
ConvertTo-SQLite -Source "Microsoft.ACE.OLEDB.12.0" -DataSource "D:\mirserver\mud2\db"
```
ÐèÐÞ¸ÄGOMÒýÇæµÄÊý¾Ý¿âÁ¬½ÓÅäÖÃ
---
#### **ËÄ¡¢°æ±¾³åͻԤ·ÀÌåϵ**
1. **»·¾³¸ôÀë·½°¸**
- ʹÓÃVMware ESXi´´½¨¶ÀÁ¢ÐéÄâ»ú£º
- Windows Server 2008 R2£¨ÔËÐÐDBC2000£©
- Windows Server 2019£¨ÔËÐÐSQL Server 2019£©
2. **°æ±¾¼à¿ØÔ¤¾¯**
- ²¿ÊðPrometheus+AlertManager¼à¿ØÌåϵ£º
```yaml
- alert: DB_Version_Mismatch
expr: db_version{instance="m2server"} != on() target_version
for: 5m
```
3. **×Ô¶¯»¯²âÊÔÁ÷Ë®Ïß**
- ÔÚCI/CDÁ÷³ÌÖмÓÈ룺
- Êý¾Ý¿â°æ±¾Ð£Ñé²âÊÔ£¨DBUnit¿ò¼Ü£©
- ×Ö¶ÎÀàÐͼæÈÝÐÔ²âÊÔ£¨Apache JMeter£©
---
#### **Îå¡¢ÌØÊⳡ¾°½â¾ö·½°¸**
**³¡¾°1£ºGOMÒýÇæSQLite±¨´í**
- ÏÖÏó£ºÆô¶¯Ê±Ìáʾ"SQLite version 3.8.2 required"
- ½â¾ö£º
1. ÏÂÔØsqlite3.dllÌæ»»System32Ŀ¼ÏµÄÎļþ
2. ×¢²áCOM×é¼þ£º
```reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\COM3]
"SQLiteVersion"="3.8.2"
```
**³¡¾°2£ºÎ¢¶Ë¼Ü¹¹°æ±¾³åÍ»**
- µ±Î¢¶Ë·þÎñÆ÷ʹÓø߰汾DB¶øÖ÷·þΪµÍ°æ±¾Ê±£º
1. ÔÚÖ÷·þ°²×°SQL Server Replication·þÎñ
2. ÅäÖõ¥ÏòÊÂÎñ¸´ÖÆ£¬ÉèÖüæÈݼ¶±ðΪ"90 (2005)"
---
#### **Áù¡¢ÐÐÒµ×î¼Ñʵ¼ù**
1. **°æ±¾¼æÈݾØÕóά»¤**£¨Ê¾Àý£©£º
| ÒýÇæÀàÐÍ | Ö§³ÖDB°æ±¾ | ΣÏÕ°æ±¾ |
|----------|---------------------|-------------------|
| GOM1108 | SQLite 3.8.2-3.15.1 | SQLite ≥3.20.0 |
| GEE2022 | MySQL 5.7.28-8.0.19 | MySQL ≥8.0.20 |
| BLUEÒýÇæ | DBC2000+Access97 | Access ≥2007 |
2. **¿ç°æ±¾µ÷ÊÔ¼¼ÇÉ**
- ÔÚWiresharkÖйýÂËTDSÐÒé°ü£¬·ÖÎö×Ö¶ÎУÑé¹ý³Ì£º
```
tds.type == 0x01 && tds.status == 0x81
```
¿É¶¨Î»°æ±¾Ð£Ñéʧ°ÜµÄ¾ßÌå×Ö¶Î
---
ͨ¹ýϵͳÐÔʵʩÉÏÊö·½°¸£¬¿É³¹µ×½â¾ö´«Ææ·þÎñ¶ËÊý¾Ý¿â°æ±¾²»¼æÈÝÎÊÌâ¡£½¨ÒéÿÖÜÖ´ÐÐÒ»´Î`DBCC CHECKDB`ÑéÖ¤Êý¾ÝÍêÕûÐÔ£¬²¢½¨Á¢°æ±¾±ä¸üÈÕÖ¾»úÖÆ¡£¶ÔÓÚ¸´ÔÓ»·¾³£¬ÍƼö²ÉÓÃÌÚÑ¶ÔÆDTS»ò°¢ÀïÔÆADB½øÐÐ¿ç°æ±¾Êý¾Ýͬ²½¡£

