一、环境准备
1、环境信息
192.168.184.161 p19c01
192.168.184.162 p19c02
2、集群网络规划
interface | p19c01 | p19c02 |
---|---|---|
public ip | 192.168.184.161 | 192.168.184.162 |
private ip | 1.1.1.1 | 1.1.1.2 |
vip | 192.168.184.171 | 192.168.184.172 |
scan | 192.168.184.181 |
3、查看集群状态
su - grid
crsctl status res -t
二、创建测试数据
1、进行连接
scan ip :192.168.184.181
服务名称 :p19c0
2、创建用户和表空间
创建test用户,以及对应的表空间并授权,注意如果在CDB环境创建用户要加c##
create tablespace TEST datafile '+DATA/P19C0/DATAFILE/test.dbf' size 100m autoextend on next 100m maxsize 400m extent management local;
CREATE TEMPORARY TABLESPACE TEST_TEMP
TEMPFILE '+DATA/P19C0/TEMPFILE/test_temp.dbf'
SIZE 20M
AUTOEXTEND ON
NEXT 5M MAXSIZE 100M;
CREATE USER C##test IDENTIFIED BY admin
DEFAULT TABLESPACE TEST
TEMPORARY TABLESPACE TEST_TEMP;
-- 2. 授予公共用户权限(需显式指定CONTAINER=ALL)
GRANT CONNECT, RESOURCE TO C##test CONTAINER=ALL;
-- 3. 授予表空间配额(需确认表空间存在)
ALTER USER C##test QUOTA UNLIMITED ON TEST;
注意这里的表空间和临时表空间的位置,和单机不一样了,不清楚的使用下面命令查询一下
+DATA/P19C0/DATAFILE/
select * from dba_data_files;
select *from dba_temp_files;
+DATA/P19C0/TEMPFILE/
3、使用创建的用户进行登录
我这里是C##test
4、创建测试数据
CREATE TABLE student_info (
student_id NUMBER(10) PRIMARY KEY,
name VARCHAR2(50) NOT NULL,
gender CHAR(1) CHECK (gender IN ('M', 'F')),
birth_date DATE,
email VARCHAR2(100) UNIQUE,
create_time TIMESTAMP DEFAULT SYSTIMESTAMP
);
-- 单条记录插入
INSERT INTO student_info VALUES
(1, '张三', 'M', TO_DATE('2000-01-15', 'YYYY-MM-DD'), 'zhangsan@edu.cn', DEFAULT);
-- 多条记录插入
INSERT ALL
INTO student_info VALUES (2, '李四', 'M', DATE '2001-03-22', 'lisi@example.com', SYSTIMESTAMP)
INTO student_info VALUES (3, '王芳', 'F', TO_DATE('1999-12-05', 'YYYY-MM-DD'), 'wangfang@mail.com', DEFAULT)
SELECT * FROM DUAL;
commit;
SELECT * FROM student_info;
三、进行备份
1、创建备份目录
su - oracle
mkdir -p /u01/app/oracle/backup/
2、归档切换
sqlplus / as sysdba
alter system checkpoint;
alter system switch logfile;
3、进行全备
(1)全备
rman target sys/oracle@p19c0 nocatalog
backup database format '/u01/app/oracle/backup/wb_%U';
(2)查看备份文件
cd /u01/app/oracle/backup/
ll
4、做0级备份
(1)0级备份
backup incremental level 0 database plus archivelog delete all input format '/u01/app/oracle/backup/all_%U';
(2)查看备份文件
cd /u01/app/oracle/backup/
ll
四、修改数据
SELECT * FROM student_info;
update student_info set name = '张三_更新' where name = '张三';
commit;
SELECT * FROM student_info;
五、做1级增量备份
一般在做备份前都进行归档切换操作
1、归档切换
su - oracle
sqlplus / as sysdba
alter system checkpoint;
alter system switch logfile;
2、进行1级增量备份
rman target sys/oracle@p19c0 nocatalog
backup incremental level 1 database plus archivelog delete all input format '/u01/app/oracle/backup/all_%U';
3、查看1级增量备份
cd /u01/app/oracle/backup/
ll
4、退出RMAN
quit;
5、查看数据库文件位置
select file#,name from v$datafile;
六、制造异常
1、停止数据库
停止集群数据库,接触ASM磁盘占用的情况,方便后边删除,人工制造异常
su - oracle
srvctl stop database -d p19c0
查看数据库状态
srvctl status database -d p19c0
2、删除数据文件
连接到asm实例,删除所有数据文件
(1)连接到asmcmd
su - grid
asmcmd
(2)查询数据文件
ls +DATA/P19C0/DATAFILE/
(3)删除数据文件
cd +DATA/P19C0/DATAFILE/
rm +DATA/P19C0/DATAFILE/*
六、进行恢复数据
1、数据库启动到mount状态
su - oracle
srvctl start database -d p19c0 -o mount
2、查看数据库状态
srvctl status database -d p19c0
3、连接RMAN
su - oracle
rman target sys/oracle@p19c0 nocatalog
4、还原数据库
RMAN选择合适的备份集开始恢复,我们发现在有全备和0级增量备份的时候,RMAN优先选择了0级增量备份进行恢复
restore database;
5、恢复数据库
recover database;
6、打开数据库
alter database open;
7、查询数据
使用c##test进行连接,查询数据
SELECT * FROM student_info;