Admin-About RMAN

手工备份恢复的缺点
1、产生大量的重做日志
2、需要手工记录大量的信息
    每个备份文件的位置、备份时间
    每个数据文件的位置
    等等
Oracle提供了recovery manager工具,简称RMAN
使得我们的备份工作极大的简化
1、备份数据文件、归档日志、控制文件、spfile
2、自动维护备份相关的元数据,例如备份文件的名称、完成备份的SCN号
3、以数据块为单位进行备份,只备份使用过的数据块
4、对备份出来的文件进行压缩
5、自动检测数据块是否损坏
6、支持增量备份
等等

RMAN配置
1、RMAN要进行备份的数据库叫做目标数据库
2、RMAN是一个客户端程序,需要建立到目标数据库的客户端连接,并在目标数据库上创建对应的服务器进程以及session,RMAN输入的各个命令,从客户端传递到服务器,由服务器进程负责执行,RMAN只能使用专用服务器连接,不能使用共享服务器连接
3、备份过程中,RMAN读取目标数据库的控制文件,从而获得目标数据库里包含哪些数据文件、归档日志文件、以及各个检查点SCN,指导RMAN完成备份和恢复的具体操作
4、RMAN获得了需要备份的文件列表以后,在将数据备份到备份介质上时,需要建立到这些备份介质的通道(channel)。一旦建立通道。数据就会从该通道备份到指定的备份介质上,每次备份恢复,我们都可以创建多个通道以加快速度。
5、RMAN将通道作为目标数据库上的服务器进程,会为每个通道都创建一个对应的服务器进程,同时,通道的类型就决定了要将数据库备份到哪种介质上,两种通道类型
    磁盘通道和磁带通道
磁盘和闪回恢复区使用的都是磁盘通道
磁带使用的磁带通道,需要借助MML(media management library),RMAN可以把备份的数据通过MML传递到磁带上
6、RMAN备份过程中,会产生较多的服务器进程(RMAN客户端以及通道),需要的内存较多,对于初始化参数sessions和processes都要相应的增加
7、RMAN信息库(rman repository),RMAN备份过程中产生的元数据,包括备份文件的名称、路径、完成备份的时间、检查点SCN等数据,RMAN信息库可以存放在两个位置
    目标数据库的控制文件
    恢复目录(recovery catalog)
8、控制文件里面存放的记录分为两类
    可删除的记录(归档日志文件的历史记录以及RMAN备份的元数据)
    不可删除记录(数据文件、联机日志文件列表等)
如果需要在控制文件中存放新的记录,则可以删除那些可删除部分,从而提供可用空间,注意:如果RMAN备份的元数据被删除,RMAN的备份数据就失去意义,因此RMAN备份的元数据很重要
9、可以通过设置初始化参数controlfile_record_keep_time来决定控制文件中可删除部分,该参数默认是7天,表示控制文件始终保持最近7天的可删除记录,7天前的备份信息、归档日志文件历史记录被删除,如果设置为0,表示不删除历史记录,那么控制文件的增长将会失控。因此RMAN的备份周期不能超过7天
10、RMAN提供了恢复目录用来存放RMAN信息库,RMAN恢复目录由几个表和存储过程组成,这些对象存放在一个schema下面,因为表用来存放RMAN备份的元数据,因此可以永久的保留下去,而不需要删除历史记录
11、RMAN恢复目录是可选的,不是必须的,元数据通过目标数据库的控制文件传递到恢复目录,RMAN的元数据始终都存放一份在目标数据库的控制文件中,不会因为恢复目录的存在而删除,使用RMAN完成备份以后,会将控制文件的RMAN元数据同步到恢复目录,默认情况下,控制文件中的信息保留7天,恢复目录永久保留。RMAN还可以同时为多个目标数据库服务,在同一个恢复目录里面,可以保留多个目标数据库的RMAN元数据
12、如果使用恢复目录,则在使用RMAN时,除了建立到目标数据库的连接以外,还必须建立到恢复目录所在数据库的连接,在恢复目录数据库里面创建对应的服务器进程和session
13、RMAN工具本身由两部分组成
RMAN可执行程序:这是一个命令接口,提供了交互的界面,能够解释我们的RMAN命令,返回结果。在工作中,完成的实质性工作很少
脚本文件recover.bsp:备份恢复的实质性工作是由目标数据库的程序包完成的,对目标数据库的相应程序包的调用则是由文件recover.bsp实现的
里面全部是各种PL/SQL脚本块,事实上,RMAN界面输入的各种命令,都会被转换成对bsp文件中各个PL/SQL块的调用,并将相关的PL/SQL块传递到目标数据库上去执行,从而完成数据库的备份恢复操作,bsp才是RMAN工具的核心。bsp中包含的PL/SQL块,主要调用了目标数据库中以下两个程序包
    dbms_rcvman:用来读取目标数据库的控制文件信息,并将这些信息传给rman,从而rman可以获取要备份的文件列表,以及其他一些信息
    dbms_backup_restore:完成具体的备份恢复工作,并在控制文件中写入备份的元数据
两个数据包已经硬编码到数据库软件中,因此数据库在关闭的情况下也可以使用RMAN
14、RMAN备份恢复过程中,可能会需要关闭和启动数据库,因此在目标数据库上,必须使用具有sysdba权限的用户身份进行连接,如果没有使用操作系统认证,那么要注意密码文件不要丢失,密码文件应该定期的备份
15、RMAN备份的最小单位是数据块,不是数据文件,RMAN备份时,总是一个数据块一个数据块的读取和写入,RMAN可以与DBWr进程协调一致,如果在备份过程中,发现是一个脏的数据块,可以等到DBWr进程将内存的内容刷新到数据文件以后,才备份该脏数据块,因此不会出现分离数据块的情况,同时避免了使用begin backup,也就不会产生过多的重做日志,和手工的备份是两种机制
16、RMAN只会对使用过的数据块进行备份,可以在数据库关闭时备份,RMAN备份时,从物理层面来判断数据块是否被使用,也就是说,只要某个数据块的头部被格式化过,RMAN就认为该数据块被使用过,就会备份该数据块,例如我们删除了一个大表,但是RMAN的备份不会减小多少,因为删除表的时候,只是将数据字典中的信息进行了删除,表实际所占用的数据块并没有被删除,数据块物理上还有数据,因此RMAN还会进行备份。
快速闪回区(flash recovery area)
Oracle 10g数据库中,为RMAN备份文件设置了默认的路径,也就是快速闪回区。
该区域是文件系统上的一个目录,也可以是ASM的某个磁盘组
RMAN的备份可以不存放在这个目录区中,但是闪回恢复区有很多的好处
1、简化对RMAN备份文件的管理,这个区域的文件都是OMF文件,文件的名称和大小都是oracle自动管理
2、该区域的空间管理也是自动进行的
    当RMAN需要在该区域创建新的文件,但是空间不足,oracle会自动根据配置的冗余策略,删除不再需要的备份文件
    如果该区域出现空间压力,会在告警日志中(alter.ora)记录该信息,我们可以根据告警,适当的增加该区域的大小、修改RMAN备份的冗余策略
两个参数,设置目录和大小,必须先设置大小,再设置目录
db_recovery_file_dest
db_recovery_file_dest_size
只是改变了目录,已经有的文件并没有移动过来。
闪回恢复区可以存放rman备份文件、控制文件、联机重做日志文件、以及闪回数据库日志文件等
Oracle设置了闪回恢复区,反映了Orale 的一个趋势,数据库自动化管理所有的工作。设置了闪回恢复区以后,我们只需要设置好冗余策略、控制大小,目录位置。剩余的工作Orale都会自动的搞定。
v$flash_recovery_area_usage
使用configure命令配置RMAN
1、RMAN用户需要sysdba权限,我们最好不要使用sys用户,因此给RMAN建立一个专用账号
2、连接目标数据库的几种方式
rman
conn target /

认证部分,本例使用的是操作系统认证,以sys的权限进行了登陆
target,表示连接的是目标数据库,而且本例指的是本机的数据库实例,最终连接到了本机数据库实例ORCL中
rman target /
rman target  sys/password@orcl
如果是在另外一台机器上使用RMAN客户端,那么可以使用上面的连接方式。

RMAN的选项中,两个选项经常使用
1、log
2、cmdfile
RMAN所有的输出都不会显示在屏幕上,而是显示在日志文件中
参数append表示在原来的日志基础上追加日志信息,不是覆盖。
如果rman是晚上自动运行,那么就需要添加log选项,作为一个日志记录,很重要的参数。
另外一个参数是cmdfile表示
使用rman连接到数据库,然后立即执行cmdfile文件里的命令,该命令可以是任何合法的RMAN命令。
上面的两个参数是经常使用的参数。
RMAN命令的分类
1、独立的命令
在rman提示符下面,输入一条命令,立即执行
2、任务形式的命令
以rman{  }形式执行,所有要执行的命令都放在两个{}之间,执行时,RUN模块里面的所有命令必须都成功,整个任务才算成功,其中任何一条命令失败,则整个任务失败并回滚,不会执行其中的任何一条命令。

从9i开始,可以将一些常用的配置选项设置为默认值,每次备份时,就不需要再进行这些配置,直接进行备份

 configure命令进行默认配置,配置的选项包括
1、自动备份控制文件
2、自动启动某个类型的通道(磁盘或者磁带)
3、备份的冗余策略
4、默认的备份类型:备份集(backup set)or镜像副本(image copy)
5、备份片的大小
Configure的配置保存在控制文件中,原有的默认配置硬编码到了RMAN只可执行命令中,因此数据库在没有mount的时候,show命令都可以查看这些默认值,但是对我们设置的值,在这里看不见。
RMAN> show all;

using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name ORA11G are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2/dbs/snapcf_ora11g.f'; # default


我们要配置某个选项的时候,不需要记住具体的命令,因为使用show all以后,命令都出来了。
通过dbconsole也可以查看具体的选项。
1、自动备份控制文件
    1、每次使用RMAN进行备份,都会自动备份控制文件和spfile
    2、 归档模式下,修改了数据库结构,立刻自动备份控制文件

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP on;

new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored

可以配置控制文件备份所在的目录和文件名字
  CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/oracle/backup/%F';



c-IIIIIIIIII-YYYYMMDD-QQ
   c-DBID-控制文件备份日期-序列号,16禁止00-ff,因此每天的备份数量不能超过256个

默认如果使用的是闪回区,使用闪回区的时候,文件名字使用的OMF,即使设置了文件名字,也不起作用


数据库结构发生变化。
SQL> create tablespace test datafile '/u01/app/oracle/oradata/ora11g/ora11g/test01.dbf' size 1m;

Tablespace created.

SQL> !pwd
/u01/app/oracle/backup

SQL> !ls -lth
total 0

控制文件没有自动的生成备份。

将数据库改为归档模式。
SQL> alter system set log_archive_dest_1='location=/u01/app/oracle/arch';

System altered.

SQL> show parameter log_archive_dest_1

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1                   string      location=/u01/app/oracle/arch
log_archive_dest_10                  string
log_archive_dest_11                  string
log_archive_dest_12                  string
log_archive_dest_13                  string
log_archive_dest_14                  string
log_archive_dest_15                  string
log_archive_dest_16                  string
log_archive_dest_17                  string
log_archive_dest_18                  string
log_archive_dest_19                  string
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area  313860096 bytes
Fixed Size                  1336232 bytes
Variable Size             234884184 bytes
Database Buffers           71303168 bytes
Redo Buffers                6336512 bytes
Database mounted.
SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL> !ls -lth /u01/app/oracle/backup
total 0
再次修改表空间的结构。
SQL> drop tablespace test;

Tablespace dropped.

控制文件自动生成,因此这个功能还是很有意义的。

自动启动某个类型的通道
这是RMAN配置中最重要的地方,也是必须配置的地方
通道表示将数据复制到备份介质的物理通道,通道类型则说明将数据复制到磁带还是磁盘,可以定义默认的通道类型

默认我们将数据备份到磁盘上。我们也可以备份到磁带上,就爱那个disk替换为sbt,就表示备份到磁带上。
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 3;

new RMAN configuration parameters:
CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET;
new RMAN configuration parameters are successfully stored

指定同时自动创建多少个通道,上面指定了三个通道,加快了备份速度。
上面的配置中说明,默认使用磁盘作为备份介质,同时启用三个磁盘通道进行备份。

RMAN> run {
2> backup tablespace example;
3> }

Starting backup at 22-OCT-12
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=20 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=142 device type=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: SID=21 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00005 name=/u01/app/oracle/oradata/ora11g/ora11g/example01.dbf
channel ORA_DISK_1: starting piece 1 at 22-OCT-12
channel ORA_DISK_1: finished piece 1 at 22-OCT-12
piece handle=/u01/app/oracle/product/11.2/dbs/01noc2ak_1_1 tag=TAG20121022T035603 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:26
Finished backup at 22-OCT-12

Starting Control File and SPFILE Autobackup at 22-OCT-12
piece handle=/u01/app/oracle/backup/c-4191252502-20121022-00 comment=NONE
Finished Control File and SPFILE Autobackup at 22-OCT-12

备份启用了3个通道并行,因为只有一个数据文件,只在通道1上创建了一个备份集,这个备份集包括一个备份片。
控制文件和spfile单独备份到了一个位置,生成了文件

如果是RAC,那么可以指定在哪个实例上启动通道。单实例不需要指定。
configure chanel 1 device type disk connect 'sys/password@sid1';

参数format,说明该通道生成的备份文件的名称格式
通道生成的备份文件的名称和格式。
%c:备份片的副本数
%d:数据库名称
%D:位于该月的第几天
%M:位于该年的第几个月
%n:数据库名称,向右填补到最大8个字符
%u:一个8个字符的名称,代表备份集和创建时间
%p:该备份集的备份片号,从1开始到创建的文件数
%U:一个唯一的名字%u_%p_%c
%s:备份集的编号
%t:备份集的时间戳
%T:年月日格式(YYYY-MM-DD)

参数maxopenfiles:表示当发出backup命令的时候,一个通道能够处理的文件的最大个数,默认为8
参数maxpiecesize:创建的备份片(备份出来的物理文件)的大小
Parms ‘ENV=…’:表示将数据备份到磁带上时,到磁带的通道的一些参数配置,对于不同的厂商,其Parms的值也是不同的
上面都是一些和通道有关的参数
1、默认的设备类型
2、默认启动的通道数量
3、备份时手工分配通道
4、RAC环境中指定在那个实例上启动通道(connect)
5、format指定了生成的文件名和备份路径
6、一个通道最大能够处理的文件个数
7、备份片的大小
8、如果通道是磁带,那么需要配置一些和厂商有关的参数

RMAN> CONFIGURE DEVICE TYPE DISK clear;

old RMAN configuration parameters:
CONFIGURE DEVICE TYPE DISK PARALLELISM 3 BACKUP TYPE TO BACKUPSET;
RMAN configuration parameters are successfully reset to default value
released channel: ORA_DISK_1
released channel: ORA_DISK_2
released channel: ORA_DISK_3

删除了一些我们不需要的配置

RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u01/app/oracle/backup/ORA11G%U.bak' maxpiecesize 5m;

new RMAN configuration parameters:
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/u01/app/oracle/backup/ORA11G%U.bak' MAXPIECESIZE 5 M;
new RMAN configuration parameters are successfully stored

RMAN> BACKUP TABLESPACE EXAMPLE;

Starting backup at 22-OCT-12
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=20 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00005 name=/u01/app/oracle/oradata/ora11g/ora11g/example01.dbf
channel ORA_DISK_1: starting piece 1 at 22-OCT-12
channel ORA_DISK_1: finished piece 1 at 22-OCT-12
piece handle=/u01/app/oracle/backup/ORA11G03noc36t_1_1.bak tag=TAG20121022T041108 comment=NONE
channel ORA_DISK_1: starting piece 2 at 22-OCT-12
channel ORA_DISK_1: finished piece 2 at 22-OCT-12
piece handle=/u01/app/oracle/backup/ORA11G03noc36t_2_1.bak tag=TAG20121022T041108 comment=NONE
channel ORA_DISK_1: starting piece 3 at 22-OCT-12
channel ORA_DISK_1: finished piece 3 at 22-OCT-12
piece handle=/u01/app/oracle/backup/ORA11G03noc36t_3_1.bak tag=TAG20121022T041108 comment=NONE
channel ORA_DISK_1: starting piece 4 at 22-OCT-12
channel ORA_DISK_1: finished piece 4 at 22-OCT-12
piece handle=/u01/app/oracle/backup/ORA11G03noc36t_4_1.bak tag=TAG20121022T041108 comment=NONE
channel ORA_DISK_1: starting piece 5 at 22-OCT-12
channel ORA_DISK_1: finished piece 5 at 22-OCT-12
piece handle=/u01/app/oracle/backup/ORA11G03noc36t_5_1.bak tag=TAG20121022T041108 comment=NONE
channel ORA_DISK_1: starting piece 6 at 22-OCT-12
channel ORA_DISK_1: finished piece 6 at 22-OCT-12
piece handle=/u01/app/oracle/backup/ORA11G03noc36t_6_1.bak tag=TAG20121022T041108 comment=NONE
channel ORA_DISK_1: starting piece 7 at 22-OCT-12
channel ORA_DISK_1: finished piece 7 at 22-OCT-12
piece handle=/u01/app/oracle/backup/ORA11G03noc36t_7_1.bak tag=TAG20121022T041108 comment=NONE
channel ORA_DISK_1: starting piece 8 at 22-OCT-12
channel ORA_DISK_1: finished piece 8 at 22-OCT-12
piece handle=/u01/app/oracle/backup/ORA11G03noc36t_8_1.bak tag=TAG20121022T041108 comment=NONE
channel ORA_DISK_1: starting piece 9 at 22-OCT-12
channel ORA_DISK_1: finished piece 9 at 22-OCT-12
piece handle=/u01/app/oracle/backup/ORA11G03noc36t_9_1.bak tag=TAG20121022T041108 comment=NONE
channel ORA_DISK_1: starting piece 10 at 22-OCT-12
channel ORA_DISK_1: finished piece 10 at 22-OCT-12
piece handle=/u01/app/oracle/backup/ORA11G03noc36t_10_1.bak tag=TAG20121022T041108 comment=NONE
channel ORA_DISK_1: starting piece 11 at 22-OCT-12
channel ORA_DISK_1: finished piece 11 at 22-OCT-12
piece handle=/u01/app/oracle/backup/ORA11G03noc36t_11_1.bak tag=TAG20121022T041108 comment=NONE
channel ORA_DISK_1: starting piece 12 at 22-OCT-12
channel ORA_DISK_1: finished piece 12 at 22-OCT-12
piece handle=/u01/app/oracle/backup/ORA11G03noc36t_12_1.bak tag=TAG20121022T041108 comment=NONE
channel ORA_DISK_1: starting piece 13 at 22-OCT-12
channel ORA_DISK_1: finished piece 13 at 22-OCT-12
piece handle=/u01/app/oracle/backup/ORA11G03noc36t_13_1.bak tag=TAG20121022T041108 comment=NONE
channel ORA_DISK_1: starting piece 14 at 22-OCT-12
channel ORA_DISK_1: finished piece 14 at 22-OCT-12
piece handle=/u01/app/oracle/backup/ORA11G03noc36t_14_1.bak tag=TAG20121022T041108 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:18
Finished backup at 22-OCT-12

Starting Control File and SPFILE Autobackup at 22-OCT-12
piece handle=/u01/app/oracle/backup/c-4191252502-20121022-01 comment=NONE
Finished Control File and SPFILE Autobackup at 22-OCT-12
每个备份片的大小是5M。

备份集(backup set)
默认的备份类型是备份集,生成备份集的时候,RMAN会将不同的数据文件里使用过的数据取出后,放在同一个物理文件里,也可以放在不同的物理文件里。产生的物理文件叫做备份片(backup piece),备份片的逻辑组合叫做备份集,备份集只是一个名字而已,将物理文件逻辑的组合在一起
一般来说,一个通道生成一个备份集,启动了三个通道,那么就生成三个备份集。如果启动了备份文件的自动备份,那么控制文件所在的备份文件会单独的生成一个备份集,不会与数据文件所在的备份集合并在一起,另外,如果指定了每个备份集包含的数据文件的个数(filesperset),那么即便只有一个通道,也有可能生成多个备份集。
控制文件所在的备份集以操作系统操作系统块作为最小单位
数据文件所在的备份集以数据库作为最小单位,因此不能放在一个备份集中
如果指定了备份片的大小,比如2G,要备份的数据文件占5G,那么在备份集中会生成3个物理文件(3个备份片),其中两个为2G,一个为1G
备份集的数量通常取决于下面的几个参数
    是否启用了控制文件的自动备份,启用则备份集多1个
    启用了几个通道,一个通道一个备份集
    每个备份集包含的数据文件的个数,可能出现一个通道多个备份集的    情况
备份片的数量则取决于备份集的数量和最大备份片的数量
镜像副本
这与手工通过操作系统的复制命令备份数据文件类似。一个数据文件生成一个镜像副本文件,整个复制过程是rman进行的,rman一个数据块一个数据块的复制,rman会检测每一个数据块是否出现损坏,不需要将表空间设置成为begin backup,镜像副本中包含使用过的数据块,也包含从未使用过的数据块。生成镜像副本的好处在于恢复速度相对备份集来说,更快一些。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27064837/viewspace-746900/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/27064837/viewspace-746900/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值