表空间和用户
查看建库过程中自带用户:
select username from dba_users order by username;
附结果:
USERNAME
--------------------------------------------------------------------------------------------------------------------------------
ANONYMOUS
APPQOSSYS
AUDSYS
CTXSYS
DBSFWUSER
DBSNMP
DIP
DVF
DVSYS
GGSYS
GSMADMIN_INTERNAL
GSMCATUSER
GSMROOTUSER
GSMUSER
LBACSYS
MDDATA
MDSYS
OJVMSYS
OLAPSYS
ORACLE_OCM
ORDDATA
ORDPLUGINS
ORDSYS
OUTLN
REMOTE_SCHEDULER_AGENT
SI_INFORMTN_SCHEMA
SYS
SYS$UMF
SYSBACKUP
SYSDG
SYSKM
SYSRAC
SYSTEM
WMSYS
XDB
XS$NULL
36 rows selected.
创建新的dba用户:
create user wenjiewang identified by 123456;
grant connect,resource,dba to wenjiewang;
密码不过期:
alter profile default limit password_life_time unlimited;
查看默认表空间类型:
select PROPERTY_NAME,PROPERTY_VALUE from database_properties where PROPERTY_NAME ='DEFAULT_TBS_TYPE';
创建表空间:
create SMALLFILE TABLESPACE "TS_wenjiewang" LOGGING DATAFILE 'wenjiewang1.dbf' SIZE 200M AUTOEXTEND
ON NEXT 100M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
这里不选择bigfile是因为考虑备份速度会快,这样就需要留意一数据文件1达到32G就需要增加新的数据文件;
为表空间增加新的数据文件:
alter TABLESPACE "TS_wenjiewang" add DATAFILE 'wenjiewang2.dbf' SIZE 200M AUTOEXTEND
ON NEXT 100M MAXSIZE UNLIMITED;
数据文件保存在:
/usr/oracle19c/dbs/wenjiewang1.dbf
其中/usr/oracle19c/是oracle_home
如果要将数据文件保存在自定义目录的话,root建好目录后授权
chown oracle:oinstall /data/datafile/
然后在指定数据文件时指定绝对路径即可:
create SMALLFILE TABLESPACE "TS_test0422" LOGGING DATAFILE '/data/datafile/04221.dbf' SIZE 200M AUTOEXTEND
ON NEXT 100M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
指定用户默认表空间:
alter user wenjiewang default tablespace "TS_wenjiewang";
alter user wenjiewang quota unlimited on "TS_wenjiewang";
然后我们用wenjiewang账号登录
sqlplus wenjiewang/123456 as sysdba
创建测试表:
create table t1(id int,sn varchar(50));
insert into t1 values(1,'wwj');
select * from t1;
commit;
create table t2(id int,sn varchar(50));
insert into t2 values(1,'bak');
select * from t2;
commit;
查看当前表:
select table_name from user_tab_comments;
RMAN和归档模式
创建备份目录及授权
mkdir /data/backup
chown oracle:oinstall /data/backup/
创建归档日志目录及授权
mkdir /data/archivelog
chown oracle:oinstall /data/archivelog/
查看当前归档状态:
archive log list;
查看归档日志格式:
show parameter log_archive_format;
修改归档日志格式:
alter system set log_archive_format='%t_%s_%r.arch' scope=spfile;
查看归档日志目录:
show parameter DB_RECOVERY_FILE_DEST;
修改归档日志目录:
alter system set log_archive_dest_1 = 'location=/data/archivelog' scope=spfile;
需重启数据库生效
我们顺便开启归档模式
先关闭数据库:
shutdown immediate
仅起到mount状态
startup mount
开启归档模式:
alter database archivelog;
启动到open状态:
alter database open;
再检查归档状态发现已经改好,归档日志目录也正确
我们手动切换日志并检查目录下有没有正常生成的日志:
alter system switch logfile;
我们进入RMAN进行RMAN设置:
查看RMAN配置:
show all;
设置为压缩备份:
configure device type disk backup type to compressed backupset;
设置自动备份控制文件:
configure controlfile autobackup on;
设置控制文件备份目录和格式:
configure controlfile autobackup format for device type disk to '/data/backup/%F.bak';
设置冗余策略,按时间标记废弃:
configure retention policy to recovery window of 90 days;
进行数据库全备:
backup format '/data/backup/d_%d_%T_lev0_%s.bak' incremental level 0 database plus archivelog delete all input;
然后检查磁盘文件。
删除归档日志的正确姿势:
如删除七天前的:
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
如果已经在磁盘中删除了归档日志文件,则只能清除归档日志记录,否则控制文件不会知道这些文件已经不存在了:
crosscheck archivelog all;
delete expired archivelog all;
模拟数据恢复
搞破坏:
查看当前表:
select table_name from user_tab_comments;
查看当前SCN号:
select dbms_flashback.get_system_change_number from dual;
是2055092
查看当前时间:
直接看系统时间 date
Thu Apr 22 17:26:24 CST 2021
查看表t2的内容:
select * from t2 where rownum shutdown immediate
SQL> startup mount
RMAN> restore database;
RMAN> recover database until scn 2055092;
或者
RMAN> restore database until time '05-NOV-20';
RMAN> alter database open resetlogs;