活动公告

系统通知
05-18 21:22
系统通知
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,资源失效请在帖子内回复要求补档,会尽快处理!
10-23 09:31

Oracle数据库备份与恢复实战指南 从基础到进阶的完整解决方案与常见问题解析 专家经验分享与故障排除技巧详解

SunJu_FaceMall

3万

主题

2860

科技点

3万

积分

白金月票

碾压王

积分
32872

塔罗立华奏

<font color=白金月票" /> 发表于 2025-9-2 19:10:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引言

Oracle数据库作为企业级应用中最常用的数据库管理系统之一,其数据的安全性和可靠性至关重要。数据库备份与恢复是保障数据安全的核心手段,也是数据库管理员(DBA)必须掌握的关键技能。本文将从基础概念入手,逐步深入到高级技术,全面介绍Oracle数据库备份与恢复的实战知识,帮助读者建立完整的知识体系,并能在实际工作中灵活应用。

一、Oracle数据库备份基础

1. 备份的基本概念

数据库备份是指将数据库中的数据复制到安全存储介质的过程,目的是在数据丢失或损坏时能够恢复。Oracle数据库备份主要分为物理备份和逻辑备份两大类。

物理备份:复制数据库的物理文件,包括数据文件、控制文件、重做日志文件等。物理备份又分为冷备份和热备份。

• 冷备份:在数据库关闭状态下进行的备份,也称为一致性备份。
• 热备份:在数据库运行状态下进行的备份,需要数据库处于归档模式。

逻辑备份:使用Oracle提供的工具(如exp/imp、expdp/impdp)导出数据库对象和数据,生成二进制或文本文件。

2. RMAN基础

RMAN(Recovery Manager)是Oracle提供的专用备份恢复工具,功能强大且易于使用。RMAN可以备份整个数据库、表空间、数据文件、控制文件、归档日志等。
  1. -- 连接到RMAN
  2. rman target /
  3. -- 注册数据库
  4. RMAN> REGISTER DATABASE;
  5. -- 配置备份参数
  6. RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
  7. RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
  8. RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/%U';
  9. -- 执行完整备份
  10. RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
  11. -- 执行增量备份
  12. RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE;
复制代码

3. 备份策略制定

制定合理的备份策略是保障数据安全的关键。备份策略应考虑以下因素:

• 恢复时间目标(RTO):系统可接受的最大停机时间
• 恢复点目标(RPO):可接受的最大数据丢失量
• 存储空间:备份文件所需的存储空间
• 系统负载:备份操作对系统性能的影响

常见的备份策略包括:

• 完整备份策略:定期执行完整备份,如每周一次
• 增量备份策略:在完整备份基础上,定期执行增量备份
• 差异备份策略:在完整备份基础上,执行基于上次完整备份的差异备份

二、Oracle数据库恢复基础

1. 恢复的基本概念

数据库恢复是指将数据库恢复到某个时间点或某个SCN(System Change Number)的过程。Oracle数据库恢复主要分为完全恢复和不完全恢复。

完全恢复:将数据库恢复到最新状态,不丢失任何已提交的数据。

不完全恢复:将数据库恢复到过去的某个时间点,会丢失该时间点之后的数据。

2. 恢复原理和流程

Oracle数据库恢复基于重做日志(Redo Log)和归档日志(Archive Log)实现。恢复的基本流程如下:

1. 确定恢复类型(完全恢复或不完全恢复)
2. 准备必要的备份文件和归档日志
3. 启动数据库到MOUNT状态
4. 执行恢复操作
5. 打开数据库
  1. -- 完全恢复
  2. RMAN> STARTUP MOUNT;
  3. RMAN> RESTORE DATABASE;
  4. RMAN> RECOVER DATABASE;
  5. RMAN> ALTER DATABASE OPEN;
  6. -- 不完全恢复到特定时间点
  7. RMAN> STARTUP MOUNT;
  8. RMAN> RESTORE DATABASE UNTIL TIME "TO_DATE('2023-06-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS')";
  9. RMAN> RECOVER DATABASE UNTIL TIME "TO_DATE('2023-06-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS')";
  10. RMAN> ALTER DATABASE OPEN RESETLOGS;
  11. -- 恢复特定表空间
  12. RMAN> SQL "ALTER TABLESPACE users OFFLINE";
  13. RMAN> RESTORE TABLESPACE users;
  14. RMAN> RECOVER TABLESPACE users;
  15. RMAN> SQL "ALTER TABLESPACE users ONLINE";
复制代码

三、进阶备份技术

1. RMAN高级功能

RMAN提供了许多高级功能,可以优化备份性能和灵活性。

块更改跟踪功能可以记录自上次备份以来更改的数据块,从而加速增量备份。
  1. -- 启用块更改跟踪
  2. SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/oracle/block_change_tracking.f';
  3. -- 查看块更改跟踪状态
  4. SQL> SELECT filename, status FROM v$block_change_tracking;
复制代码

RMAN可以跳过未更改的数据块,优化备份性能。
  1. -- 启用备份优化
  2. RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
  3. -- 执行优化的备份
  4. RMAN> BACKUP DATABASE SKIP INACCESSIBLE SKIP OFFLINE;
复制代码

2. 增量备份和差异备份

增量备份只备份自上次备份以来更改的数据块,可以大大减少备份时间和存储空间。
  1. -- 0级增量备份(完整备份)
  2. RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE;
  3. -- 1级增量备份(基于上次0级或1级备份)
  4. RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE;
  5. -- 累积增量备份(基于上次0级备份)
  6. RMAN> BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE;
复制代码
  1. -- 执行差异备份
  2. RMAN> BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG 'incr_backup' DATABASE;
复制代码

3. 备份压缩和加密

为了节省存储空间和提高安全性,RMAN支持备份压缩和加密。
  1. -- 配置二进制压缩
  2. RMAN> CONFIGURE COMPRESSION ALGORITHM 'BZIP2';
  3. RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO COMPRESSED BACKUPSET;
  4. -- 执行压缩备份
  5. RMAN> BACKUP AS COMPRESSED BACKUPSET DATABASE;
复制代码
  1. -- 配置加密
  2. RMAN> CONFIGURE ENCRYPTION FOR DATABASE ON;
  3. RMAN> CONFIGURE ENCRYPTION ALGORITHM 'AES256';
  4. RMAN> SET ENCRYPTION ON IDENTIFIED BY 'my_password';
  5. -- 执行加密备份
  6. RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
复制代码

四、进阶恢复技术

1. 时间点恢复

时间点恢复(Point-in-Time Recovery, PITR)是将数据库恢复到过去特定时间点的技术,常用于逻辑错误或人为失误导致的数据损坏。
  1. -- 使用RMAN执行时间点恢复
  2. RMAN> RUN {
  3.   SET UNTIL TIME "TO_DATE('2023-06-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS')";
  4.   RESTORE DATABASE;
  5.   RECOVER DATABASE;
  6.   ALTER DATABASE OPEN RESETLOGS;
  7. }
复制代码
  1. -- 查询特定时间点的SCN
  2. SQL> SELECT TIMESTAMP_TO_SCN(TO_TIMESTAMP('2023-06-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS')) AS scn FROM DUAL;
  3. -- 使用SCN进行恢复
  4. RMAN> RUN {
  5.   SET UNTIL SCN 1234567;
  6.   RESTORE DATABASE;
  7.   RECOVER DATABASE;
  8.   ALTER DATABASE OPEN RESETLOGS;
  9. }
复制代码

2. 表空间恢复

表空间恢复允许只恢复特定的表空间,而不影响整个数据库,适用于局部数据损坏的情况。
  1. -- 恢复特定表空间
  2. RMAN> SQL "ALTER TABLESPACE users OFFLINE IMMEDIATE";
  3. RMAN> RESTORE TABLESPACE users;
  4. RMAN> RECOVER TABLESPACE users;
  5. RMAN> SQL "ALTER TABLESPACE users ONLINE";
复制代码

3. 块介质恢复

块介质恢复(Block Media Recovery, BMR)可以恢复损坏的数据块,而不需要恢复整个数据文件。
  1. -- 使用RMAN进行块恢复
  2. RMAN> BLOCKRECOVER DATAFILE 5 BLOCK 12, 13;
  3. -- 使用备份验证检测损坏的块
  4. RMAN> BACKUP VALIDATE DATABASE;
  5. RMAN> SELECT * FROM v$database_block_corruption;
复制代码

五、常见问题解析

1. 备份失败的原因和解决方法

原因:存储空间不足或权限问题。

解决方法:
  1. -- 检查存储空间
  2. $ df -h /backup
  3. -- 检查权限
  4. $ ls -la /backup
  5. -- 重新配置备份路径
  6. RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/new_backup_path/%U';
复制代码

原因:网络带宽限制、I/O瓶颈或配置不当。

解决方法:
  1. -- 增加并行度
  2. RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
  3. -- 启用块更改跟踪
  4. SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING;
  5. -- 使用多路复用
  6. RMAN> CONFIGURE MAXSETSIZE TO 10G;
  7. RMAN> CONFIGURE FILESPERSET TO 1;
复制代码

2. 恢复过程中的常见错误

原因:数据文件不一致或缺少必要的归档日志。

解决方法:
  1. -- 检查数据文件状态
  2. SQL> SELECT file#, status, error FROM v$datafile_header;
  3. -- 检查归档日志
  4. SQL> SELECT sequence#, first_change#, next_change# FROM v$archived_log;
  5. -- 如果缺少归档日志,考虑不完全恢复
  6. RMAN> RECOVER DATABASE UNTIL CANCEL;
复制代码

原因:备份文件过旧,无法满足恢复需求。

解决方法:
  1. -- 检查备份集
  2. RMAN> LIST BACKUP SUMMARY;
  3. -- 使用更早的备份
  4. RMAN> RESTORE DATABASE FROM TAG 'OLD_BACKUP_TAG';
复制代码

3. 性能问题及优化

解决方法:
  1. -- 限制备份速率
  2. RMAN> CONFIGURE RATE 100M;
  3. -- 在低峰期执行备份
  4. RMAN> RUN {
  5.   ALLOCATE CHANNEL c1 DEVICE TYPE DISK RATE 50M;
  6.   BACKUP DATABASE;
  7.   RELEASE CHANNEL c1;
  8. }
复制代码

解决方法:
  1. -- 使用并行恢复
  2. SQL> ALTER SYSTEM SET FAST_START_PARALLEL_ROLLBACK=HIGH SCOPE=BOTH;
  3. -- 使用增量备份减少恢复时间
  4. RMAN> RECOVER DATABASE NOREDO;
复制代码

六、专家经验分享

1. 最佳实践

1.
  1. 定期测试备份:定期执行恢复测试,确保备份可用。-- 测试备份
  2. RMAN> RESTORE DATABASE VALIDATE;
复制代码
2.
  1. 多重备份策略:采用”3-2-1”备份策略(3个备份副本,2种不同介质,1个异地存储)。-- 配置多个备份通道
  2. RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/local_backup/%U';
  3. RMAN> CONFIGURE CHANNEL DEVICE TYPE SBT PARMS 'ENV=(NB_ORA_POLICY=oracle_db)';
复制代码
3.
  1. 自动化备份:使用脚本和调度工具自动化备份过程。#!/bin/bash
  2. # daily_backup.sh
  3. rman target / <<EOF
  4. RUN {
  5. ALLOCATE CHANNEL c1 DEVICE TYPE DISK FORMAT '/backup/%U';
  6. BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG DELETE INPUT;
  7. DELETE NOPROMPT OBSOLETE;
  8. RELEASE CHANNEL c1;
  9. }
  10. EOF
复制代码

定期测试备份:定期执行恢复测试,确保备份可用。
  1. -- 测试备份
  2. RMAN> RESTORE DATABASE VALIDATE;
复制代码

多重备份策略:采用”3-2-1”备份策略(3个备份副本,2种不同介质,1个异地存储)。
  1. -- 配置多个备份通道
  2. RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/local_backup/%U';
  3. RMAN> CONFIGURE CHANNEL DEVICE TYPE SBT PARMS 'ENV=(NB_ORA_POLICY=oracle_db)';
复制代码

自动化备份:使用脚本和调度工具自动化备份过程。
  1. #!/bin/bash
  2. # daily_backup.sh
  3. rman target / <<EOF
  4. RUN {
  5. ALLOCATE CHANNEL c1 DEVICE TYPE DISK FORMAT '/backup/%U';
  6. BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG DELETE INPUT;
  7. DELETE NOPROMPT OBSOLETE;
  8. RELEASE CHANNEL c1;
  9. }
  10. EOF
复制代码

1. 制定恢复计划:提前制定详细的恢复计划,包括恢复步骤、责任人、联系方式等。
2. 文档化恢复过程:详细记录每次恢复的过程和结果,便于后续参考。
3. 定期演练:定期进行恢复演练,提高团队应对紧急情况的能力。

制定恢复计划:提前制定详细的恢复计划,包括恢复步骤、责任人、联系方式等。

文档化恢复过程:详细记录每次恢复的过程和结果,便于后续参考。

定期演练:定期进行恢复演练,提高团队应对紧急情况的能力。

2. 实战案例

场景:用户误删了重要表,需要恢复。

解决方案:
  1. -- 使用闪回技术(如果启用)
  2. SQL> FLASHBACK TABLE employees TO BEFORE DROP;
  3. -- 使用RMAN时间点恢复
  4. RMAN> RUN {
  5.   SET UNTIL TIME "TO_DATE('2023-06-01 10:30:00', 'YYYY-MM-DD HH24:MI:SS')";
  6.   RESTORE TABLESPACE users;
  7.   RECOVER TABLESPACE users;
  8.   ALTER DATABASE OPEN;
  9. }
  10. -- 使用数据泵导入(如果有逻辑备份)
  11. $ impdp system/password DIRECTORY=dpump_dir DUMPFILE=expdp.dmp TABLES=employees TABLE_EXISTS_ACTION=REPLACE
复制代码

场景:服务器硬件故障导致数据库崩溃,需要在新服务器上恢复。

解决方案:
  1. -- 1. 在新服务器上安装相同版本的Oracle软件
  2. -- 2. 恢复参数文件
  3. RMAN> STARTUP NOMOUNT;
  4. RMAN> RESTORE SPFILE FROM '/backup/spfile_orcl.ora';
  5. -- 3. 恢复控制文件
  6. RMAN> RESTORE CONTROLFILE FROM '/backup/controlfile.ctl';
  7. -- 4. 恢复数据文件
  8. RMAN> ALTER DATABASE MOUNT;
  9. RMAN> RESTORE DATABASE;
  10. -- 5. 恢复数据库
  11. RMAN> RECOVER DATABASE;
  12. RMAN> ALTER DATABASE OPEN RESETLOGS;
复制代码

3. 自动化备份与恢复
  1. #!/bin/bash
  2. # full_backup.sh - 执行完整备份
  3. # 设置环境变量
  4. ORACLE_SID=orcl
  5. ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
  6. PATH=$ORACLE_HOME/bin:$PATH
  7. # 创建备份目录
  8. mkdir -p /backup/full_$(date +%Y%m%d)
  9. # 执行备份
  10. rman target / log=/backup/full_$(date +%Y%m%d)/backup.log <<EOF
  11. RUN {
  12.   ALLOCATE CHANNEL c1 DEVICE TYPE DISK FORMAT '/backup/full_$(date +%Y%m%d)/%U';
  13.   ALLOCATE CHANNEL c2 DEVICE TYPE DISK FORMAT '/backup/full_$(date +%Y%m%d)/%U';
  14.   BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG DELETE INPUT;
  15.   BACKUP CURRENT CONTROLFILE;
  16.   DELETE NOPROMPT OBSOLETE;
  17.   RELEASE CHANNEL c1;
  18.   RELEASE CHANNEL c2;
  19. }
  20. EXIT;
  21. EOF
  22. # 检查备份状态
  23. if grep -q "RMAN-00569" /backup/full_$(date +%Y%m%d)/backup.log; then
  24.   echo "Backup failed. Check log file for details."
  25.   exit 1
  26. else
  27.   echo "Backup completed successfully."
  28.   exit 0
  29. fi
复制代码
  1. -- 主库配置
  2. SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary,standby)';
  3. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby';
  4. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
  5. SQL> ALTER SYSTEM SET FAL_SERVER=standby;
  6. SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
  7. -- 备库配置
  8. SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary,standby)';
  9. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby';
  10. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=primary LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary';
  11. SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
  12. SQL> ALTER SYSTEM SET FAL_SERVER=primary;
  13. SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
复制代码

七、故障排除技巧

1. 日志分析
  1. # 查看告警日志
  2. $ tail -f $ORACLE_HOME/log/diag/rdbms/orcl/orcl/trace/alert_orcl.log
  3. # 搜索特定错误
  4. $ grep "ORA-" $ORACLE_HOME/log/diag/rdbms/orcl/orcl/trace/alert_orcl.log
复制代码
  1. # 查看RMAN日志
  2. $ cat /backup/backup.log | grep -E "RMAN-|ORA-"
  3. # 提取备份统计信息
  4. $ cat /backup/backup.log | grep "input bytes"
  5. $ cat /backup/backup.log | grep "output bytes"
复制代码

2. 数据库损坏处理
  1. -- 检测坏块
  2. SQL> SELECT * FROM v$database_block_corruption;
  3. -- 使用RMAN修复坏块
  4. RMAN> BLOCKRECOVER DATAFILE 5 BLOCK 12, 13;
  5. -- 使用DBMS_REPAIR修复坏块
  6. SQL> BEGIN
  7.   DBMS_REPAIR.ADMIN_TABLES(
  8.     table_name => 'REPAIR_TABLE',
  9.     table_type => DBMS_REPAIR.REPAIR_TABLE,
  10.     action => DBMS_REPAIR.CREATE_ACTION,
  11.     tablespace => 'USERS');
  12. END;
  13. /
  14. SQL> BEGIN
  15.   DBMS_REPAIR.CHECK_OBJECT(
  16.     schema_name => 'SCOTT',
  17.     object_name => 'EMP',
  18.     repair_table_name => 'REPAIR_TABLE',
  19.     corrupt_count => :corrupt_count);
  20. END;
  21. /
  22. SQL> BEGIN
  23.   DBMS_REPAIR.FIX_CORRUPT_BLOCKS(
  24.     schema_name => 'SCOTT',
  25.     object_name => 'EMP',
  26.     repair_table_name => 'REPAIR_TABLE',
  27.     fix_count => :fix_count);
  28. END;
  29. /
复制代码
  1. -- 脱机损坏的数据文件
  2. SQL> ALTER DATABASE DATAFILE 5 OFFLINE;
  3. -- 恢复数据文件
  4. RMAN> RESTORE DATAFILE 5;
  5. RMAN> RECOVER DATAFILE 5;
  6. -- 联机数据文件
  7. SQL> ALTER DATABASE DATAFILE 5 ONLINE;
复制代码

3. 灾难恢复方案

1. 风险评估:识别可能的灾难场景,如硬件故障、自然灾害、人为错误等。
2. 恢复策略:根据RTO和RPO制定恢复策略,如冷备、热备、Data Guard等。
3. 恢复步骤:详细记录恢复步骤,确保在灾难发生时能够快速恢复。
4. 测试验证:定期测试灾难恢复计划,确保其有效性。

风险评估:识别可能的灾难场景,如硬件故障、自然灾害、人为错误等。

恢复策略:根据RTO和RPO制定恢复策略,如冷备、热备、Data Guard等。

恢复步骤:详细记录恢复步骤,确保在灾难发生时能够快速恢复。

测试验证:定期测试灾难恢复计划,确保其有效性。
  1. -- 使用RMAN恢复整个数据库
  2. RMAN> STARTUP NOMOUNT;
  3. RMAN> RESTORE SPFILE FROM '/backup/spfile_orcl.ora';
  4. RMAN> STARTUP FORCE NOMOUNT;
  5. RMAN> RESTORE CONTROLFILE FROM '/backup/controlfile.ctl';
  6. RMAN> ALTER DATABASE MOUNT;
  7. RMAN> RESTORE DATABASE;
  8. RMAN> RECOVER DATABASE;
  9. RMAN> ALTER DATABASE OPEN RESETLOGS;
  10. -- 使用Data Guard进行故障转移
  11. -- 在备库上执行
  12. SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
  13. SQL> ALTER DATABASE ACTIVATE STANDBY DATABASE;
  14. SQL> ALTER DATABASE OPEN;
复制代码

八、总结与展望

Oracle数据库备份与恢复是保障数据安全的关键技术,本文从基础概念到高级技术,全面介绍了Oracle数据库备份与恢复的实战知识。通过合理制定备份策略、掌握各种恢复技术、遵循最佳实践,可以有效保障数据库的安全性和可靠性。

随着技术的发展,Oracle数据库备份与恢复技术也在不断进步,如云备份、自动化恢复、智能备份优化等新技术的出现,为数据库管理员提供了更多选择。未来,随着人工智能和机器学习技术的应用,数据库备份与恢复将变得更加智能化和自动化,进一步降低管理成本,提高数据安全性。

作为数据库管理员,我们需要不断学习和实践,掌握最新的备份恢复技术,以应对日益复杂的业务需求和挑战,确保企业数据资产的安全可靠。
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则