当前位置: 首页 > news >正文

单实例11.2.0.3迁移到RAC11.2.0.4_使用RMAN 异机恢复

保命法则:先备份再操作,磁盘空间紧张无法备份就让满足,给自己留退路。

场景说明:

1.本文档的环境为同平台、不同版本(操作系统版本可以不同,数据库小版本不同),源机器和目标机器部分控制文件和ORACLE_BASE目录不一样。

2.目标机器只需要安装oracle只安装oracle数据库软件,不创建数据库(no netca dbca)。

3.第一次利用备份恢复测试环境,之后从源机器拷贝备份到目标机器并在控制文件中注册,再进行恢复测试。

主要过程:

将切换归档,执行rman全库备份以及密码文件拷贝到目标主机进行rman恢复、升级。

注意事项:

当使用rman nocatalog恢复时,数据库必须是处于“mount”状态的。而Oracle startup mount的前提条件是control必须存在。因此,你必须在恢复datafile之前先恢复controlfile。

特别说明:

源数据库和新数据库控制文件目录和ORACLE_BASE目录不同,其他目录相同。解决办法:更改参数文件中控制文件目录和ORACLE_BASE目录为新数据库位置。

源数据库和新数据库控制文件目录和ORACLE_BASE目录不同,其他目录不相同。解决办法:更改参数文件中控制文件目录和ORACLE_BASE目录为新数据库位置、更改控制文件中数据文件位置。

环境描述

源数据库环境

操作系统版本 : CentOS Linux release 7.9 内存:4G cpu:1核 磁盘:40G
数据库版本 : Oracle 11.2.0.3 x64

数据库架构:单点
数据库名 : dxj
数据库SID : dxj
db_unique_name : dxj
instance_name : dxj

归档模式:已开启
IP : 192.168.40.53

目标数据库环境

操作系统版本 : CentOS Linux release 7.9 内存:4G cpu:1核 磁盘:40G

数据库版本 : Oracle 11.2.0.4 x64 (只安装grid、oracle数据库软件,no dbca)

数据库架构:RAC

OS

规格

主机名

IP

VIP

private IP

scanip

redhat 7.9

1C2G

orcl01

192.168.40.200

192.168.40.202

192.168.183.200

192.168.40.205

redhat 7.9

1C2G

orcl02

192.168.40.201

192.168.40.203

192.168.183.201

迁移前源库准备

统计数据量

--查看数据文件总大小
select sum(bytes)/1024/1024/1024 as "size(G)" from dba_data_files;size(G)
----------1.328125--查看总大小
select round(sum(bytes) / 1024 / 1024 / 1024, 2) || 'G'from dba_segments;ROUND(SUM(BYTES)/1024/1024/1024,2)||'G'
-----------------------------------------
1.21G

统计业务数据

--查看用户
set lin1000 pagesize 999
select username,default_tablespace,temporary_tablespace from dba_users where username not in ('SYS','SYSTEM','HR','OUTLN','MGMT_VIEW','FLOWS_FILES','MDSYS','ORDSYS','EXFSYS','DBSNMP','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','SCOTT','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR');USERNAME		       DEFAULT_TABLESPACE	      TEMPORARY_TABLESPACE
------------------------------ ------------------------------ ------------------------------
FUWA			       USERS			      TEMP--查看用户使用了哪些表空间
select distinct tablespace_name from dba_segments where owner in ('FUWA');--每个业务用户下的总对象数量校验
SELECT D.OWNER,COUNT(1)FROM dba_objects dWHERE d.OWNER   in ('FUWA')AND NOT EXISTS (SELECT 1 FROM DBA_RECYCLEBIN B WHERE B.object_name=D.OBJECT_NAME AND D.OWNER=B.owner) GROUP BY D.OWNERORDER BY D.OWNER ;OWNER				 COUNT(1)
------------------------------ ----------
FUWA					1--每个业务用户下的各个对象类别的数量校验
SQL> select OWNER,OBJECT_TYPE,status,count(OBJECT_NAME) from dba_objects  where owner in ('FUWA')  group by OBJECT_TYPE,owner,status order by 1,3,2;OWNER			       OBJECT_TYPE	   STATUS  COUNT(OBJECT_NAME)
------------------------------ ------------------- ------- ------------------
FUWA			       TABLE		   VALID		    1

清理业务数据

需和开发 直属领导同意。对于占用空间大的表采用方案如下:

1、删除表数据。

2、备份时加参数排除,即不备份对业务来说不重要的表。

--查看表大小超过10G的大表
col owner for a40
col TABLE_NAME for a60
set linesize 999 pagesize 999
select * from (SELECT OWNER,TABLE_NAME,SUM(tabsize) table_size from (SELECT owner,SEGMENT_NAME as table_name,SUM(BYTES)/1024/1024/1024 as tabsize FROM DBA_SEGMENTS WHERE (OWNER,SEGMENT_NAME) IN (SELECT OWNER,TABLE_NAME FROM DBA_TABLES WHERE OWNER NOT IN  ('SYS','SYSTEM','DBSNMP'))GROUP BY SEGMENT_NAME,ownerunion ALLselect lob.owner,lob.table_name,sum(seg.bytes)/1024/1024/1024 as tabsize from dba_lobs lob,dba_segments seg where lob.segment_name=seg.segment_name and lob.OWNER NOT IN  ('SYS','SYSTEM','DBSNMP') group by lob.owner,lob.table_name) GROUP BY OWNER,TABLE_NAME ORDER  BY 3 DESC)where table_size>10 ;--查询库中记录数大于2千万的所有表,当前用户拥有select any table权限
select table_name, num_rows from dba_tables t where t.owner = upper('hr') and num_rows > 20000000;
或
select table_name, num_rows from all_tables t where t.owner = upper('hr') and num_rows > 20000000;

停止监听

--停止监听
su - oracle
[oracle@dxj ~]$ lsnrctl status
[oracle@dxj ~]$ lsnrctl stop
[oracle@dxj ~]$ lsnrctl status

开启防火墙

--开启防火墙
systemctl start firewalld
systemctl status firewalld
firewall-cmd --list-ports

停止会话

查询会话,如果有业务会话给干掉

--查看不同用户的连接数
select username,count(username) from v$session where username is not null group by username;--查询用户会话
select username,serial#, sid ,status from v$session where username is not null;
select username,status,schemaname,osuser,process,machine,port,program,serial#, sid from v$session where username is not null;
--删除相关用户会话
alter system kill session 'sid,serial#';补充:
--源库杀用户连接 不建议 该步骤慎重 该文档未进行该操作  该方法迫不得已不用
ps -ef|grep LOCAL=NO|awk '{print $2}'|xargs kill -9

锁定业务用户

--查看用户  和现场负责人确定哪些是业务用户,哪些是需要迁的用户
set lin1000 pagesize 999
select username,default_tablespace,temporary_tablespace from dba_users where username not in ('SYS','SYSTEM','HR','OUTLN','MGMT_VIEW','FLOWS_FILES','MDSYS','ORDSYS','EXFSYS','DBSNMP','WMSYS','APPQOSSYS','APEX_030200','OWBSYS_AUDIT','ORDDATA','CTXSYS','ANONYMOUS','SYSMAN','XDB','ORDPLUGINS','OWBSYS','SI_INFORMTN_SCHEMA','OLAPSYS','SCOTT','ORACLE_OCM','XS$NULL','BI','PM','MDDATA','IX','SH','DIP','OE','APEX_PUBLIC_USER','SPATIAL_CSW_ADMIN_USR','SPATIAL_WFS_ADMIN_USR');USERNAME		       DEFAULT_TABLESPACE	      TEMPORARY_TABLESPACE
------------------------------ ------------------------------ ------------------------------
FUWA			       USERS			      TEMP--锁定业务用户
select username,account_status,lock_date from dba_users where username='FUWA';
alter user FUWA account lock;
或
select 'alter user '||username||' account lock;' from dba_users where username in ('FUWA') and ACCOUNT_STATU='OPEN';
执行以上输出结果

查看数据库信息

查看数据库参数

--数据库的创建日期和归档方式    
SELECT to_char(created,'yyyy-mm-dd'), log_mode, log_mode FROM V$database; TO_CHAR(CR LOG_MODE	LOG_MODE
---------- ------------ ------------
2024-05-26 ARCHIVELOG	ARCHIVELOG--查数据库版本
SELECT version FROM product_component_version WHERE substr(product, 1, 6) = 'Oracle'; VERSION
--------------------------------------------------------------------------------
11.2.0.3.0--查看实例名
SQL> select instance_name from v$instance;INSTANCE_NAME
----------------
dxj-- 查看数据库字符集
set linesize 999
col value for a60
select * from nls_database_parameters where PARAMETER in ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
PARAMETER		       VALUE
------------------------------ ----------------------------------------------------------------------------
NLS_CHARACTERSET	       AL32UTF8
NLS_NCHAR_CHARACTERSET	   UTF8select userenv('language') from dual;USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8--查看当前数据库时区
select dbtimezone from dual;
补充:如果不是东八区  alter database set time_zone='+8:00';-- 查看数据库配置参数
set lin 1000 pagesize 999
col NAME for a30
col value for a40
col DISPLAY_VALUE for a40
SELECT name,value,display_value FROM v$parameter
WHERE name IN(
'processes',
'sessions',
'memory_target',
'memory_max_target',
'sga_max_size',
'sga_target',
'pga_aggregate_target'
);NAME			               VALUE					DISPLAY_VALUE
------------------------------ ---------------------------------------- ----------------------------------------
processes		             2000					    2000
sessions		             3022					    3022
sga_max_size		         2650800128				2528M
sga_target		           2650800128				2528M
memory_target		         0					      0
memory_max_target	       0					      0
pga_aggregate_target	   659554304				629M7 rows selected.

查看源数据库DBID、控制文件、数据文件、redo日志文件的存储位置和归档:

--查看源数据库的DBID:
sys@DXJ 2024-01-25 17:21:58> select dbid from v$database;DBID
----------
2712415422--查看控制文件:
sys@DXJ 2024-01-25 17:22:01> select name from v$controlfile;NAME
--------------------------------------------------------------------------------
/oradata/dxj/control01.ctl
/u01/app/oracle/fast_recovery_area/dxj/control02.ctl--查看数据文件:
sys@DXJ 2024-01-25 17:22:52> set linesize 999
sys@DXJ 2024-01-25 17:22:52> col name for a69
sys@DXJ 2024-01-25 17:22:19> select status,name from v$datafile;
STATUS  NAME
------- --------------------------------------------------------------------------------
SYSTEM	/oradata/dxj/system01.dbf
ONLINE	/oradata/dxj/sysaux01.dbf
ONLINE	/oradata/dxj/undotbs01.dbf
ONLINE	/oradata/dxj/users01.dbf
ONLINE	/oradata/dxj/fuwa01.dbf
ONLINE	/oradata/dxj/top01.dbf6 rows selected.--查看日志文件:
--查看redo log大小和位置
set linesize 999
col member for a60
select b.thread#,a.group#,a.member,bytes/1024/1024,b.members,b.status from v$logfile a,v$log b where a.group#=b.group#;	 --查看归档模式
sys@DXJ 2024-05-27 10:14:02> archive log list;
Database log mode	       Archive Mode
Automatic archival	       Enabled
Archive destination	       /oradata/archivelog
Oldest online log sequence     5
Next log sequence to archive   7
Current log sequence	       7

源数据库服务器

rman备份源数据库

文件多的场景加section size

大文件切片 多开并行,优化速度,前提是存储牛逼,不然加了也没啥作用

评估:备份时间,传输时间,恢复时间,遇到问题

[oracle@dxj:/data/rman_bak]$ cat /data/rman_bak.sh 
#!/bin/bash
source /home/oracle/.bash_profile
export NLS_DATE_FORMAT='YYYYMMDD hh24:mi:ss'
rq=`date +%Y%m%d`
bakdir=/data/rman_bak/${rq}
autobak=/data/rman_bak/autobackup
if [ ! -d ${bakdir} ];
then mkdir -p ${bakdir}
fi
if [ ! -d ${autobak} ];
then mkdir -p ${autobak}
fi
cd $ORACLE_HOME/bin
./rman log $bakdir/rman${rq}.log target /  <<EOF
run { 
allocate channel c1 type disk; 
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
backup incremental level 0 as compressed backupset section size 10g format='${autobak}/emrdb_full_%U_%d_%T_%s' database;
sql 'alter system switch logfile';
backup as compressed backupset section size 10g  archivelog from time 'sysdate-1/12'  format='${autobak}/emrdb_arc_%U_%d_%T_%s';
BACKUP CURRENT CONTROLFILE format '${autobak}/emrdb_ctl_bk_%U_%d_%T' ;
release channel c1; 
release channel c2;
release channel c3;
release channel c4; 
} 
exit; 
EOFchmod +x /data/rman_bak.sh
nohup sh /data/rman_bak.sh  &参数说明:sysdate-1/12   :2小时之前的归档。%U_%d_%T_%s
%U:默认是%u_%p_%c的简写形式,利用它可以为每一个备份片段(即磁盘文件)生成一个唯一名称,这是最常用的命名方式,执行不同备份操作时,生成的规则也不同,如下所示:生成备份片段时,%U=%u_%p_%c;
%u:是一个由备份集编号和建立时间压缩后组成的8字符名称。利用%u可以为每个备份集生成一个唯一的名称。
%p:备份集中备份片段的编号,从1开始。
%c:备份片段的复制数(从1开始编号,最大不超过256)。
%d:Oracle数据库名称。
%T:当前时间的年月日格式(YYYYMMDD)。
%s:备份集号。 rman备份有时间点,和scn 记录一下,恢复的时候按时间点和scn恢复就行了

通过rman进行一次全备:
vi rman_bak_L0.sh
#************************************************************************ 
#*** rman_bak_L0.sh *** 
#************************************************************************ 
#!/bin/bash
source /home/oracle/.bash_profile
rq=`date +%Y%m%d`
bakdir=/topsoft/rmanbak/${rq}
autobak=/topsoft/rmanbak/autobackup
if [ ! -d ${bakdir} ];
then mkdir -p ${bakdir}
fi
if [ ! -d ${autobak} ];
then mkdir -p ${autobak}
fi
cd $ORACLE_HOME/bin 
./rman target / log=$bakdir/rmanfull_${rq}.log   <<EOF
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '${autobak}/%F';
run { 
allocate channel c1 type disk; 
allocate channel c2 type disk;
allocate channel c3 type disk; 
allocate channel c4 type disk;
allocate channel c5 type disk; 
allocate channel c6 type disk;
sql 'alter system archive log current';
backup as compressed backupset incremental level 0 database tag 'dbfull' format '${autobak}/backlv0_%d_%T_%t_%s_%p.bak';
sql 'alter system archive log current';
backup as compressed backupset archivelog all tag 'arch' format '${autobak}/arch_%d_%T_%t_%s_%p.bak';
backup current controlfile format '${autobak}/ctl_%d_%T_%t_%s_%p.bak';
release channel c1; 
release channel c2;
release channel c3; 
release channel c4;
release channel c5; 
release channel c6;
} 
report obsolete; 
crosscheck backup;
crosscheck archivelog all;
delete noprompt obsolete;
delete noprompt expired backup;
list backup summary; 
exit; 
EOF【注意:控制文件一定要最后备份,由于没做归档目录数据库,rman备份信息都放在控制文件里面,要保证备份过程的信息内容都进入到控制文件,保证数据文件和控制文件是一致备份】分别列出参数文件备份,控制文件备份,数据文件备份,以及归档备份的名字:
a.参数文件备份如下:
RMAN> list backup of spfile;using target database control file instead of recovery catalogList of Backup Sets
===================BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
51      Full    9.36M      DISK        00:00:00     25-JAN-24      BP Key: 51   Status: AVAILABLE  Compressed: NO  Tag: TAG20240125T180503Piece Name: /topsoft/rmanbak/autobackup/c-2492862311-20240125-06SPFILE Included: Modification time: 25-JAN-24SPFILE db_unique_name: dxjb.控制文件备份如下:
RMAN> list backup of controlfile;List of Backup Sets
===================BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
51      Full    9.36M      DISK        00:00:00     25-JAN-24      BP Key: 51   Status: AVAILABLE  Compressed: NO  Tag: TAG20240125T180503Piece Name: /topsoft/rmanbak/autobackup/c-2492862311-20240125-06Control File Included: Ckp SCN: 2895135      Ckp time: 25-JAN-24c.数据文件备份如下:
RMAN> list backup of database;
d.列出归档备份如下:
RMAN> list backup of archivelog all;

备份参数文件

create pfile='/home/oracle/initdxj20240529.ora' from spfile;

备份密码文件

密码文件位置:$ORACLE_HOME/dbs

cp /u01/app/oracle/product/11.2.0/db/dbs/orapwdxj /home/oracle/

将rman备份文件、参数文件和密码文件copy至目标机器

如果端口不是默认的22,需加-P port_value

--拷贝rman备份文件
scp -r /data/rman_bak/autobackup oracle@192.168.40.200:/home/oracle/--拷贝参数文件
scp  /home/oracle/initdxj20240529.ora oracle@192.168.40.200:/home/oracle/--拷贝密码文件
scp  /home/oracle/orapwdxj oracle@192.168.40.200:/home/oracle/

目标数据库服务器

在RAC的orcl01机器上进行单机数据库的恢复

如果目标服务器已经新创建了dxj实例,需使用以下命令进行删除,删除后再进行如下恢复操作。

这里需要注意下,RAC和单点的静默删除实例命令是有区别的。

注意事项:

(1)RMAN 异机恢复的db_name 必须和备份的一致,如果说想改成其他名称,可以等还原之后,在用nid 命令修改。

(2)控制文件需要指定到共享设备上

(3)检查audit_file_dest,background_dump_dest, core_dump_dest,log_archive_dest_1,user_dump_dest等参数的位置。 如果2个节点和共享位置没有对应的目录,先把目录建好。

--RAC静默删除实例
dbca -silent -deleteDatabase -sourceDB dxj  -nodeinfo orcl01,orcl02--单点静默删除实例
dbca -silent -deleteDatabase -sourcedb dxj \
-sid dxj

修改参数文件

如果源服务器和目标服务器安装目录和数据目录都相同,该步骤可忽略。不然按如下步骤更改。

修改目录

参数文件中

.audit_file_dest为$ORACLE_BASE目录/admin/dxj/adump

.control_files中control01.ctl 和control02.ctl 路径为+DATA/dxj/

.db_recovery_file_dest为+DATA

.diagnostic_dest为$ORACLE_BASE目录

--备份已备份的参数文件,避免改的有问题重新从源库服务器传输到目标库服务器
cd /home/oracle
cp initdxj20240529.ora initdxj20240529.ora_bak--更改参数文件中的oracle_base目录为目标库的oracle_base目录  控制文件路径等路径
vi /home/oracle/initdxj20240529.ora语法说明:
:%s#源目录#新目录#g

修改内存相关参数

如果源服务器和目标服务器配置都相同,该步骤可忽略。不然按如下步骤更改。

由于目标服务器32G和源服务器内存128G差异大,需要更改内存参数。

内存参数修改公式:

--sga和pga配置的最佳实践

对于OLTP系统来说,oracle建议是sga=系统内存*0.8*0.8 单位字节

pga=系统内存*0.8*0.2

对于DSS系统来说,oracle建议是sga=系统内存*0.8*0.5 单位字节

pga=系统内存*0.8*0.5

修改版本兼容性参数

*.compatible='11.2.0.0.0'
更改为
*.compatible='11.2.0.4.0'

pfile的参数文件中*.compatible='11.2.0.0.0'一定要更改为目标端数据库版本*.compatible='11.2.0.4.0',不然后面通过pfile生成spfile文件会提示磁盘不存在或未挂载。该步骤在单点11.2.0.3向单点11.2.0.4备份恢复场景中不执行也没事,单点11.2.0.3向集群11.2.0.4备份恢复场景中务必要执行该步骤。

去掉参数

dxj.__db_cache_size=2113929216
dxj.__java_pool_size=16777216
dxj.__large_pool_size=16777216
dxj.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
dxj.__pga_aggregate_target=671088640
dxj.__sga_target=2650800128
dxj.__shared_io_pool_size=0
dxj.__shared_pool_size=486539264
dxj.__streams_pool_size=0*.undo_tablespace='UNDOTBS1'

增加参数

*.cluster_database=false

要先设置为flase,才能进行RMAN 恢复操作。恢复完成在改成true。

*.undo_management='AUTO'
*.cluster_database_instances=2
*.cluster_database=false
dxj2.thread=2
dxj1.thread=1
dxj2.undo_tablespace='UNDOTBS2'
dxj1.undo_tablespace='UNDOTBS1'
dxj2.instance_number=2
dxj1.instance_number=1

最终更改后的参数文件

[oracle@orcl01:/home/oracle]$ cat initdxj20240529.ora
*._b_tree_bitmap_plans=FALSE
*._cleanup_rollback_entries=2000
*._datafile_write_errors_crash_instance=FALSE
*._index_partition_large_extents='FALSE'
*._memory_imm_mode_without_autosga=FALSE
*._optimizer_adaptive_cursor_sharing=FALSE
*._optimizer_extended_cursor_sharing='NONE'
*._optimizer_extended_cursor_sharing_rel='NONE'
*._optimizer_null_aware_antijoin=FALSE
*._optimizer_use_feedback=FALSE
*._partition_large_extents='FALSE'
*._PX_use_large_pool=TRUE
*._undo_autotune=FALSE
*._use_adaptive_log_file_sync='FALSE'
*.audit_file_dest='/u01/app/oracle/admin/dxj/adump'
*.audit_trail='NONE'
*.compatible='11.2.0.4.0'
*.control_file_record_keep_time=31
*.control_files='+DATA/dxj/control01.ctl','+DATA/dxj/control02.ctl'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_domain=''
*.db_files=5000
*.db_name='dxj'
*.db_recovery_file_dest='+DATA'
*.db_recovery_file_dest_size=4322230272
*.deferred_segment_creation=FALSE
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=dxjXDB)'
*.enable_ddl_logging=TRUE
*.event='28401 trace name context forever,level 1','10949 trace name context forever,level 1'
*.log_archive_dest_1='location=+ARCH/dxj'
*.log_archive_format='%t_%s_%r.dbf'
*.open_cursors=1000
*.parallel_max_servers=64
*.pga_aggregate_target=659554304
*.processes=2000
*.remote_login_passwordfile='EXCLUSIVE'
*.resource_limit=TRUE
*.resource_manager_plan='force:'
*.sec_case_sensitive_logon=FALSE
*.session_cached_cursors=300
*.sga_max_size=2638217216
*.sga_target=2638217216
*.undo_retention=10800
*.undo_management='AUTO'
*.cluster_database_instances=2
*.cluster_database=false
dxj2.thread=2
dxj1.thread=1
dxj2.undo_tablespace='UNDOTBS2'
dxj1.undo_tablespace='UNDOTBS1'
dxj2.instance_number=2
dxj1.instance_number=1

目标服务器上创建相应的目录

ORACLE_BASE目录不要创建,因为数据库软件已安装。源库和目标库ORACLE_BASE目录不同采用更改目标库参数文件中ORACLE_BASE目录的方法。

窗口1:在ASM共享磁盘DATA盘中建立+DATA/dxj目录

--在ASM中建立+DATA/DXJ目录
su - grid
asmcmd
cd DATA
mkdir DXJ--在ASM中建立+ARCH/DXJ目录
su - grid
asmcmd
cd ARCH
mkdir DXJ

窗口2:查看参数文件

cat /home/oracle/initdxj20240529.ora

窗口3:创建参数文件中的目录

--所有节点都操作
mkdir -p /u01/app/oracle/admin/dxj/adump

通过pfile文件将数据库启动到nomount状态

[oracle@orcl01:/home/oracle]$ export ORACLE_SID=dxj1
[oracle@orcl01:/home/oracle]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Fri Dec 12 20:39:56 2014
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to an idle instance.SQL> startup nomount pfile='/home/oracle/initdxj20240529.ora';

用pfile生成spfile文件(勿忘记)

用修改的pfile 来创建spfile,注意放在共享设备上

数据库中用pfile生成spfile文件

--数据库中用pfile生成spfile文件
SQL> create spfile='+DATA/DXJ/spfiledxj.ora' from pfile='/home/oracle/initdxj20240529.ora';

所有节点本地生成spfilesid.ora文件的映射文件initsid.ora

本地生成spfilesid.ora文件的映射文件initsid.ora 该步骤必须操作不然再次启库还是pfile方式启库的

--节点1
[oracle@orcl01:/home/oracle]$ cd $ORACLE_HOME/dbs
[oracle@orcl01:/u01/app/oracle/product/11.2.0/db/dbs]$ 
echo "SPFILE='+DATA/DXJ/spfiledxj.ora'" > initdxj1.ora--节点2
[oracle@orcl02:/home/oracle]$ cd $ORACLE_HOME/dbs
[oracle@orcl02:/u01/app/oracle/product/11.2.0/db/dbs]$ cat initdxj2.ora
echo "SPFILE='+DATA/DXJ/spfiledxj.ora'" > initdxj2.ora

重启库至nomount

--重启库至nomount
SQL> shutdown abort;
SQL> startup nomount;  --启动到nomount状态
ORACLE instance started.Total System Global Area 2638954496 bytes
Fixed Size		    2256152 bytes
Variable Size		 1258291944 bytes
Database Buffers	 1375731712 bytes
Redo Buffers		    2674688 bytes

验证启库是通过spfile文件方式

--验证启库是通过spfile文件方式
SQL> set linesize 999
SQL> show parameter pfile;NAME				     TYPE			       VALUE
------------------------------------ --------------------------------- ------------------------------
spfile				     string			       +DATA/dxj/spfiledxj.ora

问题处理

通过pfile生成spfile失败,提示DATA磁盘不存在ORA-15204&ORA-15001&ORA-17502
--问题描述
通过pfile生成spfile失败,提示DATA磁盘不存在
SQL> create spfile='+DATA/DXJ/spfiledxj.ora' from pfile='/home/oracle/initdxj20240529.ora';
create spfile='+DATA/DXJ/spfiledxj.ora' from pfile='/home/oracle/initdxj20240529.ora'
*
ERROR at line 1:
ORA-17502: ksfdcre:4 Failed to create file +DATA/DXJ/spfiledxj.ora
ORA-15001: diskgroup "DATA" does not exist or is not mounted
ORA-15204: database version 11.2.0.0.0 is incompatible with diskgroup DATA--分析过程
查看磁盘状态  data磁盘状态时mounted,说明没问题
su - grid
sqlplus / as sysdba
SQL> col name for a30
SQL> select name,state from v$asm_diskgroup;NAME			       STATE
------------------------------ ---------------------------------
ARCH			       MOUNTED
DATA			       MOUNTED
OCR			         MOUNTED查看集群状态
[grid@orcl01:/home/grid]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ARCH.dgONLINE  ONLINE       orcl01ONLINE  ONLINE       orcl02
ora.DATA.dgONLINE  ONLINE       orcl01ONLINE  ONLINE       orcl02
ora.LISTENER.lsnrONLINE  ONLINE       orcl01ONLINE  ONLINE       orcl02
ora.OCR.dgONLINE  ONLINE       orcl01ONLINE  ONLINE       orcl02
ora.asmONLINE  ONLINE       orcl01                   StartedONLINE  ONLINE       orcl02                   Started
......               查看oracle文件权限  权限也对
[grid@orcl01:/u01/app/11.2.0/grid/bin]$ ls -l $ORACLE_HOME/bin/oracle
-rwsr-s--x. 1 grid oinstall 209840352 Aug 18  2023 /u01/app/11.2.0/grid/bin/oracle查看oracle用户信息  oracle用户组也对
[oracle@orcl01:/home/oracle]$ id oracle
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54330(racdba),54327(asmdba),54328(asmoper),54329(asmadmin)查看参数文件
[oracle@orcl01:/home/oracle]$ cat initdxj20240529.ora
......
*.compatible='11.2.0.0.0'
......--解决办法
将参数文件/home/oracle/initdxj20240529.ora中*.compatible='11.2.0.0.0'改成*.compatible='11.2.0.4.0'
重启库解决
su - oracle
sqlplus / as sysdba
shutdown abort
startup nomount pfile='/home/oracle/initdxj20240529.ora';
create spfile='+DATA/DXJ/spfiledxj.ora' from pfile='/home/oracle/initdxj20240529.ora';
成功

创建密码文件

在所有节点执行,注意密码要和原库一样

--节点1
[oracle@orcl01:/home/oracle]$ orapwd file=?/dbs/orapwdxj1 password=oracle--节点2
[oracle@orcl02:/home/oracle]$ orapwd file=?/dbs/orapwdxj2 password=oracle

恢复控制文件

源库和目标库的控制文件路径虽然不一样,但是在更改参数文件的参数文件位置后,恢复控制文件过程中会把控制文件恢复到已更改的参数文件指定的控制文件路径。

[oracle@orcl01:/home/oracle]$ export ORACLE_SID=dxj1
[oracle@orcl01:/home/oracle]$ rman target /Recovery Manager: Release 11.2.0.4.0 - Production on Wed May 29 15:47:04 2024Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.connected to target database: DXJ (not mounted)RMAN> restore controlfile from '/home/oracle/autobackup/emrdb_ctl_bk_092rrir9_1_1_DXJ_20240527';Starting restore at 29-MAY-24
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=30 device type=DISKchannel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=+DATA/dxj/control01.ctl
output file name=+DATA/dxj/control02.ctl
Finished restore at 29-MAY-24--启库到mount状态
RMAN> alter database mount;database mounted
released channel: ORA_DISK_1

恢复数据文件

由于RAC下使用的是OMF路径,所以先用脚本查询出源库中的数据文件名以及路径
sqlplus 执行

数据文件的转换,由于目标 rac 库是 asm 存储的,所以到新环境需要采用 set newname 来转换一下

可通过RMAN重命名数据文件、临时文件、日志文件,进行还原

补充:catalog的原理是查文件头,里面 文件号 相对文件号 scn,目的就是把信息取出来,写到ctl的rman那一部分,就是建个档 不明白

生成数据文件转换脚本

源库中执行

--数据文件转换脚本
set pagesize 200 linesize 200
select 'set newname for datafile ' || a.FILE# || ' to "' || '+DATA' || '";'
from v$datafile a
union all
select 'set newname for tempfile ' || a.FILE# || ' to "' || '+DATA' || '";'
from v$tempfile a
union all
SELECT 'SQL "ALTER DATABASE RENAME FILE ''''' || a.MEMBER || ''''' to ''''' ||
'+DATA' || ''''' ";'
FROM v$logfile a;--输出结果
'SETNEWNAMEFORDATAFILE'||FILE_ID||'TO'''||'+DATA'||''';'
-----------------------------------------------------------------------------
set newname for datafile 4 to '+DATA';
set newname for datafile 3 to '+DATA';
set newname for datafile 2 to '+DATA';
set newname for datafile 1 to '+DATA';
set newname for datafile 5 to '+DATA';
set newname for datafile 6 to '+DATA';6 rows selected.--日志文件转换脚本
select 'set newname for tempfile '||file_id||' to '''||'+DATA'||''';' from dba_temp_files;输出结果
'SETNEWNAMEFORTEMPFILE'||FILE_ID||'TO'''||'+DATA'||''';'
-----------------------------------------------------------------------------
set newname for tempfile 1 to '+DATA';

还原数据文件

加载备份目录下的备份集
--加载备份目录下的备份集
[oracle@orcl01:/home/oracle]$ export ORACLE_SID=dxj1
[oracle@orcl01:/home/oracle]$ rman target /
RMAN> catalog start with '/home/oracle/autobackup/';searching for all files that match the pattern /home/oracle/autobackup/List of Files Unknown to the Database
=====================================
File Name: /home/oracle/autobackup/emrdb_full_022rripo_1_1_DXJ_20240527_2
File Name: /home/oracle/autobackup/emrdb_full_012rripo_1_1_DXJ_20240527_1
File Name: /home/oracle/autobackup/emrdb_full_032rripo_1_1_DXJ_20240527_3
File Name: /home/oracle/autobackup/emrdb_full_042rripo_1_1_DXJ_20240527_4
File Name: /home/oracle/autobackup/emrdb_full_052rripr_1_1_DXJ_20240527_5
File Name: /home/oracle/autobackup/emrdb_arc_062rrir8_1_1_DXJ_20240527_6
File Name: /home/oracle/autobackup/emrdb_arc_072rrir8_1_1_DXJ_20240527_7
File Name: /home/oracle/autobackup/emrdb_arc_082rrir8_1_1_DXJ_20240527_8
File Name: /home/oracle/autobackup/emrdb_ctl_bk_092rrir9_1_1_DXJ_20240527Do you really want to catalog the above files (enter YES or NO)? yes
cataloging files...
cataloging doneList of Cataloged Files
=======================
File Name: /home/oracle/autobackup/emrdb_full_022rripo_1_1_DXJ_20240527_2
File Name: /home/oracle/autobackup/emrdb_full_012rripo_1_1_DXJ_20240527_1
File Name: /home/oracle/autobackup/emrdb_full_032rripo_1_1_DXJ_20240527_3
File Name: /home/oracle/autobackup/emrdb_full_042rripo_1_1_DXJ_20240527_4
File Name: /home/oracle/autobackup/emrdb_full_052rripr_1_1_DXJ_20240527_5
File Name: /home/oracle/autobackup/emrdb_arc_062rrir8_1_1_DXJ_20240527_6
File Name: /home/oracle/autobackup/emrdb_arc_072rrir8_1_1_DXJ_20240527_7
File Name: /home/oracle/autobackup/emrdb_arc_082rrir8_1_1_DXJ_20240527_8
File Name: /home/oracle/autobackup/emrdb_ctl_bk_092rrir9_1_1_DXJ_20240527
更改控制文件中数据文件和临时文件的名称并还原数据库

注意,对switch的说明:

对于nocatalog 模式下,rman备份的信息是保存在控制文件里的,包括文件的路径信息。 这里的switch的作用,就是更新控制文件里的信息。

restore 的时候不会对temp 表空间进行restore。所以等restore 之后,我们需要手工创建temp表空间。

不过在这个测试里,我们还是对tempfile 进行了指定。 但是这个操作只更新控制文件,不恢复数据文件。

--更改控制文件中数据文件和临时文件的名称,还原数据库
RMAN>
run {
set newname for datafile 4 to '+DATA';
set newname for datafile 3 to '+DATA';
set newname for datafile 2 to '+DATA';
set newname for datafile 1 to '+DATA';
set newname for datafile 5 to '+DATA';
set newname for datafile 6 to '+DATA';
set newname for tempfile 1 to '+DATA';
restore database;
switch datafile all;
switch tempfile all;
}

详细过程如下:

RMAN>run {
set newname for datafile 4 to '+DATA';
set newname for datafile 3 to '+DATA';
set newname for datafile 2 to '+DATA';
set newname for datafile 1 to '+DATA';
set newname for datafile 5 to '+DATA';
set newname for datafile 6 to '+DATA';
set newname for tempfile 1 to '+DATA';
restore database;
switch datafile all;
switch tempfile all;
10> 11> 12> }executing command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEStarting restore at 29-MAY-24
using channel ORA_DISK_1channel 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 00003 to +DATA
channel ORA_DISK_1: restoring datafile 00005 to +DATA
channel ORA_DISK_1: reading from backup piece /home/oracle/autobackup/emrdb_full_032rripo_1_1_DXJ_20240527_3
channel ORA_DISK_1: piece handle=/home/oracle/autobackup/emrdb_full_032rripo_1_1_DXJ_20240527_3 tag=TAG20240527T102352
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
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 00002 to +DATA
channel ORA_DISK_1: restoring datafile 00006 to +DATA
channel ORA_DISK_1: reading from backup piece /home/oracle/autobackup/emrdb_full_022rripo_1_1_DXJ_20240527_2
channel ORA_DISK_1: piece handle=/home/oracle/autobackup/emrdb_full_022rripo_1_1_DXJ_20240527_2 tag=TAG20240527T102352
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:15
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 +DATA
channel ORA_DISK_1: restoring datafile 00004 to +DATA
channel ORA_DISK_1: reading from backup piece /home/oracle/autobackup/emrdb_full_012rripo_1_1_DXJ_20240527_1
channel ORA_DISK_1: piece handle=/home/oracle/autobackup/emrdb_full_012rripo_1_1_DXJ_20240527_1 tag=TAG20240527T102352
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:35
Finished restore at 29-MAY-24datafile 1 switched to datafile copy
input datafile copy RECID=7 STAMP=1170261654 file name=+DATA/dxj/datafile/system.266.1170261619
datafile 2 switched to datafile copy
input datafile copy RECID=8 STAMP=1170261654 file name=+DATA/dxj/datafile/sysaux.270.1170261603
datafile 3 switched to datafile copy
input datafile copy RECID=9 STAMP=1170261654 file name=+DATA/dxj/datafile/undotbs1.272.1170261601
datafile 4 switched to datafile copy
input datafile copy RECID=10 STAMP=1170261654 file name=+DATA/dxj/datafile/users.265.1170261619
datafile 5 switched to datafile copy
input datafile copy RECID=11 STAMP=1170261654 file name=+DATA/dxj/datafile/fuwa.274.1170261601
datafile 6 switched to datafile copy
input datafile copy RECID=12 STAMP=1170261654 file name=+DATA/dxj/datafile/top.263.1170261605renamed tempfile 1 to +DATA in control file

recover 数据库

在执行restore的节点执行,因为备份文件在该节点上。

RMAN> recover database;

详细过程如下:

RMAN> recover database;Starting recover at 29-MAY-24
using channel ORA_DISK_1starting media recoverychannel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=7
channel ORA_DISK_1: reading from backup piece /home/oracle/autobackup/emrdb_arc_072rrir8_1_1_DXJ_20240527_7
channel ORA_DISK_1: piece handle=/home/oracle/autobackup/emrdb_arc_072rrir8_1_1_DXJ_20240527_7 tag=TAG20240527T102440
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=+ARCH/dxj/1_7_1170009408.dbf thread=1 sequence=7
channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=8
channel ORA_DISK_1: reading from backup piece /home/oracle/autobackup/emrdb_arc_082rrir8_1_1_DXJ_20240527_8
channel ORA_DISK_1: piece handle=/home/oracle/autobackup/emrdb_arc_082rrir8_1_1_DXJ_20240527_8 tag=TAG20240527T102440
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=+ARCH/dxj/1_8_1170009408.dbf thread=1 sequence=8
unable to find archived log
archived log thread=1 sequence=9
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 05/29/2024 16:48:36
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 9 and starting SCN of 1079971

这里是提醒恢复到一个未知的scn号。 因为这部分SCN 还在online redo里,可以在alter database mount之后,通过set until scn或者set until time命令设置恢复到的scn号或时间,

--在RAC的orcl01机器上recover数据库到最后一个归档日志的sequence+1
RMAN> recover database until  sequence 9;

或者把源库的这些文件在copy过来,在应用一下。就可以避免这个错误。

--将源库剩下的归档拷贝到新集群节点1上
[oracle@dxj:/home/oracle]$ scp -r /oradata/archivelog oracle@192.168.40.200:/home/oracle/--将源库的online redo 拷贝到新集群节点1上
[oracle@dxj:/oradata/dxj]$ scp /oradata/dxj/redo* oracle@192.168.40.200:/home/oracle/
重新注册归档文件和online redo log,并同步数据
注册归档文件

如果有归档,需要从单机复制到RAC 节点上,但RAC节点的数据库并没有相关记录。所以需要先将归档文件注册到控制文件里。 然后才能使用。

RMAN> catalog archivelog '/home/oracle/archivelog/1_10_1170009408.dbf' ,'/home/oracle/archivelog/1_11_1170009408.dbf' ,'/home/oracle/archivelog/1_12_1170009408.dbf' ,'/home/oracle/archivelog/1_13_1170009408.dbf' ,'/home/oracle/archivelog/1_5_1170009408.dbf' ,'/home/oracle/archivelog/1_6_1170009408.dbf' ,'/home/oracle/archivelog/1_7_1170009408.dbf' ,'/home/oracle/archivelog/1_8_1170009408.dbf' ,'/home/oracle/archivelog/1_9_1170009408.dbf','/home/oracle/archivelog/1_14_1170009408.dbf';

详细过程如下:

RMAN> catalog archivelog '/home/oracle/archivelog/1_10_1170009408.dbf' ,'/home/oracle/archivelog/1_11_1170009408.dbf' ,'/home/oracle/archivelog/1_12_1170009408.dbf' ,'/home/oracle/archivelog/1_13_1170009408.dbf' ,'/home/oracle/archivelog/1_5_1170009408.dbf' ,'/home/oracle/archivelog/1_6_1170009408.dbf' ,'/home/oracle/archivelog/1_7_1170009408.dbf' ,'/home/oracle/archivelog/1_8_1170009408.dbf' ,'/home/oracle/archivelog/1_9_1170009408.dbf';cataloged archived log
archived log file name=/home/oracle/archivelog/1_10_1170009408.dbf RECID=7 STAMP=1170263152
cataloged archived log
archived log file name=/home/oracle/archivelog/1_11_1170009408.dbf RECID=8 STAMP=1170263152
cataloged archived log
archived log file name=/home/oracle/archivelog/1_12_1170009408.dbf RECID=9 STAMP=1170263152
cataloged archived log
archived log file name=/home/oracle/archivelog/1_13_1170009408.dbf RECID=10 STAMP=1170263152
cataloged archived log
archived log file name=/home/oracle/archivelog/1_5_1170009408.dbf RECID=11 STAMP=1170263152
cataloged archived log
archived log file name=/home/oracle/archivelog/1_6_1170009408.dbf RECID=12 STAMP=1170263152
cataloged archived log
archived log file name=/home/oracle/archivelog/1_7_1170009408.dbf RECID=13 STAMP=1170263152
cataloged archived log
archived log file name=/home/oracle/archivelog/1_8_1170009408.dbf RECID=14 STAMP=1170263152
cataloged archived log
archived log file name=/home/oracle/archivelog/1_9_1170009408.dbf RECID=15 STAMP=1170263152
移动online redo log到对应位置
--源库切换日志  
idle 29-MAY-24> alter system checkpoint;
idle 29-MAY-24> alter system switch logfile;System altered.--查看源库redo log位置
sys@DXJ 2024-01-25 17:22:52> set linesize 999
sys@DXJ 2024-01-25 17:23:55> col member for a70
sys@DXJ 2024-01-25 17:24:05> select * from v$logfile;3	   ONLINE  /oradata/dxj/redo03.log						  NO2	   ONLINE  /oradata/dxj/redo02.log						  NO1	   ONLINE  /oradata/dxj/redo01.log						  NOidle 29-MAY-24> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.--在RAC上把online redo log日志放入到对应的位置(目录位置必须还原来单实例目录一致)
mkdir -p /oradata/dxj/
mv /home/oracle/redo*.log /oradata/dxj/
再次执行recover 操作
RMAN> recover database;

详细过程:

RMAN> recover database;Starting recover at 29-MAY-24
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=29 device type=DISKstarting media recoveryarchived log for thread 1 with sequence 14 is already on disk as file /oradata/dxj/redo02.log
archived log for thread 1 with sequence 15 is already on disk as file /oradata/dxj/redo03.log
archived log file name=/oradata/dxj/redo02.log thread=1 sequence=14
archived log file name=/oradata/dxj/redo03.log thread=1 sequence=15
media recovery complete, elapsed time: 00:00:00
Finished recover at 29-MAY-24

注意:这次是第二次进行recover database,这里会copy过来的日志全部应用了,并且,注意这里是完全恢复,也就说这里没有数据丢失,不需要用open resetlogs来打开数据库。

重置归档位置

如果在参数文件中已设置正确,该步骤可忽略

SQL> alter system set log_archive_dest_1='LOCATION=+ARCH' SID='*';

处理online redo

RAC的redo是需要存放在共享设备上的,所以这里需要进行一些转换操作:把单机的在线日志路径修改为ASM路径。

--生成online redo转换脚本
SELECT 'SQL "ALTER DATABASE RENAME FILE ''''' || a.MEMBER || ''''' to ''''' ||
'+DATA' || ''''' ";'
FROM v$logfile a;'SQL"ALTERDATABASERENAMEFILE'''''||A.MEMBER||'''''TO'''''||'+DATA'||'''''";'
--------------------------------------------------------------------------------
SQL "ALTER DATABASE RENAME FILE ''/oradata/dxj/redo03.log'' to ''+DATA'' ";
SQL "ALTER DATABASE RENAME FILE ''/oradata/dxj/redo02.log'' to ''+DATA'' ";
SQL "ALTER DATABASE RENAME FILE ''/oradata/dxj/redo01.log'' to ''+DATA'' ";--rman中执行上面输出的语句

这里只是更改了online redo的记录,实际上文件并没有生成,当open db的时候,会自动创建online redo log。

RESETLOGS打开数据库

SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-39700: database must be opened with UPGRADE option
Process ID: 28383
Session ID: 32 Serial number: 53

解决办法:

目标库重新登陆按如下执行(执行catupgrd.sql完后实例会自动shutdown,之后直接startup的过程不再需要resetlogs了)。不要多窗口并行执行脚本,会引发死锁,该过程比较耗时。

export ORACLE_SID=dxj1
sqlplus / as sysdba
sql>startup upgrade;

执行脚本

不要多窗口并行执行脚本,会引发死锁,该过程比较耗时。

sql>@?/rdbms/admin/catalog.sql     --这个脚本执行很快就结束了
sql>@?/rdbms/admin/catproc.sql     --这个脚本执行大概3-5分钟
sql>@?/rdbms/admin/catupgrd.sql    --这个脚本执行时间比较久,脚本执行结束会shutdown immediate;

脚本说明:

主要用于创建数据字典视图。其中,脚本catalog.sql 和 catproc.sql 是创建数据库后必须要运行的两个脚本。
catalog.sql 创建系统常用的数据字典视图和同义词
catproc.sql 运行服务器端所需要的PL/SQL脚本
(1) catalog.sql
该脚本创建相对于系统基表的视图和系统动态性能视图以及他们的同义词。该脚本又同时运行创建其他对象的脚本,主要有:
基本PL/SQL环境,包括PL/SQL的声明:
- 数据类型
- 预定义例外
- 内建的过程和函数
- SQL操作等

- 审计
- 导入/导出
- SQL*Loader
- 安装选项

(2)catproc.sql
该脚本主要用于建立PL/SQL功能的使用环境。此外,还创建几个PL/SQL包用于扩展RDBMS功能。该脚本同时还为下面的一些RDBMS功能创建另外的一些包和视图:

-警告(Alerts)
-管道(Pipes)
-日志分析(LogMiner)
-大对象(Large objects)
-对象(Objects)
- 高级队列(Advanced queuing)
-复制选项( Replication option)
-其他的一些内建包和选项(Other built-ins and options)

(3) catupgrd.sql

随着Oracle版本的升级,某些对象的属性需要改变,而这些改变操作都将体现在升级脚本catupgrd.sql中

启库

idle 29-MAY-24> startup
ORACLE instance started.Total System Global Area 2638954496 bytes
Fixed Size		    2256152 bytes
Variable Size		 1476395752 bytes
Database Buffers	 1157627904 bytes
Redo Buffers		    2674688 bytes
Database mounted.
Database opened.

查看版本

idle 29-MAY-24> select * from v$version;BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE	11.2.0.4.0	Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

数据量查看

--查看数据库
SQL> select sum(bytes)/1024/1024/1024 as "size(G)" from dba_data_files;size(G)
----------
1.87988281  比原来大--查看总大小
select round(sum(bytes) / 1024 / 1024 / 1024, 2) || 'G'from dba_segments;ROUND(SUM(BYTES)/1024/1024/1024,2)||'G'
-----------------------------------------
1.83G--每个业务用户下的总对象数量校验
SELECT D.OWNER,COUNT(1)FROM dba_objects dWHERE d.OWNER   in ('FUWA')AND NOT EXISTS (SELECT 1 FROM DBA_RECYCLEBIN B WHERE B.object_name=D.OBJECT_NAME AND D.OWNER=B.owner) GROUP BY D.OWNERORDER BY D.OWNER ;OWNER				 COUNT(1)
------------------------------ ----------
FUWA					1--每个业务用户下的各个对象类别的数量校验
SQL> select OWNER,OBJECT_TYPE,status,count(OBJECT_NAME) from dba_objects  where owner in ('FUWA')  group by OBJECT_TYPE,owner,status order by 1,3,2;OWNER			       OBJECT_TYPE	   STATUS  COUNT(OBJECT_NAME)
------------------------------ ------------------- ------- ------------------
FUWA			       TABLE		   VALID		    1

数据库配置更改

修改参数

--在RAC的orcl01机器上修改参数,修改数据库的实例数目,为每个实例命名,并使每个实例拥有独立的thread
alter system set cluster_database=true scope=spfile;
alter system set cluster_database_instances=2 scope=spfile;
alter system set instance_number=1 scope=spfile sid='dxj1';
alter system set instance_number=2 scope=spfile sid='dxj2';
alter system set thread=1 scope=spfile sid='dxj1';
alter system set thread=2 scope=spfile sid='dxj2';--在RAC的orcl01机器上启动第二个thread
alter database enable thread 2;

undo tablespace

在RAC的orcl01机器上修改参数,使每个实例有独立的undo tablespace

--查看undo tablespace,保证只有一个undo tablespace
show parameter undo--在RAC的orcl01机器上创建第二个undo tablespace
create undo tablespace undotbs2 datafile '+DATA' size 512m autoextend on maxsize unlimited;--在RAC的orcl01机器上修改参数,使每个实例有独立的undo tablespace
alter system set undo_tablespace='undotbs1' scope=spfile sid='dxj1';
alter system set undo_tablespace='undotbs2' scope=spfile sid='dxj2';

创建在线日志组

在RAC的orcl01机器上为第二个thread创建在线日志组,开了闪回区后,默认1个日志组会有2个日志成员,闪回区一个,数据目录一个。

--查看日志文件:
--查看redo log大小和位置
set linesize 999
col member for a60
select b.thread#,a.group#,a.member,bytes/1024/1024,b.members,b.status from v$logfile a,v$log b where a.group#=b.group#;	 --第二个thread创建在线日志组
alter database add logfile thread 2 group 4 ('+DATA','+DATA') size 50m;
alter database add logfile thread 2 group 5 ('+DATA','+DATA') size 50m;
alter database add logfile thread 2 group 6 ('+DATA','+DATA') size 50m;

检查归档路径是否在ASM中

SQL> archive log list;
Database log mode	       Archive Mode
Automatic archival	       Enabled
Archive destination	       +ARCH
Oldest online log sequence     48
Next log sequence to archive   50
Current log sequence	       50

关闭节点1数据库

export ORACLE_SID=dxj1
sqlplus / as sysdba
shutdown immediate

启动所有节点实例

在RAC的所有机器即orcl01、orcl02上都启动数据库,并在每台机器上检查是否能够查询到所有实例信息

--orcl01启动数据库  发现每台机器上都能够查询到所有实例信息  最后再关闭
export ORACLE_SID=dxj1
sqlplus / as sysdbaSQL> set linesize 999
SQL> select status,instance_number,instance_name,host_name from gv$instance;	 STATUS	     INSTANCE_NUMBER INSTANCE_NAME    HOST_NAME
------------ --------------- ---------------- ----------------------------------------------------------------
OPEN			   1 dxj1	      orcl01
OPEN			   2 dxj2	      orcl02SQL> shutdown immediate--orcl02启动数据库   发现每台机器上都能够查询到所有实例信息  最后再关闭
export ORACLE_SID=dxj2
sqlplus / as sysdbaSQL> set linesize 999
SQL> select status,instance_number,instance_name,host_name from gv$instance;	 STATUS	     INSTANCE_NUMBER INSTANCE_NAME    HOST_NAME
------------ --------------- ---------------- ----------------------------------------------------------------
OPEN			   1 dxj1	      orcl01
OPEN			   2 dxj2	      orcl02SQL> shutdown immediate

把数据库加入集群

在RAC的随机一台机器如orcl01机器上把数据库加入集群(grid或oracle用户都可以)

srvctl add database -d dxj  -o $ORACLE_HOME -p +DATA/dxj/spfiledxj.orasrvctl add instance -d dxj -i dxj1 -n orcl01srvctl add instance -d dxj -i dxj2 -n orcl02srvctl start database -d dxj

如下输出:

[oracle@orcl01:/home/oracle]$ srvctl start database -d dxj
[oracle@orcl01:/home/oracle]$ srvctl status database -d dxj
Instance dxj1 is running on node orcl01
Instance dxj2 is running on node orcl02

查看集群状态

[grid@orcl02:/home/grid]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ARCH.dgONLINE  ONLINE       orcl01ONLINE  ONLINE       orcl02
ora.DATA.dgONLINE  ONLINE       orcl01ONLINE  ONLINE       orcl02
ora.LISTENER.lsnrONLINE  ONLINE       orcl01ONLINE  ONLINE       orcl02
ora.OCR.dgONLINE  ONLINE       orcl01ONLINE  ONLINE       orcl02
ora.asmONLINE  ONLINE       orcl01                   StartedONLINE  ONLINE       orcl02                   Started
ora.gsdOFFLINE OFFLINE      orcl01OFFLINE OFFLINE      orcl02
ora.net1.networkONLINE  ONLINE       orcl01ONLINE  ONLINE       orcl02
ora.onsONLINE  ONLINE       orcl01ONLINE  ONLINE       orcl02
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr1        ONLINE  ONLINE       orcl02
ora.cvu1        ONLINE  ONLINE       orcl02
ora.dxj.db1        ONLINE  ONLINE       orcl01                   Open2        ONLINE  ONLINE       orcl02                   Open
ora.oc4j1        ONLINE  ONLINE       orcl02
ora.orcl01.vip1        ONLINE  ONLINE       orcl01
ora.orcl02.vip1        ONLINE  ONLINE       orcl02
ora.scan1.vip1        ONLINE  ONLINE       orcl02

重新配置初始化pfile

查看参数文件位置

SQL> show parameter spfile;NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
spfile				     string	 +DATA/dxj/spfiledxj.ora

2个节点,重新配置初始化pfile

--节点1
echo "spfile='+DATA/dxj/spfiledxj.ora'" > /u01/app/oracle/product/11.2.0/db/dbs/initdxj1.ora--节点2
echo "spfile='+DATA/dxj/spfiledxj.ora'" > /u01/app/oracle/product/11.2.0/db/dbs/initdxj2.ora

问题处理

本实验文档未出现以下报错,如果备份恢复中遇到以下报错可参考以下解决办法。

ORA-27102: out of memory

--问题描述
SQL> startup nomount pfile='/home/oracle/initdxj20240529.ora';
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device
Additional information: -939524096
Additional information: 1--问题原因
由于目标服务器32G和源服务器内存128G差异大,需要更改内存参数。
参数文件中sga pga参数太大--解决办法
--sga和pga配置的最佳实践
对于OLTP系统来说,oracle建议是sga=系统内存*0.8*0.8  单位字节
pga=系统内存*0.8*0.2
对于DSS系统来说,oracle建议是sga=系统内存*0.8*0.5 单位字节
pga=系统内存*0.8*0.5更改参数文件中的关于内存的参数

recover database提示unable to find archived log

--问题描述
还原归档文件时间报错
RMAN> recover database;Starting recover at 25-JAN-24
using channel ORA_DISK_1starting media recoverychannel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=16
channel ORA_DISK_1: reading from backup piece /topsoft/newbak/autobackup/arch_dxj_20240125_1159207499_60_1.bak
channel ORA_DISK_1: piece handle=/topsoft/newbak/autobackup/arch_dxj_20240125_1159207499_60_1.bak tag=ARCH
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=/topsoft/oracle/oradata/archivelog/1_16_1155666473.dbf thread=1 sequence=16
channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=17
channel ORA_DISK_1: reading from backup piece /topsoft/newbak/autobackup/arch_dxj_20240125_1159207499_61_1.bak
channel ORA_DISK_1: piece handle=/topsoft/newbak/autobackup/arch_dxj_20240125_1159207499_61_1.bak tag=ARCH
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=/topsoft/oracle/oradata/archivelog/1_17_1155666473.dbf thread=1 sequence=17
unable to find archived log
archived log thread=1 sequence=18
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 01/25/2024 19:54:41
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 18 and starting SCN of 2895113--解决办法
--进行不完全恢复  归档序列号+1
RMAN> recover database until sequence 18;Starting recover at 25-JAN-24
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=2271 device type=DISKstarting media recovery
media recovery complete, elapsed time: 00:00:00Finished recover at 25-JAN-24--恢复完成后,将库启动到read only模式,查询一下数据是否正常
SQL> alter database open read only;Database altered.--对比数据量无问题后
SQL> shutdown immediate;--resetlogs方式打开
SQL> alter database open resetlogs;
Database altered.--查看数据库状态
SQL> select status from v$instance;STATUS
------------
OPEN

最后小版本升级完成,且数据验证无问题。

概念补充

完全恢复:数据文件+归档+在线redo,就能做实例恢复 这一级别就是完全恢复。ctl scn 、 datafile scn 、datafile head scn一致

不完全恢复:数据文件+归档 只能到 归档的最后一条redo,不能实例恢复 就是不完全恢复

restore 解决 datafile

recover 解决实例恢复

catalog就是把三者注册到 ctl ,自动完成

如果你只注册前两个部分,那么第三个部分就要手工指定

recover database until cancel时 把当前redo的路径写上就行了

最后会显示下一个redo sequence号,这个号其实是不存在的,因为还没产生,oracle是机器,它只会让你找最全的redo,向前恢复

--实例恢复

老备份+归档+在线redo=内存中的oracle

关机了 归档+在线全都不需要

在线redo的存在,解决数据文件和内存不一致

归档,解决老备份和现有数据文件不一致

--文件恢复

recover

restore

小版本升级参考链接:

oracle 单机 恢复 rac,单机11.2.0.1恢复到RAC 11.2.0.4的案例-CSDN博客

相关文章:

单实例11.2.0.3迁移到RAC11.2.0.4_使用RMAN 异机恢复

保命法则&#xff1a;先备份再操作&#xff0c;磁盘空间紧张无法备份就让满足&#xff0c;给自己留退路。 场景说明&#xff1a; 1.本文档的环境为同平台、不同版本&#xff08;操作系统版本可以不同&#xff0c;数据库小版本不同&#xff09;&#xff0c;源机器和目标机器部…...

JavaScript第四讲:函数,作用域,运算符

前言 在JavaScript的广阔天地中&#xff0c;函数、作用域、算术运算符和逻辑运算符是构成代码世界的基石。它们各自扮演着不同的角色&#xff0c;却又紧密相连&#xff0c;共同编织出丰富多彩的程序逻辑。无论是编写一个简单的网页交互&#xff0c;还是构建一个复杂的应用程序…...

IDEA中,MybatisPlus整合Spring项目的基础用法

一、本文涉及的知识点【重点】 IDEA中使用MybatisPlus生成代码&#xff0c;并使用。 Spring整合了Mybatis框架后&#xff0c;开发变得方便了很多&#xff0c;然而&#xff0c;Mapper、Service和XML文件&#xff0c;在Spring开发中常常会重复地使用&#xff0c;每一次的创建、修…...

从不同角度看如何让大模型变得更聪明呢?

算法创新&#xff0c;从代码上优化大模型&#xff0c;可以采取一系列策略来提升其性能和效率。 算法优化&#xff1a;对模型的算法进行精细调整&#xff0c;如改进神经网络架构&#xff0c;使用更高效的层&#xff08;如深度可分离卷积&#xff09;&#xff0c;或者优化递归神经…...

Buffer Pool运行机制理解

Buffer Pool机制理解 一、为什么使用Buffer Pool&#xff1f; 众所周知&#xff0c;磁盘数据是以数据页的形式来去读取的&#xff0c;一个数据页默认大小 16K&#xff0c;也就是说你本意只想读取一行数据&#xff0c;但是它会给你加载一页的数据到buffer pool里面。这样的话就…...

windows配置dns访问git , 加快访问速度保姆级教程

设置 DNS 访问 Git 需要修改电脑的 DNS 配置。下面是具体的操作流程&#xff1a; 第一步&#xff1a;打开命令提示符或终端窗口 在 Windows 系统中&#xff0c;可以按下 Win R 组合键&#xff0c;然后输入 “cmd”&#xff0c;按下 Enter 键打开命令提示符窗口。在 macOS 或 …...

Solidity学习-投票合约示例

以下的合约有一些复杂&#xff0c;但展示了很多Solidity的语言特性。它实现了一个投票合约。 当然&#xff0c;电子投票的主要问题是如何将投票权分配给正确的人员以及如何防止被操纵。 我们不会在这里解决所有的问题&#xff0c;但至少我们会展示如何进行委托投票&#xff0c;…...

前端Vue自定义支付密码输入框键盘与设置弹框组件的设计与实现

摘要 随着信息技术的不断发展&#xff0c;前端开发的复杂性日益加剧。传统的开发方式&#xff0c;即将整个系统构建为一个庞大的整体应用&#xff0c;往往会导致开发效率低下和维护成本高昂。任何微小的改动或新功能的增加都可能引发对整个应用逻辑的广泛影响&#xff0c;这种…...

【QEMU中文文档】1.1 支持的构建平台

本文由 AI 翻译&#xff08;ChatGPT-4&#xff09;完成&#xff0c;并由作者进行人工校对。如有任何问题或建议&#xff0c;欢迎联系我。联系方式&#xff1a;jelin-shoutlook.com。 原文&#xff1a;Supported build platforms — QEMU documentation QEMU 旨在支持在多个主机…...

摄影后期照片编辑工具:LrC2024 for Mac/win 中文激活版

LrC2024&#xff08;Lightroom Classic 2024&#xff09;是 Adobe 公司推出的一款专业级别的照片编辑和管理软件。它是 Lightroom Classic CC 的升级版&#xff0c;具有更多的功能和改进。 这款软件主要用于数字摄影师和摄影爱好者处理、编辑和管理他们的照片。它提供了一套强大…...

通关!游戏设计之道Day20

用时20天&#xff0c;《通关&#xff01;游戏设计之道》也是完结撒花喽。 虽然只是浅显的读了一遍但收获还是很多的。我想在我真正开始做游戏时再回来看&#xff0c;一定会收获更多的。 《通关游戏设计之道》是一本深入探讨游戏设计的专业书籍&#xff0c;它不仅仅是一本理论…...

2024年上半年软件设计师试题及答案(回忆版)--选择题

基础知识选择题 基础知识选择题 1,2,3][4,5,6][1,2,3,4,5,6] &#xff08;总&#xff1a;1分&#xff09; &#xff08;注意&#xff1a;括号内的是截止当前题目总分&#xff09; vlan不能隔绝内外网 &#xff08;2分&#xff09; 链路层使用交换机&#xff0c;…...

5.28.1 使用卷积神经网络检测乳腺癌

深度学习技术正在彻底改变医学图像分析领域&#xff0c;因此在本研究中&#xff0c;我们提出了卷积神经网络 (CNN) 用于乳腺肿块检测&#xff0c;以最大限度地减少手动分析的开销。CNN 架构专为特征提取阶段而设计&#xff0c;并采用了更快的 R-CNN 的区域提议网络 (RPN) 和感兴…...

【JavaScript脚本宇宙】JavaScript日期处理神器: 6款顶级库解析

提升编程效率&#xff1a;六个强大的JavaScript日期时间库介绍 前言 在信息化社会&#xff0c;日期和时间的处理是任何编程语言必不可少的部分。本文将介绍六个优秀的JavaScript日期和时间库&#xff0c;这些库各有特色&#xff0c;可以应对多样的使用场景。 欢迎订阅专栏&am…...

C++基础编程100题-002 OpenJudge-1.1-04 输出保留3位小数的浮点数

更多资源请关注纽扣编程微信公众号 002 OpenJudge-1.1-04 输出保留3位小数的浮点数 http://noi.openjudge.cn/ch0101/04/ 描述 读入一个单精度浮点数&#xff0c;保留3位小数输出这个浮点数。 输入 只有一行&#xff0c;一个单精度浮点数。 输出 也只有一行&#xff0c;…...

Linux挂载硬盘

通过df -h命令后无硬盘信息&#xff0c;但是已经分配了硬盘&#xff0c;需要将硬盘挂载到主机上。 通过命令&#xff1a;lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 492K 0 rom vda 252:0 0 50G 0 disk …...

用户购物性别模型标签(USG)之决策树模型

一、USG模型引入: 首先了解一下&#xff0c;如何通过大数据来确定用户的真实性别&#xff0c; 经常谈论的用户精细化运营&#xff0c;到底是什么? 简单来讲&#xff0c;就是将网站的每个用户标签化&#xff0c;制作一个属于用户自己的网络身份证。然后&#xff0c;运营人员 通…...

Mock的用法

1. 引入unittest包&#xff0c;再从包里引用mock类 import unittest from unittest import Mock 2. mock的作用&#xff0c;做挡板或者用来做一些单元测试过程中复杂的数据的模拟 demo Demo() #把mock的值赋值给demo的get()方法&#xff0c;这样在调用这个方法时&#xff0…...

内网-win1

一、概述 1、工作组&#xff1a;将不同的计算机按功能(或部门)分别列入不同的工作组 (1)、查看&#xff08;windows&#xff09; 查看当前系统中所有用户组&#xff1a;打开命令行--》net localgroup查看组中用户&#xff1a;打开命令行 --》net localgroup 后接组名查看用户…...

中国电子学会(CEIT)2023年09月真题C语言软件编程等级考试三级(含详细解析答案)

中国电子学会(CEIT)考评中心历届真题(含解析答案) C语言软件编程等级考试三级 2023年09月 编程题五道 总分:100分一、谁是你的潜在朋友(20分) "臭味相投"一这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着 许多共同的兴趣。然而作为…...

golang线程池ants-四种使用方法

目录 1、ants介绍 2、使用方式汇总 3、各种使用方式详解 3.1 默认池 3.2 普通模式 3.3 带参函数 3.4 多池多协程 4、总结 1、ants介绍 众所周知&#xff0c;goroutine相比于线程来说&#xff0c;更加轻量、资源占用更少、无线程上下文切换等优势&#xff0c;但是也不能…...

Flutter开发效率提升1000%,Flutter Quick教程之对组件进行拖拽与接收

1&#xff0c;首先&#xff0c;所有可以选择的组件&#xff0c;都在左边的组件面板里。从里面点击任何一个&#xff0c;按住左键&#xff0c;向右边的手机面板上进行拖拽即可。 2&#xff0c;拖拽后&#xff0c;我们要选择一个接收组件。什么时候可以接收组件&#xff0c;就是当…...

揭秘小程序商城的团购奇迹:独特模式引领盈利新纪元

在数字经济的新纪元里&#xff0c;你是否对那些不张扬却充满潜力的商业模式心生好奇&#xff1f;今天&#xff0c;我要为你揭示一种别出心裁的商业模式&#xff0c;它以其独特的魅力&#xff0c;不仅迅速吸引了大量用户的目光&#xff0c;更在短短一个月内创造了超过600万的惊人…...

ssm_mysql_高校自习室预约系统(源码)

博主介绍&#xff1a;✌程序员徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

AI自动化办公:批量将Excel表格英文内容翻译为中文

有一个50列的表格&#xff0c;里面都是英文&#xff0c;要翻译成中文&#xff1a; 在ChatGPT中输入提示词&#xff1a; 你是一个开发AI大模型应用的Python编程专家&#xff0c;要完成以下任务的Python脚本&#xff1a; 打开Excel文件&#xff1a;"F:\AI自媒体内容\AI行业…...

PPT 隐藏开启对象图层

目录预览 一、问题描述二、解决方案三、参考链接 一、问题描述 制作PPT的时候&#xff0c;有时候需要在一张PPT放置多个依次出现的内容&#xff0c;然后设置对应的动画&#xff0c;要是需要对某个内容进行修改的话&#xff0c;就会很不方便&#xff0c;这个时候就需要使用&…...

PHP火狼大灌篮游戏源码微信+手机wap源码带控制

使用此接口可以实现支付宝、QQ钱包、微信支付与财付通的即时到账&#xff0c;免签约&#xff0c;无需企业认证。PHP易支付源码&#xff0c;免签约不需要企业的支付平台源码&#xff0c;彩虹第三四方在线支付系统源码,易支付token合作者商户申请源码&#xff0c;app和网页都可以…...

推荐几首听无数遍也听不腻的好歌(1)

1.Wannabe (Spice Girls Cover) 这首歌是Why Mona创作的首红眼特效的歌&#xff0c;唱的像牙痛的唱不清楚&#xff0c;但配上超级劲爆的旋律及节奏&#xff0c;简直好听到爆 2.Down For Life (Reset) 这首HSHK创作的纯音乐&#xff0c;虽然旋律一直重复一个调&#xff0c;但…...

【全开源】Java短剧系统微信小程序+H5+微信公众号+APP 源码

打造属于你的精彩短视频平台 一、引言&#xff1a;为何选择短剧系统小程序&#xff1f; 在当今数字化时代&#xff0c;短视频已经成为人们日常生活中不可或缺的一部分。而短剧系统小程序源码&#xff0c;作为构建短视频平台的强大工具&#xff0c;为广大开发者提供了快速搭建…...

基于Springboot驾校预约平台小程序的设计与实现(源码+数据库+文档)

一.项目介绍 系统角色&#xff1a;管理员、教练、学员 小程序(仅限于学员注册、登录)&#xff1a; 查看管理员发布的公告信息 查看管理员发布的驾校信息 查看所有教练信息、预约(需教练审核)、评论、收藏喜欢的教练 查看管理员发布的考试信息、预约考试(需管理…...

python列表基本运算

列表基本运算 成员运算符 in 老师你在上课喊人回答问题的时候&#xff0c;就犯了难。想点的人名字已经脱口而出了&#xff0c;但发现这位同学没来。 可不&#xff0c;今天的课就来了 8 个人&#xff1a; students [林黛玉, 薛宝钗, 贾元春, 妙玉, 贾惜春, 王熙凤, 秦可卿,…...

Pytorch实用教程:pytorch中nn.Linear()用法详解 | 构建多层感知机 | nn.Module的作用 | nn.Sequential的作用

文章目录 1. nn.Linear()用法构造函数参数示例使用场景2. 构建多层感知机步骤代码示例注意事项3. 继承自nn.Module的作用是什么?1. 组织网络结构2. 参数管理3. 模型保存和加载4. 设备管理不继承 `nn.Module` 的后果...

如何利用unicloud阿里云云函数实现文件包括图片或文件上传,unicloud云函数写法一览

这里以一个单文件上传为例子&#xff0c;多图多文件同理&#xff0c;循环单图处理逻辑即可。 背景 前端vue上传图片文件&#xff08;base64格式&#xff09;到服务器&#xff0c;并获取返回的服务器资源存储路径 传入参数 { ”queryStringParameters“:{ "file":&qu…...

Django序列化器中is_valid和validate

今天上班的时候分配了一个任务&#xff0c;是修复前端的一个提示优化&#xff0c;如下图所示&#xff1a; 按照以往的经验我以为可以直接在validate上进行校验&#xff0c;如何抛出一个异常即可 &#xff0c;例如&#xff1a; class CcmSerializer(serializers.ModelSerialize…...

关于Golang中自定义包的简单使用-Go Mod

1. go env 查看 GO111MODULE 是否为 on&#xff0c;不是修改成on go env -w GO111MODULEon 2 .自定义包的目录格式 3. test.go 内容 package calc func Add(x, y int) int { // 首字母大写表示公有方法return x y }func Sub(x, y int) int {return x - y } 4.生成calc目…...

Dijkstra求最短路篇二(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)

前言&#xff1a; Dijkstra算法博客讲解分为两篇讲解&#xff0c;这两篇博客对所有有难点的问题都会讲解&#xff0c;小白也能很好理解。看完这两篇博客后保证收获满满。 第一篇博客讲解朴素Dijkstra算法Dijkstra求最短路篇一(全网最详细讲解两种方法&#xff0c;适合小白)(p…...

Dijkstra求最短路篇一(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)

前言&#xff1a; Dijkstra算法博客讲解分为两篇讲解&#xff0c;这两篇博客对所有有难点的问题都会讲解&#xff0c;小白也能很好理解。看完这两篇博客后保证收获满满。 本篇博客讲解朴素Dijkstra算法&#xff0c;第二篇博客讲解堆优化Dijkstra算法Dijkstra求最短路篇二(全网…...

计算机组成原理06:浮点数运算

浮点数加减运算 之前我们提到过&#xff0c;浮点数具有特定的表示形式。因此&#xff0c;在进行浮点数的加减运算之前&#xff0c;需要统一浮点数的表达方式。这里我们主要对浮点数表示中的尾数M进行处理&#xff0c;要求0≤M<1&#xff0c;统一格式如下&#xff1a; 正数…...

opencascade 快速显示AIS_ConnectedInteractive源码学习

AIS_ConcentricRelation typedef PrsDim_ConcentricRelation AIS_ConcentricRelation AIS_ConnectedInteractive 简介 创建一个任意位置的另一个交互对象实例作为参考。这允许您使用连接的交互对象&#xff0c;而无需重新计算其表示、选择或图形结构。这些属性是从您的参考对…...

CentOS系统上安装单机版Redis教程

一、前言 1.1 为什么选择Redis&#xff1f; Redis不仅支持丰富的数据类型&#xff08;如字符串、哈希、列表、集合、有序集合等&#xff09;&#xff0c;还具有高性能、持久化、发布订阅、事务和Lua脚本等特点。这些优势使其成为分布式系统和高并发应用中的首选。 1.2 为什么…...

纯Java实现Google地图的KMZ和KML文件的解析

目录 前言 一、关于KMZ和KML 1、KMZ是什么 2、KML是什么 二、Java解析实例 1、POM.xml引用 2、KML 基类定义 3、空间对象的定义 4、Kml解析工具类 三、KML文件的解析 1、KML解析测试 2、KMZ解析测试 四、总结 前言 今天是六.一儿童节&#xff0c;在这里祝各位大朋友…...

k8s自定义资源你会创建吗

创建自定义资源定义 CustomResourceDefinition 当你创建新的 CustomResourceDefinition&#xff08;CRD&#xff09;时&#xff0c;Kubernetes API 服务器会为你所 指定的每一个版本生成一个 RESTful 的 资源路径。CRD 可以是名字空间作用域的&#xff0c;也可以是集群作用域的…...

CATIA二次开发VBA入门(4)——进程外开发环境搭建,vb.net在Visual Studio中开发,创建圆柱曲面的宏录制到二次开发案例

目录 引出vb.net和vb6.0 进程外开发环境搭建vb.net开发环境搭建《CATIA二次开发技术基础》模板 添加宏库引用 vs开发环境初步vs中的立即窗口对象浏览器 建立模板案例&#xff1a;创建一堆圆柱曲面第一步&#xff1a;录制宏第二步&#xff1a;代码精简第三步&#xff1a;for循环…...

c++字符串相关接口

c字符串相关接口 1.str2wstr(str转换wstr)2.wstr2str(str转换wstr)3.Utf8ToAsi(Utf8转换ANSI)4.AsiToUtf8(ANSI转换Utf8)5.stringformatA/stringformatW(按照指定的格式格式化字符串)6.GetStringBetween(获取cStart cEnd之间的字符串)7.Char2Int(char转int)8.Str2Bin(字符串转换…...

Maven打包错误:无效的源发行版:17

1. 报错问题 在用maven进行打包时&#xff08;clean & install&#xff09;&#xff0c;报如下错误&#xff1a; 一开始让我很摸不着头脑&#xff0c;我确定我的pom.xml&#xff0c;还有IDEA中的Project Settings是正确的。 2. 排查 尽管确定&#xff0c;但还是一个个排…...

【环境栏Composer】Composer常见问题(持续更新)

1、执行composer install提示当前目录中没有 composer.lock 文件时 No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information. Composer 在执行 install 命令时会…...

塑造更智慧的AI:策略与路径探索

提升数据质量&#xff1a; 数据清洗&#xff1a;去除数据中的异常值、缺失值、噪声等干扰因素&#xff0c;确保数据的准确性和一致性。数据标注&#xff1a;为数据集提供准确的标签&#xff0c;以便进行有监督学习。标注的质量直接影响模型的性能。数据增强&#xff1a;通过图像…...

软设之快速排序

快速排序是冒泡排序的改进算法 它采用的是分治法&#xff0c;基本思想是把原问题分解为若干规模更小但结构与原问题相似的子问题&#xff0c;通过递归解决这些子问题&#xff0c;然后将这些子问题的解组合成原问题的解。 它的步骤是 1.在待排序的n个记录中任取一个记录&…...

从零学算法2965

2965. 找出缺失和重复的数字 给你一个下标从 0 开始的二维整数矩阵 grid&#xff0c;大小为 n * n &#xff0c;其中的值在 [1, n2] 范围内。除了 a 出现 两次&#xff0c;b 缺失 之外&#xff0c;每个整数都 恰好出现一次 。 任务是找出重复的数字a 和缺失的数字 b 。 返回一个…...

【Mac版】Java生成二维码

软件版本 IntelliJ IDEA&#xff1a;2023.2 JDK&#xff1a;17 Tomcat&#xff1a;10.1.11 Maven&#xff1a;3.9.3 技术栈 servlet谷歌的&#xff1a;zxing 生成普通的黑白二维码在二维码中间添加一个小图标 github开源项目&#xff1a;qrcode qrcode开源项目的内部是基于z…...