oracle-dba- RMAN备份与恢复数据库

RMAN备份与恢复数据库
Rman在数据库服务器的帮助下实现数据文件,控制文件以及数据库文件和控制文件的映像副本,归档日志文件,数据库服务器参数文件的备份。RMAN也也允许使用脚本文件实现数据的备份与恢复,而且这写脚本存储在数据库内,文件的名称也有RMAN自己维护。
RMAN独特之处
优点如下
 支持增量备份:在传统的备份工具(EXP|EXPDP)中,只能实现一个完整备份而不能增量备份,RMAN采用备份级别实现增量备份,在一个完整备份的基础上,采用增量备份,和传统备份方式比,这样减少备份的数据量。
 自动管理备份文件:RMAN备份的数据时RMAN自动管理的,包括文件名字,备份文件,备份存储目录,以及识别最近的备份文件,搜索恢复时需要的表空间,模式或数据文件等备份文件。
 自动化备份与恢复:在备份和恢复操作时,使用简单的指令就可以实现备份与恢复。且执行过程完全由RMAN自己维护
 不产生重做信息:与用户管理的联机备份不同,使用RMAN的联机备份不产生重做信息。
 恢复目录:RMAN的自动化备份与恢复功能归功于恢复目录的使用,RMAN直接在其中保存了备份和恢复脚本
 支持映像复制:映像是以操作系统上的文件格式存在,此种复制方式类似于用户管理的脱机备份方式。
 新块的比较特性:这是RMAN支持增量备份的基础,此特性使得在备份时,跳过文件中从未使用过的数据块的备份。备份数据量的减少直接导致备份存储空间需求和备份时间的减少。
 备份的数据文件压缩处理:RMAN提供一个参数,说明是否对备份文件进行2进制压缩。可以减少备份文件的存储空间
 备份文件有效性检查功能:验证备份的文件是否可用,再恢复前需要验证备份文件的有效性。
RMAN系统架构
Oracle的RMAN工具使用会话建立客户端到数据库服务器的连接。
用户启动RMAN可执行程序建立客户端与服务端的会话连接通过RMAN的客户端进行RMAN操作执行备份与恢复指令(在服务器端的服务器进程中执行,完成实际的磁盘读写操作)
RMAN系统结构
 RMAN可执行程序:客户端工具,启动与数据库服务器的连接,实现备份与恢复
 RMAN客户端:一旦建立与数据库服务器的会话连接,RMAN可执行程序就创建一个客户端,通过客户端完成与数据库服务器之间通信。客户端可以连接通过ORACLE Net连接到可访问的任何主机上
 服务器进程:在RMAN建立与数据库服务器的会话连接后,在数据库服务器端启动一个后台进程,执行RMAN客户端发出的各种数据恢复与备份指令,并完成实际的磁盘或磁带设备的读写任务
 RMAN信息库:记录RMAN的信息,如备份的数据文件及副本的目录,归档的重做日志备份文件和副本,表空间和数据文件,以及备份或恢复的脚本和RMAN的配置信息。默认使用数据库服务器的控制文件记录此信息。
 恢复目录:记录RMAN信息库的信息,但是恢复目录需要先配置,信息库可以存储在数据库控制文件or恢复目录中,在oracle默认将rman信息库写入控制文件,如果存在恢复目录则需要继续写到恢复目录。使用控制文件记录rman信息库的空间有限,空间不足时可能被覆盖掉。
发送到RMAN恢复目录的元数据是从控制文件同步来的
RMAN客户端服务器进程(操作DB)RMAN信息库(可以保存到控制文件或控制目录)

快闪恢复区(flash recovery area)
是存储与备份和恢复数据文件以及相关信息的存储区。快闪恢复区保存了每个数据文件的备份,增量备份,控制文件备份以及归档重做日志备份,Oracle也允许在快闪恢复区中保存联机重做日志的冗余副本以及当前控制文件的冗余副本,闪回特性中的闪回日志也保存在此。
使用RMAN实现数据库的备份与恢复时,配置的快闪恢复区就是RMAN存储所有与备份相关的文件存储区。自动管理
优点:实现备份文件的自动管理,使得备份与恢复数据库更简洁,并且可以集中管理磁盘空间。

修改快闪恢复区大小
3方式,init.ora/指令动态修改/OEM工具
查看恢复区参数,包括目录和恢复区的空间大小。
Show parameter db_recovery_file_dest;
修改大小,不需要快闪恢复区,将db_recorery_file_dest设置空格。
Alter system set db_recovery_file_dest_size=2g;
查看空间使用情况以及文件数量
Select name,space_limit,space_used,number_of_files from v$recovery_file_dest;

解决快闪恢复区空间不足问题
1. 增加恢复区磁盘空间,但是受磁盘空间的限制
Alter system set db_recovery_file_dest_size=4g;

  1. 删除没用的备份文件或将备份文件复制到磁带设备
    使用crosscheck、delete obsolete删除不需要的文件。或者使用expired指令删除不需要的备份文件,或者使用rman的backup recovery area指令将快速恢复区中的文件复制到磁带中。
  2. 删除当前的恢复区,重新设置
    Alter system set db_recovery_file_dest=’目录’;
    当向恢复区添加新文件时,oracle自动更新文件列表。删除符合条件的备份文件,复制到磁带的过渡文件,不符合保留策略的文件。而重做日志文件和控制文件任何时候不会被删除。
    查询闪回恢复区的空间使用情况
    Select file_type,percent_space_used,percent_space_reclaimable,number_of_files from v flashrecoveryareausage;RMANdbadbaRMANcreateuserrmanidentifiedbyoracle;grantresource,connect,dbatorman;rman使rman使 rman target rman/oracle
    $rman target /

RMAN的相关概念与配置参数
概念
 备份集:一个逻辑数据集合,由一个或多个RMAN的备份片组成。
备份片是RMAN格式的操作系统文件,包括数据文件,控制文件或者归档日志文件。
默认情况下执行RMAN的备份时,将产生备份文件的备份集,备份集只有RMAN可以识别,所以在恢复的时候必须使用RMAN来访问备份集来恢复。
备份集是RMAN默认备份文件类型,备份集是备份片的逻辑结构。
一般一个通道产生一个备份集,控制文件的备份集以操作系统块作为最小单位,数据文件备份集以数据库块作为最小单位,所以他们不能放在同一个备份集中。
 通道:RMAN是通过与数据库服务器的会话建立连接,通道代表这个连接。他指定了备份或回复数据库的备份集所在的设备,如磁盘。通道数量越多,恢复or备份任务执行越短。
 映像复制:是数据库文件的操作系统文件的一个备份。类似操作系统copy指令备份文件一样。一个数据文件生成一个映像文件副本,整个复制过程是RMAN进行数据块的复制过程,RMAN会检测每一个数据块是否出现损坏,不需要将表空间设置为begin backup,镜像副本中包括使用过的数据块,从未使用过的数据块。
好处在于:恢复速度相对备份集快
默认创建备份集。设置备份类型为copy
Configure device type disk backup type to copy;
映像复制整个数据库/单个表空间/整个数据库中的一个数据文件,3表示数据文件id,它与数据字典DBA_DATA_FILES中的file_id一致。
Backup as copy database/tablespace users/datafile 3;

查看当前所有的RMAN参数
Show all;
 CONFIGURE RETENTION POLICY TO REDUNDANCY 1:保留备份的副本数量,如果每天都备份一个数据文件,1说明只保留一个该数据文件的副本,并且保留最新备份副本
 CONFIGURE DEFAULT DEVICE TYPE TO DISK:说明备份的数据文件默认备份到数据库服务器的磁盘上,也可以更改备份到磁带上
更改RMAN的备份设置类型为磁带/磁盘
CONFIGURE DEFAULT device type to sbt/disk;
 CONFIGURE BACKUP OPTIMIZATION OFF/ON:配置备份优化,模式不使用备份优化,使用备份优化的所用是如果已经备份了某文件的相同版本,则不会再备份该文件。即只保留一份备份文件。On开启
 CONFIGURE CONTROLFILE AUTOBACKUP OFF/ON:配置模式下不启动控制文件的自动备份
 CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET:rman在备份和恢复中的并行度,BACKUPSET备份集
修改并行数以及备份文件类型
CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO COPY;
RMAN备份控制文件
没有启动快闪恢复区:使用FORMAT参数指定控制文件的备份目录
启动的话:自动将控制文件复制到快闪恢复区的备份集中(BACKUPSET目录下)
没有启动快闪恢复区时备份文件
Backup current controlfile format;
启动快闪恢复区备份控制文件
Backup current controlfile;
备份例子中出现的%u,作用是产生唯一的备份文件名。
配置控制文件备份的磁盘类型和备份目录
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘/a/backup/%F’;
配置控制文件自动备份,数据库结构发生变化,自动更新备份文件,使用BACKUP备份数据库时也会备份
CONFIGURE CONTROLFILE AUTOBACKUP ON;
查看目录/a/backup/%F下是否有备份的控制文件
! ls –al /a/backup
备份文件名格式:c-dbid-控制文件备份日期-序列号。另外备份数量每天最多256
RMAN实现脱机备份
需要设置为归档模式等
1:启动RMAN登录数据库服务器
2:启动数据库到mount状态,backup database指令备份整个数据库。
查看设备类型是磁带还是磁盘
$Backup as compressed backupset database;
配置控制文件和spfile文件自动备份
CONFIGURE CONTROLFILE AUTOBACKUP ON;
打开数据库
sql ‘alter database open’;

RMAN联机备份
准备工作
 开启归档模式,9i需要设置alter system set log_archive_start=true scope=spfile;
因为处于联机备份的数据库中要备份的所有数据文件头中的SCN被锁定,此时依旧可以对数据库表进行操作,修改的数据不能写入数据文件,而是被重做日志进程写入重做日志文件。当备份时间过长而且在此期间产生了大量的变化数据,重做日志会切换将变化的数据写到归档日志文件中。
 开启快闪恢复区,设置归档重做日志备份保存位置,容量大小。
设置归档模式
Shutdown immediate;
Startup;alter database archivelog;
查看归档模式,使用快闪恢复区作为备份文件,归档日志存储区。FILE格式为OMF
Archive log list;

联机备份整个数据库

备份整个数据库(包括数据文件和归档日志文件),备份归档日志文件,备份完成后删除归档日志目录下的归档文件。数据文件备份完,oracle自动发生一次日志切换,继续备份剩余的归档日志,因为只有一个归档日志文件。
备份整个数据库时,备份数据文件,其中包括当前控制文件和参数文件。重做日志文件或归档日志文件不是联机状态数据库全备份的内容,所以使用联机热备份的数据库在数据恢复时要recover数据库,即将联机备份开始到故障点之间的所有提交的数据重新写入数据文件。
R>Backup as compressed backupset database plus archivelog delete all input;
手工指定多个通道并将数据文件分布到不同通道上,format在指定通道时指定
RanAllocatechannelch1devicetypediskformat/database/backup/ch1Allocatechannelch2devicetypediskformat/database/backup/ch2Backupasbackupset(datafile1,4channelch1)(datafile2,3,4channelch2);Sqlaltersystemarchivelogcurrent;Formatbackup,format Run {
Allocate channel ch1 device type disk;
Allocate channel ch2 device type disk;
Backup as backupset format ‘/database/backup/%U ’
(datafile 1 ,4 channel ch1)
(datafile 2,3,4 channel ch2);
Sql ‘alter system archive log current’;
}
备份流程图如下:

不指定datafile分配,rman会根据文件的大小大致分配,尽量保证通道分配平均。手工分配后会将默认的通道覆盖掉,默认通道的分配取决于PARALLELISM参数
联机备份一个表空间
备份表空间
Backuptablespaceusers;,51 Backup as compressed backupset tablespace users;
备份一个数据文件
通道生成的备份文件的名称和格式如下:
 %c:备份片的副本数
 %d:数据库名称
 %D:位于该月第几天
 %M:位于该年的第一个月
 %n:数据库名称,向右填补到最大19字符
 %u:一个19个字符的名称,表示备份集和创建时间
 %p:该备份集的备份片号,从1开始到创建的文件数
 %U:一个唯一的名字%u_%p_%c
 %s:备份集的编号
 %t:备份集的时间戳
 %T:年月日格式YYYY-MM-DD
备份数据文件
Backup as backupset datafile 1 format ‘/backup/datafile_1%U’;
备份控制文件
Backupcurrentcontrolfile;RMAN Backup nochecksum tablespace users tag=’weekly_backup’;
默认情况,RMAN不会检查数据块是否发生逻辑损坏,启动逻辑损坏检查
Backupchecklogicaltablespaceusers;RMAN Ran {
Set maxcorrupt for datafile 2,4 to 10;
Backup database;
}
数据文件2,4出现新块的数目超过10停止备份。解决方案,使用以前的RMAN备份恢复,然后在备份数据文件
RMAN增量备份
BACKUP DATABASE是全库备份,增量备份相对而言,只备份自上次备份以来变化的数据。优点:效率比全库备份块,备份数据量减小。
2个级别的增量备份,级别0的增量备份与全库备份相同。级别1的增量备份执行的是差异备份,即对级别0的备份后变化的数据做备份。另外一种级别1的增量备份为累积备份,每次实现增量备份时,备份自级别0备份以来所有变化的数据。累积备份相对差异备份,他只有一个备份文件,而且可以减少数据库恢复时间。

使用RMAN实现增量备份的级别0备份
Backupincrementallevel0database;1 Backup incremental level 1 database;

快速增量备份
使用增量备份减少全库备份的时间,节约空间。无论上次增量备份数据库是否发生变化,增量备份必须要扫面整个数据文件,以确定是否有变化的数据。
避免上述情况,引入快速增量备份。原理是将数据库中发生变化的数据块位置记录在一个更改跟踪文件中。下次实现增量备份时通过此文件来备份变化的数据。
启动块跟踪特性后,会启动一个后台进程CTWR负责将变化的数据块的位置写入定义的块跟踪文件。
启动快跟踪特性

Alter database enable block change tracking Using file ‘目录/chtrack.log’;
log文件丢失或者损坏都会造成数据库无法启动,禁用此跟踪即可
Alter database disable block change tracking;
查询是否启动or关闭快跟踪特性
Select filename,status,bytes from v$block_change_tracking;
修改跟踪文件的存放位置or重命名,需要数据库在mount状态
Alter database rename ‘目录/chtrack.log’ to ‘目录/chtrack.log’;

在映像副本上应用增量备份
Oracle11g能够将增量备份应用到某个镜像副本上,镜像部分是对数据库的一个映像备份。
作用如下
 第一天生成一个镜像副本
 第二天进行增量备份,然后将产生的增量备份应用到第一天所做的镜像副本上,这时第一天备份的镜像副本就是最新数据。
以此类推。对镜像副本应用增量备份最大好处在于加快恢复速度。
对镜像副本应用增量备份
RunBackupincrementallevel1forrecoverofcopywithtagincrcopybackupdatabaseRecovercopyofdatabasewithtagincrcopybackup1tagincrcoptbackup0()0run使+ list copy;

创建和维护恢复目录
1:创建恢复目录表空间,使用prod库的一个特定表空间存储RMAN备份元数据。
Create tablespace recat_tbs datafile ‘/app/oracle/oradata/PROD/rcat_tbs01.dbf’ size 100m;
2:创建恢复目录用户,为该用户创建默认表空间用来存恢复目录。
Create user recat_owner identified by oracle default tablespace rcat_tbs temporary tablespace temp;
Alter user rcat_owner quota unlimited on rcat_tbs;配额限制
3:为该用户授权,使得该用户为恢复目录拥有者
Grant recovery_catalog_owner to rcat_owner;
Grant connect,resource to rcat_owner;
4:连接到恢复目录数据库,才能使用恢复目录
Rmancatalogrman/oracle@orcl5: connect target system/oracle@orcl
一次连接到恢复目录和目标数据库
Connectcatalogrman/oracle@orcltargetsystem/orcl@orcl;6:,recatowner Create catalog tablespace rcat_tbs;
删除目录
$drop catalog rcat_tbs;
7:注册目标数据库。使得恢复目录知道目标数据库的信息,并且自动与目标数据库通信获得相关元数据。要注册目标数据库,需要连接目标数据库
Rman target rman/oracle catalog rcat_owner/oracle@prod
Register database;
8:同步恢复目录,第一次注册恢复目录没有目标数据库注册信息,同步即可获得相关信息。
Resync catalog;

RMAN的脚本管理
创建RMAN备份脚本,要求必须连接到恢复目录和目的数据库
Create script rman_backup{
Sql ‘alter system checkpoint’;
Backup database format
‘\backup\offline_backup\back_%u.dbf’;
Backup current controlfile format
‘\backup\offline_backup\back_ctl_%u.dbf’;
}
执行脚本
Run {execute script rman_backup;}

使用操作系统文件存储RMAN指令,并在RMAN中调用该文件执行RMAN命令
1:创建rman_backup.rcv文件,内容如下:
Sql ‘alter system checkpoint’;
Backup database format
‘f:\backup\offline_backup\back_%u.dbf’;
Backup current controlfile format
‘\backup\offline_backup\back_ctl_%u.dbf’;
2:调用操作系统执行RMAN指令
在rman_backup.rcv文件当前目录>
 rman catalog rman/oracle@orcl target system/oracle@orcl cmdfile ‘rman_backup.rcv’;
 $sql ‘alter system checkpoint’;
Backup database format
‘f:\backup\offline_backup\back_%u.dbf’;
Backup current controlfile format
‘\backup\offline_backup\back_ctl_%u.dbf’;

将脚本文件转换为操作系统文件,
$Print script rman_backup to file ‘rman_backup.txt’;

使用RMAN非归档模式下的完全恢复
模拟整个过程
1:启动数据库到mount状态
Startup mount;
2:备份(使用快闪恢复区作为备份文件的存储目录)
RMAN TARGET RMAN/ORACLE;
Backup as compressed backupset database;
3:创建表
Crate table test as select * from t;
4:删除控制文件,数据文件,以及重做日志文件。模拟丢失
5:提示无法重新启动数据。
6: 恢复控制文件
restorecontrolfilefrom;7:mountAlterdatabasemount;8: resore database;
9:恢复数据库并使用noredo选项(因为已经丢失了所有重做日志文件,所以无法使用此选项)
Recorer database noredo;
10:打开数据库(因为没有重做日志文件,所以使用resetlogs打开数据库,会创建新的重做日志文件,日志序列号从1开始)
Alter database open resetlogs;
11:查看当前重做日志序列号如何记数
Select group#,sequence#,status from v$log;
12:发现创建的表丢失,说明只能恢复上次备份的文件。

只有数据文件丢失的恢复
要保证重做日志文件没有被覆盖。
1:删除表空间的物理文件
2: start;无法启动数据库,提示无法识别or锁定数据文件,对应信息下面有文件编号
3:使用rman恢复数据文件
resoredatafile4:5使recover使2 recover datafile 文件编号;
6:恢复完成,因为没有覆盖重做日志文件。如果失败,使用如下实现不完全恢复
Recover datafile 文件编号 until calcel;输入cancel
$alter database open;打开数据库

联机重做日志文件和数据文件损坏的恢复
模拟控制文件没有丢失,所有的重做日志文件和数据文件损坏
1:删除所有重做日志和数据文件
2:start;重新启动数据库,由于控制文件没有丢失,所以数据库知道数据文件位置,试图打开数据文件,发现文件不存在,数据库无法启动。如果是非当前的默认永久表空间,或者不是system表空间,undo空间,可以使用 alter database datafile …offline的方式,使得数据库离线,然后打开数据库。
3:使用RMAN复原数据库
$Restore database;
4:恢复数据库
Recover database until cance;
5:重做日志文件没有恢复
Alter database open;失败
6:使用resetlogs创建依据控制文件中记录的重做日志组信息重建日志文件
Alter database open resetlogs;
将数据文件恢复到其他磁盘目录
数据文件损坏后or磁盘损坏无法在使用,更新磁盘时间上不现实,所以使用恢复到指定目录。
1:数据启动到mount状态
2:恢复
Run {
Set newname for datafile
‘目录’ to ‘目录’;
Set newname for datafile
‘目录’ to ‘目录’;
Restore database from tag=TAG2011…;
Switch datafile all;
}
3:recover database until cancel;
4:alter database open resetlogs;

使用RMAN归档模式下的完全恢复
归档模式下,使用RMAN的备份和所有归档重做日志以及当前的重做日志文件可以实现数据库完全恢复。
要求RMAN备份以来数据库都运行在归档模式,且归档文件和重做日志文件没有损坏。
优点:可在联机下恢复数据库,不需要关闭数据库。从而不影响其他业务。
非系统表空间损坏的恢复
数据库运行在归档模式,表空间USERS数据文件损坏,有完整的备份以及当前归档的日志文件。
为保证其他业务不中断,将该表空间offline,然后使用备份复原数据文件,在使用归档日志,当前重做日志恢复数据文件。
解决步骤
1:根据路径删除表空间user的数据文件
2:重启数据库报错,将数据文件离线,在打开数据库,错误信息有文件编号
Alter database datafile 文件编号 offline;
Alter database open;
3:启动RMAN还原数据文件
restoredatafile;4:Recoverdatafile;5onlineAlterdatabasedatafileonline;6:Selectfrom使,run Run {
Sql ‘alter database datafile 文件编号 offline’;
Restore tablespace users;
Recover tablespace users;
Sql ‘alter database datafile 文件编号 online’;
}

系统表空间损坏恢复
System表空间损坏,而控制文件,重做日志文件完好。此时需要把数据库启动到mount状态,使用RMAN恢复表空间。因为在system表空间损坏数据库无法启动,所以只能在mount恢复
 启动到mount状态
 恢复system表空间
runSlqalterdatabasedatafile1offline;Restoredatafile;Recoverdatafile;Sqlalterdatabasedatafileonline;alterdatabaseopen;RunRestoredatabase;Recoverdatabase;Sqlalterdatabaseopen;RMAN使rmanRmantarget/;Backupdatabaseplusarchivelog;Shundownimmediate;Startup; backup validate datafile 文件编号;
 查看数据文件中损坏的数据块,也可以使用告警日志文件
Select * from v databaseblockcorruption; blockrecover datafile 文件编号 block 数据块号 from backupset;
 提示有块未恢复,可以查看告警日志文件,所以在打开数据库前必须recover
Recover datafile 文件编号;
Alter database open;
完整恢复完成
RMAN的备份维护指令
VALIDATE BACKUPSET指令
启动数据库文件备份集验证,成功的话说明此备份集是有效的,可用于恢复操作
Validate backupset (rman的所有备份集中代表某个备份集的关键字)
查看备份集汇总信息
List backup summary;

RESTORE VALIDATE指令
验证数据库对象是否在当前的备份集中,用户恢复文件时,可以确认该对象备份信息是否存在
验证表空间是否在备份集中
Restore tablespace users validate;
验证数据文件是否在备份集中
Restore datafile ‘文件目的’ validate;
也可以使用数据文件编号
Restore datafile 4 validate;

RESTORE PREVIEW指令
查看执行恢复的所有文件是否存在,如恢复表空间时,查看该表空间中的所有数据文件是否在备份集中。
Restore database preview;
Restore tablespace 表空间 preview;
Restore datafile 5 preview;
LIST指令
查看当前的 备份信息,某个表空间所在的备份集,某个数据文件所在的备份集信息,查看备份是否存在,存在几个备份。
查看备份集信息
List backupset;
通过备份集标识来查看备份集
List backupset 5;
列出备份集
List backup of tablespace users;
查询某个数据文件在备份集中信息
List backup of datafile 1;
查看归档日志文件备份信息
List backup of archivelog all;
List backup of archivelog from time=’sysdate-2’;
查看控制文件以及参数文件备份
List backup of controlfile;
List backup of spfile;
List copy of controlfile;
查看备份汇总情况,key表示备份集标识。B表示备份集。LV里面的A表示是归档文件,F表示数据文件的完全备份。S的A表示可用。
List backup summary;
REPORT指令
显示数据库的结构,列出永久数据文件和临时文件。
Report schema;
列出需要备份的数据文件,此指令会与RMAN备份指令策略关联
Report need backup;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值