ORACLE 在AZURE云上准备预发布数据库环境

本文详细介绍了使用 Oracle RMAN 工具恢复数据库的全过程,包括从生产环境复制备份文件到临时库、恢复控制文件、注册备份集、恢复数据库及归档日志等关键步骤。

1,搭建准备

需要搭建一个预发布环境,因为线上采用的是rman备份,所以会有rman备份集合,但是rman出来的备份集合,每次恢复过程中都会出现各种各样的细节问题,最近数据库升级了小版本号,到了11.2.0.4,所以记录下来这次rman的恢复过程,以备后来参考,大概流程是
(1)copy备份集合到临时库;
(2)关闭临时库
(3)恢复控制文件
(4)注册备份集合目录
(5)restore database、recovery database;
(6)open打开数据库



2、去生产环境中copy备份文件

去备份文件服务器上,拷贝,需要拷贝数据集、控制文件到临时库

拷贝备份集合,这里包括了备份的归档日志、控制文件、数据文件等等:scp -r 2017-04-22 10.10.10.115:/data/

然后到临时库服务器,赋予Oracle执行权限:chown -R oracle.oinstall /data/*



3、关闭临时库,并以nomount方式打开

RMAN> shutdown immediate;

database dismounted
Oracle instance shut down

RMAN> 

RMAN> 

RMAN> startup nomount;

connected to target database (not started)
Oracle instance started

Total System Global Area   10054782976 bytes

Fixed Size                     2261888 bytes
Variable Size               3992980608 bytes
Database Buffers            6039797760 bytes
Redo Buffers                  19742720 bytes

RMAN> exit


4、在临时库上恢复控制文件

去生产环境查询控制文件路径

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/oracle/app/oracle/fast_recovery_area/powerdes/control02.ctl

SQL> 

去预发布库上,恢复控制文件,在rman命令行界面,执行如下命令
恢复命令:

restore controlfile to '/oracle/app/oracle/fast_recovery_area/powerdes/control02.ctl' from '/oracle/2017-04-22/c-3391761643-20170422-01';

执行过程

RMAN> restore controlfile to '/oracle/app/oracle/fast_recovery_area/powerdes/control02.ctl' from '/oracle/2017-04-22/c-3391761643-20170422-01';

Starting restore at 26-APR-17
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=5665 device type=DISK

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 26-APR-17

RMAN> 


5、将预发布库启动到mount

alter database mount;    
RMAN> alter database mount;
 
database mounted
released channel: ORA_DISK_1
 
RMAN>


6、开始注册备份集

命令:

catalog start with ‘/oracle/2017-04-22/’;

执行过程

RMAN> catalog start with '/oracle/2017-04-22/';

Starting implicit crosscheck backup at 26-APR-17
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=5665 device type=DISK
Crosschecked 94 objects
Finished implicit crosscheck backup at 26-APR-17

Starting implicit crosscheck copy at 26-APR-17
using channel ORA_DISK_1
Crosschecked 2 objects
Finished implicit crosscheck copy at 26-APR-17

searching for all files in the recovery area
cataloging files...
no files cataloged

searching for all files that match the pattern /oracle/2017-04-22/

List of Files Unknown to the Database
=====================================
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9467.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9452.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9457.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9465.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9460.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9462.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9447.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9464.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9455.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9448.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9471.bak
File Name: /oracle/2017-04-22/c-3391761643-20170422-01
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9456.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9469.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9446.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9463.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9468.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9459.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9451.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9454.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9450.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9453.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9461.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9470.bak
File Name: /oracle/2017-04-22/full_POWERDES_20170422_9472.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9445.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9458.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9473.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9466.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9449.bak
File Name: /oracle/2017-04-22/rman_backup.log
File Name: /oracle/2017-04-22/c-3391761643-20170422-00

Do you really want to catalog the above files (enter YES or NO)? YES
cataloging files...
cataloging done

List of Cataloged Files
=======================
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9467.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9452.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9457.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9465.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9460.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9462.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9447.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9464.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9455.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9448.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9471.bak
File Name: /oracle/2017-04-22/c-3391761643-20170422-01
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9456.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9469.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9446.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9463.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9468.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9459.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9451.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9454.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9450.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9453.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9461.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9470.bak
File Name: /oracle/2017-04-22/full_POWERDES_20170422_9472.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9445.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9458.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9473.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9466.bak
File Name: /oracle/2017-04-22/arch_POWERDES_20170422_9449.bak
File Name: /oracle/2017-04-22/c-3391761643-20170422-00

List of Files Which Where Not Cataloged
=======================================
File Name: /oracle/2017-04-22/rman_backup.log
  RMAN-07517: Reason: The file header is corrupted

RMAN> 



7、进行restore database恢复操作

接下来开始执行restore恢复操作,将数据从备份集写入到磁盘上的数据文件里面,还原已经备份的数据文件

命令:

restore database;

执行过程,执行时间比较长,可以看后台alert日志了解具体进展:

RMAN> restore database;

Starting restore at 26-APR-17
using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /home/oradata/powerdes/system01.dbf
channel ORA_DISK_1: restoring datafile 00002 to /home/oradata/powerdes/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00003 to /home/oradata/powerdes/undotbs01.dbf
channel ORA_DISK_1: restoring datafile 00004 to /home/oradata/powerdes/users01.dbf
channel ORA_DISK_1: restoring datafile 00005 to /home/oradata/powerdes/powerdesk01.dbf
channel ORA_DISK_1: restoring datafile 00006 to /home/oradata/powerdes/plas01.dbf
channel ORA_DISK_1: restoring datafile 00007 to /home/oradata/powerdes/pl01.dbf
channel ORA_DISK_1: restoring datafile 00008 to /home/oradata/powerdes/help01.dbf
channel ORA_DISK_1: restoring datafile 00009 to /home/oradata/powerdes/adobelc01.dbf
channel ORA_DISK_1: restoring datafile 00010 to /home/oradata/powerdes/sms01.dbf
channel ORA_DISK_1: restoring datafile 00011 to /home/oradata/powerdes/plcrm01.dbf
channel ORA_DISK_1: restoring datafile 00012 to /home/oradata/powerdes/powerdesk02.dbf
channel ORA_DISK_1: restoring datafile 00013 to /home/oradata/powerdes/datagm01.dbf
channel ORA_DISK_1: restoring datafile 00014 to /home/oradata/powerdes/plimp01.DBF
channel ORA_DISK_1: restoring datafile 00015 to /home/oradata/powerdes/dwetl01.DBF
channel ORA_DISK_1: restoring datafile 00016 to /home/oradata/powerdes/dw02.DBF
channel ORA_DISK_1: restoring datafile 00017 to /home/oradata/powerdes/timdba01.DBF
channel ORA_DISK_1: restoring datafile 00018 to /home/oradata/powerdes/users02.dbf
channel ORA_DISK_1: restoring datafile 00019 to /home/oradata/powerdes/system02.dbf
channel ORA_DISK_1: restoring datafile 00020 to /home/oradata/powerdes/powerdesk03.dbf
channel ORA_DISK_1: restoring datafile 00021 to /home/oradata/powerdes/timdba02.dbf
channel ORA_DISK_1: reading from backup piece /oracle/2017-04-22/full_POWERDES_20170422_9472.bak
channel ORA_DISK_1: piece handle=/oracle/2017-04-22/full_POWERDES_20170422_9472.bak tag=TAG20170422T034917
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:54:06
Finished restore at 26-APR-17

RMAN> 



8、开始recover database操作

应用归档日志恢复数据文件

恢复命令:

recover database

执行过程:

RMAN>  recover database; 

Starting recover at 26-APR-17
using channel ORA_DISK_1

starting media recovery

channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=9376
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=9377
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=9378
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=9379
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=9380
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=9381
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=9382
channel ORA_DISK_1: reading from backup piece /oracle/2017-04-22/arch_POWERDES_20170422_9473.bak
channel ORA_DISK_1: piece handle=/oracle/2017-04-22/arch_POWERDES_20170422_9473.bak tag=TAG20170422T051849
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:15
archived log file name=/oracle/app/oracle/fast_recovery_area/POWERDES/archivelog/2017_04_26/o1_mf_1_9376_dhzz913r_.arc thread=1 sequence=9376
channel default: deleting archived log(s)
archived log file name=/oracle/app/oracle/fast_recovery_area/POWERDES/archivelog/2017_04_26/o1_mf_1_9376_dhzz913r_.arc RECID=12853 STAMP=942313896
archived log file name=/oracle/app/oracle/fast_recovery_area/POWERDES/archivelog/2017_04_26/o1_mf_1_9377_dhzz913t_.arc thread=1 sequence=9377
channel default: deleting archived log(s)
archived log file name=/oracle/app/oracle/fast_recovery_area/POWERDES/archivelog/2017_04_26/o1_mf_1_9377_dhzz913t_.arc RECID=12852 STAMP=942313896
archived log file name=/oracle/app/oracle/fast_recovery_area/POWERDES/archivelog/2017_04_26/o1_mf_1_9378_dhzz912h_.arc thread=1 sequence=9378
channel default: deleting archived log(s)
archived log file name=/oracle/app/oracle/fast_recovery_area/POWERDES/archivelog/2017_04_26/o1_mf_1_9378_dhzz912h_.arc RECID=12857 STAMP=942313897
archived log file name=/oracle/app/oracle/fast_recovery_area/POWERDES/archivelog/2017_04_26/o1_mf_1_9379_dhzz913q_.arc thread=1 sequence=9379
channel default: deleting archived log(s)
archived log file name=/oracle/app/oracle/fast_recovery_area/POWERDES/archivelog/2017_04_26/o1_mf_1_9379_dhzz913q_.arc RECID=12855 STAMP=942313896
archived log file name=/oracle/app/oracle/fast_recovery_area/POWERDES/archivelog/2017_04_26/o1_mf_1_9380_dhzz912j_.arc thread=1 sequence=9380
channel default: deleting archived log(s)
archived log file name=/oracle/app/oracle/fast_recovery_area/POWERDES/archivelog/2017_04_26/o1_mf_1_9380_dhzz912j_.arc RECID=12856 STAMP=942313896
archived log file name=/oracle/app/oracle/fast_recovery_area/POWERDES/archivelog/2017_04_26/o1_mf_1_9381_dhzz98d2_.arc thread=1 sequence=9381
channel default: deleting archived log(s)
archived log file name=/oracle/app/oracle/fast_recovery_area/POWERDES/archivelog/2017_04_26/o1_mf_1_9381_dhzz98d2_.arc RECID=12858 STAMP=942313898
archived log file name=/oracle/app/oracle/fast_recovery_area/POWERDES/archivelog/2017_04_26/o1_mf_1_9382_dhzz98f4_.arc thread=1 sequence=9382
channel default: deleting archived log(s)
archived log file name=/oracle/app/oracle/fast_recovery_area/POWERDES/archivelog/2017_04_26/o1_mf_1_9382_dhzz98f4_.arc RECID=12854 STAMP=942313896
unable to find archived log
archived log thread=1 sequence=9383
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 04/26/2017 09:51:48
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 9383 and starting SCN of 14264134636

RMAN> 

看到有报错信息,需要将缺失的归档日志从云上的原始备份库copy到本地自己机房的oracle服务器上,或者直接恢复到SCN点13990495654上,这里因为是恢复到临时库,所以选择直接恢复到SCN的13990495654点上,命令为recover database until scn 13990495654;


执行恢复到SCN点:

RMAN> recover database until scn 14264134636;

Starting recover at 26-APR-17
using channel ORA_DISK_1

starting media recovery
media recovery complete, elapsed time: 00:00:01

Finished recover at 26-APR-17

RMAN> 

附带recovery过程报错处理:
报错信息:

db_recovery_file_dest_size of 15360 MB is0.21% used. This is a
user-specified limit on the amount of spacethat will be used by this
database for recovery-related files, anddoes not reflect the amount of
space available in the underlyingfilesystem or ASM diskgroup.

处理方案:

alter system set db_recovery_file_dest_size= 50g scope=both;



9、打开数据库

然后使用resetlogs打开数据库,成功了,这里需要使用resetlogs方式打开,否则会报错。

RMAN> alter database open resetlogs;

database opened

RMAN> 
<think>好的,我现在需要帮助用户解决如何正确设置Oracle数据库的数据源端口,以避免配置错误的问题。用户之前提到了datasource port未正确设置,现在想了解Oracle的具体配置方法。 首先,我要回顾之前的回答,确保这次的信息一致。之前提到了Oracle默认端口是1521,用户可能需要确认是否使用默认端口还是自定义端口。需要结合用户提供的引用内容,但用户这次给出的引用似乎主要是关于MySQL授权、MyBatis配置、Spring Boot多数据源以及Docker相关的建议,并没有直接提到Oracle的配置。不过引用[4]提到了多数据源的配置,这可能与用户的问题相关,因为用户可能在多数据源环境下配置Oracle。 接下来,我需要确定用户的具体需求。用户提到的是Oracle数据库,所以可能需要考虑服务商(如AWS RDS、Oracle Cloud、Azure等)的特殊配置。这些服务可能有特定的端口设置或安全组规则,需要指导用户检查平台的安全组或网络ACL,确保端口开放。 另外,用户可能遇到端口配置错误的问题,比如连接超时、拒绝访问等。需要提供验证步骤,比如使用telnet或nc检查端口连通性,查看Oracle监听日志,以及确认本地网络配置。 还要注意引用中的内容,比如引用[1]是关于MySQL用户授权的命令,引用[4]是Spring Boot多数据源的配置示例。虽然这些不是直接针对Oracle,但可以借鉴多数据源配置的方法,指导用户在Spring Boot中正确配置Oracle的URL,包括主机、端口和服务名。 用户可能需要知道如何在不同环境中设置端口,比如本地开发环境环境的不同配置。例如,在application.yml中指定正确的JDBC URL,格式为jdbc:oracle:thin:@主机:端口:服务名。需要强调端口的正确性,以及服务名与数据库实例的匹配。 另外,引用[5]提到提交devcontainer.json和Dockerfile到GitHub,这可能提示用户在使用Codespaces或其他容器环境时,确保容器内的应用能访问数据库的正确端口,可能需要配置Docker的网络或端口转发。 还需要考虑数据库的安全设置,比如是否允许公共访问,或者是否需要通过SSH隧道连接,这时候端口配置可能会不同。例如,某些服务可能要求通过特定网关或使用SSL连接,端口可能需要调整为SSL端口。 总结步骤应该是:确认服务商的端口要求,检查安全组设置,配置应用连接字符串,验证网络连通性,检查Oracle监听状态,处理可能的路由或防火墙问题。同时,结合用户之前的配置问题,强调端口与实例类型的匹配,比如是否为数据库的专用端口。 最后,生成相关问题时要围绕Oracle配置,可能涉及安全组、监听器配置、多环境配置等,帮助用户深入理解相关知识点。</think>--- #### Oracle数据库数据源端口配置指南 --- ##### 一、核心配置步骤 1. **确认数据库实例信息** - 在控制台(如**AWS RDS**、**Oracle Cloud**、**Azure**)中获取以下信息: - **主机地址**(Endpoint):如`example.oracle.cloud.region.rds.amazonaws.com` - **端口号**:默认$1521$(Oracle标准端口),若使用自定义端口需同步配置[^1] - **服务名/SID**:如`ORCL`(需与数据库实例创建时指定的服务名一致) 2. **配置应用连接字符串** 在Spring Boot的`application.yml`中指定完整JDBC URL: ```yaml spring: datasource: url: jdbc:oracle:thin:@//<主机地址>:<端口>/<服务名> # 示例(AWS RDS): url: jdbc:oracle:thin:@//example.oracle.cloud.region.rds.amazonaws.com:1521/ORCL username: admin password: your_password driver-class-name: oracle.jdbc.OracleDriver ``` **注意**: - `jdbc:oracle:thin`为Oracle轻量级连接协议 - 若使用**SID**而非服务名,需修改为`@<主机>:<端口>:<SID>`格式[^1] 3. **平台安全组配置** - 在控制台的安全组规则中**开放入站端口**$1521$(或自定义端口),允许应用服务器IP访问 - **典型错误**:`ORA-12541: TNS 无监听程序`通常因安全组未放行端口导致[^1] --- ##### 二、关键验证方法 1. **端口连通性测试** ```bash # 使用telnet或nc验证网络可达性 telnet <数据库主机地址> 1521 # 若返回"Connected"表示端口开放,否则需检查安全组/防火墙 ``` 2. **监听器状态检查** 通过平台提供的**数据库终端工具**执行: ```sql -- 查看监听状态 lsnrctl status -- 验证服务注册 SELECT name, value FROM v$parameter WHERE name = 'service_names'; ``` 3. **应用日志排查** - **连接超时**(`Connection timed out`):检查安全组规则或网络路由 - **权限拒绝**(`ORA-01017`):确认用户名/密码与服务名匹配 - **协议适配错误**(`IO Error: The Network Adapter...`):检查JDBC URL格式[^1] --- ##### 三、多环境配置示例 ###### 场景1:Docker容器化部署 在`docker-compose.yml`中声明环境变量: ```yaml services: app: environment: - DB_HOST=example.oracle.cloud.region.rds.amazonaws.com - DB_PORT=1521 - DB_SERVICE=ORCL - DB_USER=admin - DB_PASSWORD=your_password ``` ###### 场景2:Spring Boot多数据源(参考引用[4]) ```java @Configuration public class OracleDataSourceConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource.oracle") public DataSource oracleDataSource() { return DataSourceBuilder.create().build(); } } ``` `application.yml`中分离配置: ```yaml spring: datasource: oracle: url: jdbc:oracle:thin:@//host:1521/ORCL username: admin password: your_password ``` --- ##### 四、常见问题解决 | 问题现象 | 解决方案 | |---------------------------|--------------------------------------------------------------------------| | ORA-12514: TNS 监听程序无法识别连接标识符 | 检查服务名是否与数据库实例注册名称一致,或尝试使用SID替代服务名[^1] | | ORA-12170: TNS 连接超时 | 验证安全组规则是否放行应用服务器IP,检查VPC子网路由表 | | ORA-28040: 认证协议不匹配 | 升级Oracle JDBC驱动版本至与数据库版本兼容(如ojdbc8.jar for Oracle 12c+) | --- ##### 五、进阶安全配置 1. **SSL加密连接** 部分服务要求通过SSL连接,需调整端口和URL: ```yaml url: jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=host)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=ORCL))) ``` 2. **SSH隧道访问(私有子网场景)** 通过跳板机转发端口: ```bash ssh -L 1521:cloud-db-host:1521 jump-server-user@jump-host-ip ``` 应用配置中连接`localhost:1521`即可穿透访问私有数据库。 --- --相关问题--: 1. 如何为数据库配置SSL加密连接? 2. 如何通过VPC Peering实现跨环境安全访问Oracle数据库? 3. Oracle Cloud中如何修改默认监听端口?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值