oracle12c-学习笔记
oracle12c
目录
oracle12c 1
一、oracle架构 2
1.1总体结构 2
1.1.1内存结构 2
1.1.2进程结构 3
1.1.3 oracle存储结构 4
二、 oracle管理工具 4
三、数据库实例 5
3.1 instance启动停止 6
3.2 参数文件错误处理 7
四、oracle network 7
五、管理存储 9
六、data concurrency 数据并发(locks) 12
七、adminstering user security 13
八、implementing oracle database auditing 数据库审计 15
九、数据库的backup 17
9.1 moving data(数据泵) 17
9.2 Sql*loader 18
9.3 back and recovery (物理备份) 20
9.4 back and recover concepts (概念) 22
9.5 rman (revover manager) 23
Restore恢复 29
Redo 日志恢复 33
不完全恢复(整体还原) 35
disaster recovery --灾难性恢复 38
还原到新主机--不完全恢复 40
rman加密恢复 44
pitr 基于时间点的还原 47
Transporting data 可传输表空间 49
Rman 调优 51
十、 闪回 51
1、闪回查询 52
2、闪回版本查询(两点之间的变化) 52
3、闪回事务查询 53
4、闪回表 54
5、闪回drop 54
6、闪回数据归档 55
7、闪回数据库 56
十一、managing spaces 57
Block space management 57
Tablespace monitoring 58
Shrinking segments 58
Managing Resumable space allocation 61
Memory manager 64
Install grid 65
archive log list;
backup database plus archivelog delete input;
alter system archive log current;
Report schema;
Report obsolete; --查看过期备份
delete obsolete; --删除过期文件(包括过期归档日志)
删除找不到的文件。
Crosscheck copy(类型);--检查一下
Delete expired copy; --expired 找不到文件的源数据记录
List copy;
---删除了所有的归档日志处理办法
List archivelog all;
Crosscheck archivelog all;
Delete archivelog all;
backup database plus archivelog delete input;
备份后--alter system archive log current;--对日志进行归档
配置退格键支持
# echo "stty erase '^H'" >> /home/oracle/.bashrc
# echo "stty erase '^H'" >> /home/grid/.bashrc
一、oracle架构
oracle database architecture 架构
user process 客户端进程
server process 服务端进程(前台进程)
1.1总体结构
server
instance = sga、pga + process structures(代码程序)
database (storage structures)
cdb pdb
session
1.1.1内存结构
memory stuctures 内存结构
sga :
shared pool 共享池 :
library cache(sql area和执行计划)、
data dictionary cache (数据库表记录各种对象记录) 字典缓存
v$ dba_
server result cache 服务器结果缓存
reserved pool 保留池
database buffer cache (数据块data blocks):
redo log buffer (数据库变更日志缓存):
large pool :
session memory for the shared server and the oracle XA interace
io
backup
parallel query
流技术
java pool :
streams pool :
pga :(共享服务器模式uga 会放到sga的large pool里面)
stack space:
user global area :
12c新特性:in-memory column store(列式存储)
full database in-memory caching(全库缓存)
1.1.2进程结构
process architecture (进程结构)
user process
database processes
daemon / application processes
1、database writer process(dbwn)(把数据写到磁盘)(modified - dirty)(有时间就写脏块)
全局检查点(full checkpoint):
shutdown immediate;
alter system checkpoint;
增量检查点 (incremental checkpoint)(每三秒写一次):
其他检查点:
switch logfile;
begin backup;
offline datafile;
2、log writer process(lgwr):(写日志进程)
什么时候写日志
提交时commit:
日志切换时:
日志到规定存储写(1/3 或者1M):
dbwn写赃块之前写:
每三秒:
3、checkpoint process(ckpt)
记录检查点
sinals dbwn to write blocks to disk
4、system monitor process(smon)
实例恢复
cleans up unused temporary segments
5、process monitor process(pmon)进程监视
回收用户process
动态注册(11g前)
监视会话超时时间(idle session)
6、recoverer process(reco)(多个数据库)
恢复分布式事务(distributed transactions)
7、listener registration process(lreg)(12c动态注册)
8、archiver processes(arcn)(归档进程)
非归档模式(日志不保存)
----------------------
desc dict--字典表
--内存视图
desc v$sgainfo;--sga
v$memory_dynamic_components
--进程视图
v$process;
1.1.3 oracle存储结构
database storage architecture --oracle存储结构
control files (记录数据库的物理信息、物理文件在哪)(可以有一份或多份,每一份都是一样的)
1、查看控制文件select name from v$controlfile;
2、show parameter control
strings /u01/app/oracle/oradata/orcl/control01.ctl
数据库文件路径
归档日志文件路径
备份数据路径
数据库检查点信息
data files (dba_data_files、v$datafile)
online redo log files (redo)(v$logfile)
archive redo log files (v$archived_log)
parameter file(参数文件)(show parameter pfile)
backup files(备份文件)
password file (密码文件、sys的密码)$oracle_home/dbs/orapw-sid-db
alert log and trance files (警告和追踪文件)(v$diag_info)
----
logical and physical database strure
--逻辑架构
database - tablespaces - segment(段、表) - extent(区) - oracle data block(标准大小8k)
二、 oracle管理工具
sql-plus
sql developer
oracle enterprise manager database express
oracle enterprise manager cloud control
sql-plus 运行脚本
1、sqlplus / as sysdba
@aa.sql
2、sqlplus / as sysdba @aa.sql
shell 脚本
./patch_sqlplus.sh
sqlplus / as sysdba <<EOF | sed -n '/----------/,+1p'|tail -n 1|awk '{print $1}'
select count(*) from v\$process;
quit;
EOF
三、数据库实例
--initialization parameter files --参数文件配置
分类:
spfile --spfile<sid>.ora (二进制文件)
pfile --ini<sid>.ora (字符串)
show parameter pfile; --查看使用的类型
show parameter --查看所有生效的参数(内存的参数)
show spparameter --查看文件中的参数
desc v$parameter -参数表(内存)
desc v$spparameter --参数表(物理)
set lines 400; --设置列宽
col name for a20; --设置结果name的显示宽
set pages 800; --设置页大小
参数分类:basic、高级参数 (v$parameter isbasic)
changing initialization parameter values
--分类
static parameter (静态参数)
dynamic parameter (动态参数)
(v$parameter) issys_modifiable(global,memory) --全局修改内存(immediate 、false、deferred)
immediate --- can modify memory
false -- can not modify memory (can only modify the spfile or pfile, restart the instance)
deferred --- new session
isses_modifiable(session,memory) --会话修改内存的参数
--session的参数修改方式: alter session set 参数名称='';
--system 的参数修改(immediate(立即生效的)、false(必须加上spfile重启生效))
alter system set 参数名称='' [scope=both|spfile|memory]
3.1 instance启动停止
startup
shutdown - nomount(instance started) - mount - open
startup nomount
--找到参数文件,启动实例 $ORACLE_HOME/dbs
先找spfile<sid>.ora 没得
再找 init<sid>.ora (该文件可以手动修改)
--打开alert_<sid>.log
$ORACLE_BASE/diag/rdbms/dbname/instance_name/trace
alter database mount
--读取控制文件(不检查控制文件存在性(控制文件有多份)
show parameter control
alter database open
--打开数据文件和日志文件
--selet status from v$instance;(started\mounted\open)
-------
shutdown
A-abort --掉电--启动时日志可以还原
I-immediate --没提交的都回滚,立即关闭
T-transactional --只要有人做事就不关闭
N-normal --只要有链接就不关闭
(ITN一致性关闭)
startup force = shutdown abort + startup
--viewing the alert log
--日志文件路径
find / -name alert_<sid>.log
$ORACLE_BASE/diag/rdbms/dbname/instance_name/trace
--日志内容
关于数据库的报错、全局操作
12c-ddl.log --新特性
reference 手册、参考
--动态性能视图 v$XXX 内存中(不同状态内容不同)
dba_*s --所有的
all_*s --权限内所有的
user_*s --用户所有的
3.2 参数文件错误处理
1、确定以前用的哪一类 pfile 可以直接修改
sql>create pfile from spfile;
sql>create spfile from pfile;
2、找到pfile进行参数修改
vi $ORACLE_HOME/dbs/init<sid>.ora
3、修改错误参数
4、启动数据库
四、oracle network
--监听文件 $ORACLE_HOME/network/admin/listener.ora
LISTENER =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=100.98.100.225)(PORT=1521))
)
lsnrctl status
--创建监听
netca
--register database
1、自动注册auto:1521(start instance,every 60s、alter system register;)
server name = db_unlque_name.db_domain
2、手动注册manual:该配置文件$ORACLE_HOME/network/admin/listener.ora
netmgr
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME = mylisner)--(服务名称)
(SID_NAME = orcl) --(实例名称)
(ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1)
)
)
--查看oralce错误 oerr ora 1515
--EZ connect:
sqlplus sys/passwd@192.168.100.1:1521/orcl(监听服务名称) as sysdba;
--local naming:(客户端配置文件)
$ORACLE_HOME/network/admin/tnsnames.ora
orcl2=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.100.1)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=orcl))
)
netca/netmgr
sqlnet.ora --特殊配置 超时、加密
tnsping--测试tns的配置文件语法
__________________________________________________________________________________________
1、共享服务器模式:不能用的情况
a、管理员操作
b、备份恢复
c、批处理大数据处理
d、数据仓库操作
2、专有服务器模式
数据库与数据库之间通讯
dblink 高低版本之间连接问题:有的需要打补丁
CREATE DATABASE LINK locallink
CONNECT TO hr IDENTIFIED BY hr
USING 'orcl2';
--
CREATE DATABASE LINK link1
CONNECT TO hr IDENTIFIED BY hr
USING
'(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=100.98.100.225)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=orcl))
)';
五、管理存储
dba_tablespaces --所有表空间
3 classer permanet,undo ,tmporary
permanet --永久表空间
查询表空间使用率
set lines 800;
set pages 800;
col tablespace_name for a30;
col used_pct for a10;
select total.TABLESPACE_NAME TABLESPACE_NAME,
total.MAX_SIZE_MB MAX_SIZE_MB, total.SIZE_MB-free.USED_FREE_MB USED_SIZE_MB,
round(((total.SIZE_MB-free.USED_FREE_MB)/total.MAX_SIZE_MB)*100,2)|| '%' USED_PCT,
total.MAX_SIZE_MB-(total.SIZE_MB-free.USED_FREE_MB) Free_MB
from
(select TABLESPACE_NAME,
sum(BYTES)/1024/1024 SIZE_MB,
sum(decode(MAXBYTES, 0 , BYTES,MAXBYTES ))/1024/1024 MAX_SIZE_MB
from dba_data_files
group by TABLESPACE_NAME) total,
(select TABLESPACE_NAME,
sum(BYTES)/1024/1024 USED_FREE_MB
from dba_free_space
group by TABLESPACE_NAME) free
where total.TABLESPACE_NAME=free.TABLESPACE_NAME
and total.TABLESPACE_NAME not like 'UNDO%' ;
创建表空间
select file_name from dba_data_files;
create tablespace cs datafile '/u01/app/oracle/oradata/orcl/cs1.dbf' size 1g autoextend on maxsize 30g;
--大块表空间创建
alter system set db_16k_cache_size=20M;
create tablespace cs datafile '/u01/app/oracle/oradata/orcl/cs1.dbf' size 1g autoextend on maxsize 30g blocksize 16k;
--添加表空间数据文件
alter tablespace cs add datafile...;
--删除表空间
drop tablespace cs including contents and datafiles;
--缩放表空间
alter database datafile '/u01/app/oracle/oradata/orcl/cs1.dbf' resize 20M;
dba_tablespaces 字段解析
extent_management -区管理 local、dictionary(不常用)
allcation_type --区管理方式autoallocate(system)、uniform
segment_space_management -- 段空间管理 manual(freelist->dictionary)、(segment header,bitmap)auto(常用)
blocksize --表空间默认大小(8k)
show parameter block_dize;
show parameter db_cache;
show parameter cache_size;
--数据文件类型
bigfile/smallfile(默认创建方式)(多个数据文件)
8k-->32T bigfile(单个数据文件)(只能一个)
create bigfile tablespace name....;
--表空间的ofline 、online
--offline
normal:all dirty buffer cache sync to disk,then offline
temporary:sync the buffer cache as most,the ofline
immediate:offline immediate,no sync
--语法
alter talespace tablesname offline [normal\temporary\immediate];
alter talespace tablesname online;
archive log list;--查看归档模式
--表空间
system:dictionary、所有系统信息用户表
sysaux:辅助表空间awr(statistics统计信息)、em
users:default permanetn tablespace 默认的永久表空间(先放用户的默认表空间,然后建表没有指定表空间则放这表空间)
temp:temporary data 临时表空间
undo:undo data
--ofa(oracle flxiable architecture)
/u01/app/oracle/oradata...
--omf(oracle managed files)
db_create_file_dest-参数-指定数据文件目录
--moving or renaming an onlin data file (移动数据文件,或重命名)
11g需要关闭数据库或者offline datafile
1、方法
shutdown
移动文件到新目录
statup mount
alter database rename file '路径' to '新路径'
alter database open
12c在线移动(新特性)
alter database move datafile '路径' to '新路径';
dba_temp_files
临时表空间datafile 生成方式
1、restart instance
2、新增数据文件,删除错误数据文件
--temporary tablespace
1、temporary data(sort)(pga不够-磁盘)
order by
group by
set(except(排查) union all)
join
create index
2、temporary table
--消失数据
a、commit
b、session end
create temporary tablespace temp2 tempfile ' ' size 5m;
create GLOBAL temporary table aa(id number(20)) tablespace temp2;
select * from aa
insert into aa values(1);
commit
drop tablespace _name
--database_properties --数据库属性表(字符集)
---tablespace group(建临时表空间 指定组就生成了)
表 dba_tablespace_group
alter tablespace temp2 tablespace group grp;
select * from dba_tablespace_groups
-------managing undo data-undo 表空间
a copy of original ,premdified data (修改之前,的数据)
undo 数据什么时候回收commit+900秒(事务没有结束不会被覆盖)
select * from v$undostat;
--作用 roolback operations
redad-consistent queries (一致性查询)
oracle falshback query,oracle flashback(闪回)
recovery from failed trancefil
each transaction is assigned to only one undo 段
一个undo 段可以多transaction
一个undo只能一个instance
一个instance只能一个undo生效
undo 闪回 一致性查询
redo 恢复
undo 表空间 固定 fixed size:ingnore undo_retention(忽略undo配置时间)
alte tablespace undotbs1 retention guarantee;--强制保证900秒
_____________________________________________________________________________
六、data concurrency 数据并发(locks)
--locks
prevent-防止
escalate 升级
--locking mechanism
行级锁
查询没有锁
自动队列管理
事务提交解锁
--dml locks
tm -rx表锁(防止表结构变更alter drop)
x 行锁
lock tables emplyess in exclusive mode;-手动加锁
--锁转换不用重新排队
--
数据库监控项目(找出阻塞者杀掉)
active session:
session wait;
process number;
host memory;
host cpu;
db time;
-lock confilicts 锁冲突
原因 uncommitted changes
long-running
锁升级
v$session -视图;
字段 -blocking_session -堵塞的会话id
select distinct sid from v$mystat--查看自己的session id
serial#-串号
alter system kill session 'sid,serial#';--杀掉锁
---------
desc v$session;
select distinct blocking_session from v$session where blocking_session is not null; --查看堵塞的会话id
select SID,SERIAL#,USERNAME,OSUSER,MACHINE,TERMINAL,PROGRAM,SQL_ID from v$session WHERE sid='125';
ALTER SYSTEM KILL SESSION '125,29489'; --杀掉堵塞会话
select * from v$session where blocking_session is not null; --查看哪个会话被堵塞了
-----------
--dead locks 死锁(互相等)(oracle会杀死前一个等待的session,程序还是不能运行需要前一个会话rollback才能保持数据一致性)
----------
七、adminstering user security
--select * from dba_users;--查看用户属性
schema:--某个人的对象(用户)
用户sys、system 12c sysbackup、sysdg、syskm
sysdg --主从用户
权限 sysdba、sysoper(实例管理员)、sysbackup、sysdg、syskm(管理秘钥)
用户认证方式
password 、external、global
管理员认证
密码文件(网络连接@)select * from v$pwfile_users;
(as sysdba)操作系统认证(用户在定义的组中就可以)
cat $ORACLE_HOME/rdbms/lib/config.c
$ mv config.o config.o.orig
$ make -f ins_rdbms.mk ioracle
--------------------
--普通用户管理
create user app identified by app;
grant connect,resource,unlimited tablespace,create view to app; --一般普通用户权限
alter user app default tablespace cs;
alter user app account lock;
alter user app identified by oracle; --改密码
--普通用户的操作系统认证ops$name
--权限分类
system:database(system) --select * from system_privilege_map;
object:privileges on object(某一个数据库对象)
select * from system_privilege_map; --所有的系统权限
select * from dba_sys_privs; --用户的系统权限配置情况
select * from table_privilege_map --对象权限
select * from dba_tab_privs; --用户的对象权限
--分配权限
分配系统权限:grant xx to xx;[with admin option]
分配对象权限:grant xx on bb to yyy;[with grant option(可以传给别人)] grant select on app.t to py;
--回收
系统和对象权限回收后 对对象(如建立的表)不影响
系统权限回收 不牵连其他
对象权限回收 级联停用下发的权限
revoke create session from sys01;
--roles 角色(当成system权限)
select * from dba_roles;
grant select_catalog_role to app;--查询数据字典的权限(巡检用户配置这个权限)
show parameter audit;--显示审计文件路径
create role role_name;
grant connect to role_name;
grant select any table to role_name;
--建用户
grant role_name to app;
select * from dba_role_privs; --角色分配情况
--查看用户权限
1、查看用户system权限
2、查看用户object权限
3、查看用户角色。
select * from dba_sys_privs where grantee='APP';
select * from dba_tab_privs where grantee='APP';
select * from dba_role_privs where grantee='APP';
--secure roles
set role vacationdba;启用角色
---profiles and users
作用
管理用户密码策略
管资源的限制 --resource_limit参数 必须为true 才生效
----密码策略
文件模板$ORACLE_HOME/rdbms/admin |grep pwd --utlpwdmg.sql
ALTER PROFILE DEFAULT LIMIT
failed_login_attempts --几次数锁定
password_lock_time --1--1天
password_life_time 过期时间
password_grace_time 过期后几天可以登录
password_reuse_time 密码从用时间
password_reuse_max 密码从用次数
PASSWORD_VERIFY_FUNCTION ora12c_verify_function;
alter profile default limit password_life_time unlimited;
select * from dba_profiles;--查看profile详情
--密码复杂度检查
-----------------------------------
--------------quota 配额
1、unlimite tablespace:grant unlimited tablespace to yh;
2、quota on some tablespace:alter user yh quota 10m/unlimited on users;
--least privilege--最小权限
public 对所有人的权限
administrator privilege
八、implementing oracle database auditing 数据库审计
--数据库安全
用户认证
权限
监控可疑活动
--审计分类
审计路径文件 show parameter audit(没有开统一审计前)
audit_sys_operations-参数--管理员(基本操作)审计(12c默认开启)
mandatory auditing 强制审计日志 (默认开启)
和审计相关的操作
alter table against audsys(用户的表)
管理员的开启、关闭实例
standard database auditing -标准数据库审计
value-based auditing 值的审计(基本不用了)(触发器)
fine-grained auditing(FGA) 细粒度的审计
1、审计的dml 操作
---v$option 数据库有什么功能视图
--12c打开统一审计模式(geno进程)
SHUTDOWN IMMEDIATE
lsnrctl stop
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk uniaud_on ioracle ORACLE_HOME=$ORACLE_HOME
lsnrctl start
startup
SELECT value FROM v$option WHERE parameter = 'Unified Auditing'
------默认审计规则
select * from audit_unified_policies;
---编写审计规则、启用规则、停用审计、查看审计
--创建统一审计:
CREATE AUDIT POLICY my_audit_policy
ACTIONS SELECT ON app.bb;
AUDIT POLICY my_audit_policy;
noaudit POLICY my_audit_policy;
--创建fga审计
begin
dbms_fga.add_policy (
object_schema => 'APP',
object_name => 'bb',
policy_name => 'audit_emps_salary',
audit_column => 'id',
enable => TRUE,
statement_types => 'SELECT,UPDATE');
end;
/
--查询审计信息
select * from unified_audit_trail order by event_timestamp desc;
九、数据库的backup
9.1 moving data(数据泵)
greneral architecture
data pump --数据泵
expdp 、impdp (exp、imp客户端和字符集相关)
--目录对象创建 dba_directories -目录表 默认目录名称:data_pump_dir
create directory mydir as '/u01/app/oracle';
grant read,write on directory mydir to app;
--导出expdp help=y
full、 schema 、table、tablespace
expdp \'/ as sysdba\' directory=mydir tablespaces=users ESTIMATE_ONLY=y --计算导出文件大小
expdp \'/ as sysdba\' directory=mydir dumpfile=app.dump logfile=mydir:app.log
tables=app.bb --倒表
schemas=app --倒用户(常用)
exclude=statistics --排除统计数据
tablespaces=cs1 --导出表空间
full=y --倒数据库
expdp \'/ as sysdba\' directory=mydir dumpfile=app_%u.dump logfile=app_%u.log parallel=n --并行数量
compression=all --压缩
version=11.2.04 --指定导出的版本
content=all[data_only|metadata_only(表结构)]
expdp parfile=app.para --执行参数文件
------------------------
cat app.para
userid=app/app
directory=mydir
dumpfile=apppara.dump
tables=app.bb
QUERY=bb:"WHERE id = 7"
-------------------------
--schema导入先建表空间、建用户
--导入impdp help=y| grep -i -C 3 table
impdp app/app directory=mydir dumpfile=app.dump tables=bb;
TABLE_EXISTS_ACTION=[APPEND, REPLACE, [SKIP] and TRUNCATE] --存在处理方式
remap_table='employees':'emp' ----remap 更名导入的对象
impdp app/app parfile=impdp.para
--cat impdp.para
directory=mydir
dumpfile=apppara.dump
tables=app.bb
remap_table=app.bb:aa
9.2 Sql*loader
Sql*loader -将文本文件导入数据库
Input data files-> control file->sql*load(field processing(列选择bad file)、record selection(行选择discard file))-.>database
将/etc/group 导入数据库
1、文件需要加后缀(拷贝文件加后缀)cp /etc/group group.txt
2、建表 create table linuxgroup(
groupname varchar2(30),
grouppasswd char,
groupid number(10),
groupmem varchar2(20))
3、写control file
load data
infile 'group.txt' "str '\n'"
into table linuxgroup
fields terminated by ':'
TRAILING NULLCOLS
(groupname char(30),grouppasswd char(1),groupid INTEGER EXTERNAL,groupmem char(20))
--(TRAILING NULLCOLS 空值插入null)
--modtime date ‘yyyy-mm-dd hh24:mi:ss’ --日期格式定义
4、导入命令 sqlldr app/app control=linuxgroup.ctl
Truncate table linuxgroup;
--loading methods
Conventional load --一条一条加载commit
Direct path load --以块方式保存 data saves
--external tables(只读)
--表的定义在数据库中,表的数据在操作系统的文件上
文本文件(oracle_loader驱动)
--建表文本文件的外部表
CREATE TABLE linuxgrouptxt
(groupname varchar2(30),
grouppasswd char,
groupid number(10),
groupmem varchar2(20))
ORGANIZATION EXTERNAL --定义外部表
( TYPE ORACLE_LOADER DEFAULT DIRECTORY mydir --定义类型和文件路径
ACCESS PARAMETERS
( records delimited by newline
badfile mydir:'linuxgrouptxt.bad'
logfile mydir:'linuxgrouptxt.log'
fields terminated by ':'
missing field values are null --空值设为null
( groupname,grouppasswd,groupid,groupmem)) --对应表字段
LOCATION ('group.txt') ) --读取文件名称
PARALLEL REJECT LIMIT UNLIMITED;
二进制文件(oracle_datapump)
--导出二进制文件
CREATE TABLE linuxgroupdump
ORGANIZATION EXTERNAL --定义外部表
(
TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY mydir
LOCATION ('group.exp')
)
PARALLEL
AS
SELECT * from linuxgroup; --根据查询建表
--导入二进制文件的外部表
CREATE TABLE linuxgroupimp
(
groupname varchar2(30),
grouppasswd char,
groupid number(10),
groupmem varchar2(20))
ORGANIZATION EXTERNAL --定义外部表
(
TYPE ORACLE_DATAPUMP --外部文件为二进制
DEFAULT DIRECTORY mydir --文件路径
LOCATION ('group.exp') --文件名称
);
9.3 back and recovery (物理备份)
(物理备份)
Configuring for recoverability(配置可还原配置)
--定期备份
--控制文件的复用
Show parameter control
Alter system set control_files=’’,’’,’’ scop=spfile;
Shutdown IMMEDIATE;
Cp file
startup
--
Fra:(闪回区)(内容)
1、控制文件的复用
2、redo的复用
3、backup files
4、归档日志
5、flashback log(flashback database)
配置(路径和大小)
Show parameter recover;
db_recover_file_dest_size
db_recover_file_dest
--开启闪回区
alter system set db_recovery_file_dest_size=1024M;
alter system set db_recovery_file_dest='/u01/app/oracle/fast_recovery_area';
查看闪回区大小
Show parameter recover
V$FLASH_RECOVERY_AREA_USAGE --查看各个闪回文件大小
V$RECOVERY_FILE_DEST --查看整个闪回区大小
Redo log files
复用(日志组)
V$log --查看组
V$logfile --查看组成员
创建日志组
Alter database add logfile group 4 ('xx.log','xx.log') size 50M [reuser];
增加组成员(文件)
Alter database add logfile memeber ‘xx.log’ to group 1
删除成员
Alter database drop logfile memeber ‘xx.log’;
删除组
Alter database drop logfile group 4;
Select status from v$log --查看日志状态
Current --正在用
Acitive --bufer cach的日志的脏块没有落盘
Inactive --写了库了
Unused --没有用的
Alter system switch logfile; --切换日志
Alter sysetm checkpoint; --切换检查点,dbwn
Redo & omf --默认日志路径
Show parameter db_create
Archived redo log file --归档日志
archive log list; --current log sequence --日志的切换次数
开启归档
1、shutdown immediate;
2、startup mount;
3、alter database archivelog;
4、alter database open;
5、archive log list;
Log_archive_dest_1 --参数归档日志路径
Fra:fra ---归档日志开启了闪回区日志放闪回区
No fra:$ORACLE_HOME/dbs --没有开启闪回就放软件目录
--设置归档日志路径
(企业版、配置log_archive_dest_n)
alter system set log_archive_dest_1='location=/u01/app/oracle/archive_area' mandatory(必须成功)|[optional](默认可以成功);
alter system set log_archive_dest_2=’service=remotedb’
(标准版、配置log_archive_dest/log_archive_duplex_dest='/u01/app/oracle/archive_area')
--log_archive_min_succeed_dest --归档日志最小成功系统才能用 默认值 1
作业:
Redo :添加日志组、日志文件、修改日志组大小、路径管理
archive :打开归档、修改路径
9.4 back and recover concepts (概念)
Mtbf(在线时长) mttr
--失败的分类
1、语句级失败(定义、权限、没空间、业务逻辑)
2、用户进程失败select * from v$process
3、网络失败
4、用户error(例如:错误删除):闪回
5、实例故障 kill -9 pmon 启动startup 恢复
Ckpt (检查点):实例恢复的起点
检查点队列: 按照脏块第一次对脏的顺序串起来
前滚 (将日志回写到内存)、回滚(undo(表空间))(没提交的写到内存撤销)
作业 :归档多份 归档必须成功几份 实例恢复过程
6、media failure(完全恢复、不完全恢复(重点))
Point-in-time recover ptr
--备份恢复类型
Rman
Flashback
Adg
9.5 rman (revover manager)
Rman target / --连接目标数据库
命令
Standalone --单条命令
Job
Run{
....
}
Whole --全备
Partial --部分备
Offline --冷备 (可以直接用)
Online --热备 (必须日志)
Full --对某个数据文件 所有备份
Incremental --对某个数据文件 增加的备
Cumulative累计增量备份(和第一次备份做比较)
Differential差异增量备份(和上一次比较)
--osb:oracle secure back:nbu
Rman:
Image copies(镜像拷贝)
Backup sets (备份集)(多个backup pice)
----using the rman recovery catalog (数据库)
Rman>backup spfile;
--备份文件两部分
--backup metadata --备份的源数据
1、放在控制文件中(有时间限制)
2、放catlog里面
--backup files --备份文件
--创建catlog
1、创建数据库、表空间
2、创建用户分权限
Grant unlimited tablespace to cataadmin;
3、创建calog数据库
rman catalog cataadmin/oracle --链接catalog数据库
create catalog;
drop catalog;
4、注册
--数据库端
rman target / catalog cataadmin/oracle@100.98.100.215:1521/xe
register database;
unregister database;
--catalog端进行注册
rman target sys/123qweQWE@100.98.100.225:1521/orcl catalog cataadmin/oracle
register database;
backup spfile;
作业:catalog概念 创建catalog数据库
create tablespace catlog datafile '/u01/app/oracle/oradata/orcl/catlogspace.dbf' size 20m autoextend on maxsize 30g;
create user cataadmin identified by oracle default tablespace catlog;
grant recovery_catalog_owner,unlimited tablespace to cataadmin;
rman catalog cataadmin/oracle
RMAN> create catalog
---partial 、full
--using rman stored scripts (使用rman脚本)
Delete backup
List backup;
Run {
Backup spfile;
Backup current controlfile;
}
----creating and using virtual private catalogs
---catalog command (手动添加源文件,收录到数据库)
Catalog start with ‘路径’
--收录某类的文件
作业:注册数据库、创建脚本 、收录
--建立catalog数据库
-- 1、建表空间
create tablespace catlog datafile '/u01/app/oracle/oradata/xe/catlogspace.dbf' size 20m autoextend on maxsize 30g;
-- 2、建用户分权限
create user cataadmin identified by oracle default tablespace catlog;
grant recovery_catalog_owner,unlimited tablespace to cataadmin;
--链接catalog建catalog库
rman catalog cataadmin/oracle
RMAN> create catalog
--源端链接catalog数据库进行注册
Rman target sys/123qweQWE@100.98.100.225/orcl catalog cataadmin/oracle
Register database;
--创建备份脚本、查看
create script backup_controlfile{
backup spfile;
Backup current controlfile;
}
list script names;
print script backup_controlfile;
--运行脚本
RUN { EXECUTE SCRIPT backup_controlfile;
}
--收录备份文件的源到catalog库
catalog start with '/u01/app/oracle/fast_recovery_area/ORCL/backupset/2019_09_08';
--删除查看备份
delete backup;
list backup;
---performing backups
backup (show all 显示rman所有配置)
1、spfile,controlifile,datafile,(online redo),archive log,(password file),(alert),(trace) --rman不能备份打括号的
2、备份命令
CONFIGURE BACKUP OPTIMIZATION ON; --打开备份的时候备份控制文件和参数文件的参数
spfile :backup spfile
Controlfile :
Rman> backup [as backupset] current controlfile;
Rman> backup as copy current controlfile;
--镜像拷贝
SQL> alter database backup controlfile to '/tmp/control.ctl';
SQL> alter database backup controlfile to trace as '/tmp/control.trc';
Datafile:
Rman>report schema;
Rman>backup datafile 8|’xxxwjm’;
Sql>backup as copy datafile 8|’xxxwjm’;
Tablespace,database:
Rman>backup tablespace xxx;
Rman>backup database;--包含spfile,controlifile,datafile
Rman>backup database plus archivelog delete input(删除备份了的归档); --全库备份
Archivelog:
Rman>backup archivelog all [delete input];
9.6 incrementally updated backups (增量备份)
Rman target /
Rman >Report schema;
backup incremental level 0 datafile 7;
Backup [Differential/cumulative] incremental level 1 datafile 5;
Differential(差异增量)/cumulative(累计增量和0比)
List backup of datafile 5
Fast incrementall back (快速备份)
--启用快速备份(块跟踪)ctwf进行块写
Alter database
{enable|disable} block change tracking
[using file ‘...’] (开启了omf可以不用写该文件,软件自己放路径)
SELECT file#, avg(datafile_blocks),
avg(blocks_read),
avg(blocks_read/datafile_blocks)
* 100 AS PCT_READ_FOR_BACKUP,
avg(blocks)
FROM
v$backup_datafile
WHERE used_change_tracking = 'YES'
AND
incremental_level > 0
GROUP BY file#;
--查看备份块情况
查看备份情况
List back of ...
List copy of ..
Report schema;
Report obsolete; --查看过期备份
Delete obsolete --删除过期文件
删除找不到的文件。
Crosscheck copy(类型);--检查一下
Delete expired copy; --expired 找不到文件的源数据记录
List copy;
备份压缩
备份集才可以压缩(镜像拷贝不能压缩)
Backup [as copy|as compressed backupset] datafile 5;
备份大文件方法
Backup daafile 5 section size =25M;(一般和并行用如下)
作业:增量备份、开启块追踪、删除过期、压缩备份、大文件备份
backup incremental level 0 datafile 7;
backup cumulative incremental level 1 datafile 7;
list backup of datafile 7;
alter database enable block change tracking;
report obsolete;
List copy;
Crosscheck copy;
Delete expired copy;
backup as compressed backupset datafile 5;
对备份集的备份
Backup backupset all;
Backup backupset 4;
备份多份
方法1、修改rman 配置,指定备份地方
还原rman的配置用
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO clean;
方法2、命令方式
Archival backups (打破默认的保存策略)指定过期时间
1、配置自动备份控制文件
2、开启归档模式
3、全库备份
Restore恢复
Resore & recovery
1、parameter file 参数文件问题
方法一、
Create pfile from spfile;
改pfile,启动数据库
方法二、自己配置参数文件
2、password file 密码文件恢复(远程的管理员用户)
Cd $ORACLE_HOME/dbs
Orapwd file=orapw<sid>
作业:备份多份、参数文件密码文件恢复
backup database plus archivelog delete input;
backup copies 2 format '/tmp/datafile%U','/home/oracle/datafile%U' datafile 7;
3、crcial (关键性文件)
Control file, system tbs,undo tbs,online redo log
4、datafile (数据文件损坏恢复)
Creater table a(id int) tablespaces cs;
--清理缓存
--查看损坏文件
Rman >Select * from v$recover_file;
Rman >validate database;
方法rman:
1、离线数据文件
Alter database datafile 2 offline;
2、恢复
Restore datafile 2;
3、跑日志
Recover datafile 2;
4、Alter database datafile 2 online;
Tablespces
数据库恢复
System\undo:
Archvie log(恢复归档文件)
List backup of Archivelog all;
Restore archivelog all |sequence 65;
--查看数据文件和控制文件的头 必须一样才能启动
作业:数据库文件恢复、表空间恢复、归档文件恢复
select table_name,TABLESPACE_NAME from dba_tables where TABLESPACE_NAME='USERS';
mv /u01/app/oracle/oradata/prod/users01.dbf /u01/app/oracle/oradata/prod/users01.dbf.bak
SQL> select * from OJDS$BINDINGS$;
select * from OJDS$BINDINGS$
*
ERROR at line 1:
ORA-01116: error in opening database file 6
ORA-01110: data file 6: '/u01/app/oracle/oradata/prod/users01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Rman>validate database;
--恢复
Rman>Alter database datafile 6 offline;
restore datafile 6;
recover datafile 6;
alter database datafile 6 online;
----------表空间恢复
rm -rf example01.dbf
restore tablespace example;
recover tablespace example;
alter database open;
------数据库的恢复
rm -rf system01.dbf
alter system flush buffer_cache;
alter system flush shared_pool;
Rman>validate database;
Restore database;
recover database;
Alter database open;
-----------controlfile控制文件恢复
Parameter ,controlfile:nomount模式下
Rman>
作业:删除参数文件 控制文件 进行数据库恢复
/u01/app/oracle/fast_recovery_area
/u01/app/oracle/oradata/orcl/control01.ctl
/u01/app/oracle/ fast_recovery_area/orcl/control02.ctl
----恢复参数、控制文件
rman target /
Startup nomount;
restore spfile from autobackup recovery area = '/u01/app/oracle/fast_recovery_area/' db_name = 'ORCL';
Startup nomount force;
restore controlfile from autobackup;
Alter database mount;
Recover database;
Alter database open resetlogs;
----
-重新进行备份
Rman>backup database plus archivelog delete input;
控制文件没有备份如何恢复
1、另外一台oracle 生成模板
2、修改配置
修改库名称
修改日志文件、数据文件路径
Redo 日志恢复(v$log \v$logfile)
(思路 建正在用的变成用过的,用过的变成没在用的,然后clear日志)
如果不能实现,只能不完全恢复
1、只是某个logdata损坏,删除新建
2、某个日志组损坏。
一、Inactive模式的日志
A、做了归档
B、直接 Alter database clear logfile group 4;
二、active模式的日志
写库 checkpoint 变成 inactive
Alter system checkpoint;
Clear日志
Alter database clear logfile group 4;
三、curent模式的日志
日志切换 log switch
Alter system switch logfile;
变成 active,进行写盘
Alter system checkpoint;
Clear日志
Alter database clear logfile group 4;
作业:通过模板恢复控制文件、redo日志的恢复
---inactive 日志文件恢复
select GROUP#,STATUS from v$log;
select group#,member from v$logfile;
alter database clear logfile group 1;
--active 日志文件恢复
SQL> select GROUP#,STATUS from v$log; --查看到3日志组待写盘
GROUP# STATUS
---------- ----------------
1 CURRENT
2 INACTIVE
3 ACTIVE
rm -rf redo03.log --删除3日志组
Alter system checkpoint; --进行写盘操作
SQL> select GROUP#,STATUS from v$log; --日志组3变成了用过的日志
GROUP# STATUS
---------- ----------------
1 CURRENT
2 INACTIVE
3 INACTIVE
SQL> alter database clear logfile group 3; --clear 将日志resetlog,生成新日志文件
--CURRENT 正在用的日志恢复
Alter system switch logfile;
变成 active,进行写盘
Alter system checkpoint;
Clear日志
Alter database clear logfile group 4;
----手动编写控制文件
alter database backup controlfile to trace as '/tmp/contro.ctl';
不完全恢复(整体还原)
1、找时间点(time、scn、sequence#、restore point)
相关人员告诉
分析日志
Select group#, Firest_time,next_change# from v$log;
还原
Run{
Startup mont force;
Set until scn 1323434;
Restore database;
Recover database;
Alter database open resetlogs;
}
Oracle 备份进度查看
作业 :不完全恢复
--插入表数据
insert into a select * from a;
Cmmit;
--查看正在用的日志组
SQL> select GROUP#,STATUS from v$log;
GROUP# STATUS
---------- ----------------
3 CURRENT
2 INACTIVE
1 INACTIVE
--删除日志组
rm -rf /u01/app/oracle/oradata/orcl/redo3.log
--找到可以还原的时间点
SQL> select GROUP#,FIRST_CHANGE#,NEXT_CHANGE# from v$log;
GROUP# FIRST_CHANGE# NEXT_CHANGE#
---------- ------------- ------------
1 4976405 4977820
2 4977820 4979576
3 4979576 2.8147E+14
--全库还原
Run{
startup mount force;
set until scn 4979576;
restore database;
recover database;
alter database open resetlogs;
}
--进行全库备份
backup database plus archivelog delete input;
-----建备份还原到新环境中
Set newname for datafile and set newname for tempfile
Set newname for tablespace
Set newname for database
作业:nolong、newname
---nolong表情况 example is nolong表空间。
create table b (id int) tablespace EXAMPLE;
Rm-rf /u01/app/oracle/oradata/prod/example01.dbf
alter database datafile 5 offline drop;
Restore datafile 5;
recover datafile 5;
alter database datafile 5 online;
--newname 还原到新地方
Run {
Sql 'alter tablespace example offline immediate';
Set newname for tablespace example to '/home/oracle/%b';
Restore tablespace example;
Switch datafile all;
Recover tablespace example;
Sql 'alter tablespace example online';
}
RMAN> report schema;
--镜像拷贝恢复(建现在用的文件用备份的镜像直接替换)
List copy of datafile 5;
alter database datafile 5 offline drop;
--用copy的镜像替换datafile'/home/oracle/example01.dbf'
switch datafile '/home/oracle/example01.dbf' to copy;
recover datafile 5;
alter database datafile 5 online;
recover copy of database with tag 'daily_inc';
Backup incremental level 1 for recover of copy with tag 'daily_inc' database;
---非归档模式的备份恢复alter database noarchivelog;
Noarchivelog:
Full-全备:
Backup: mount -->backup(backup database;backup current controlfile;)
Restore: mount-->restore database;-->alter database open resetlogs;
增量:
Backup: mount -->
第一天
backup incremental leve 0 database;
Backup current controlfile;
第二天
backup incremental leve 1 database;
Backup current controlfile;
...........
Restor:
Restore latest controlfile;
Mount;
Restore database;
Recover database noredo;
alter database open resetlogs;
disaster recovery --灾难性恢复
最小需求
Backups of data files
Corresponding archived redo logs files
At least one control file autobackup
----数据文件不在、控制文件不在、参数文件不在
步骤
1、恢复参数文件
Rman
A、启动哑实例:startup nomount
B、恢复参数文件:
2、以参数文件启动实例
Startup nomount force;
恢复控制文件
3、使用控制文件启动到mount;
Alter database mount;
恢复库(日志没丢完全恢复、丢日志不完全恢复)
Restore database & recover database;
4、alter database open resetlogs;(改变了控制文件需要重写日志)
------alter system archive log current;--对日志进行归档
---删除了所有的归档日志处理办法
List archivelog all;
Crosscheck archivelog all;
Delete archivelog all;
backup database plus archivelog delete input;
备份后--alter system archive log current;--对日志进行归档
作业:灾难性恢复
删除数据文件、控制文件、参数文件。
Shutdown abort;
Startup nomount;
恢复参数文件
restore spfile from autobackup recovery area='/u01/app/oracle/fast_recovery_area/' db_name='orcl';
以参数文件启动实例
Startup nomount force;
恢复控制文件
restore controlfile from autobackup ;
Alter database mount;
恢复数据库
Restore database;
Recover database;
打开数据库;
alter database open resetlogs;
还原到新主机--不完全恢复
Archivelog mode+whole database;
archive log list;
backup database plus archivelog delete input;
alter system archive log current;
1、控制文件
Create pifile from spfile;
Scp pifile 到新机器对应目录
修改pifile 建目录
export ORACLE_SID=prod
Rman 启动到nomount
2、恢复controlfile文件
Prod
List backup of controlfile;
Scp controlfile 到新主机
Restore controlfile from ‘控制文件路径’;
Alter database mount;
List backup;--找最新的archlog的 scn用于不完全恢复
3、恢复数据库
拷贝prod的最新备份文件到新主机相同目录下(建目录)
Restore & recover database
Run{
Set until scn 15454;
Restore database;
Recover database;
}
alter database open resetlogs;
作业:还原到新主机
1、还原参数文件
Prod
create pfile from spfile;
scp initprod.ora oracle@192.168.20.251:/u01/app/oracle/product/12.1.0/dbhome_1/dbs/
修改新主机的initprod.ora
mkdir -p /u01/app/oracle/admin/prod/adump /u01/app/oracle/oradata/prod /home/oracle/mydir /u01/app/oracle/fast_recovery_area /u01/app/oracle
新主机
export ORACLE_SID=prod
rman target /
startup nomount;
2、恢复controlfile文件
Prod
List backup of controlfile;
scp /u01/app/oracle/fast_recovery_area/PROD/autobackup/2019_10_13/o1_mf_s_1021547306_gt559b8s_.bkp oracle@192.168.20.251:/home/oracle/
新主机
Restore controlfile from '/home/oracle/o1_mf_s_1021547306_gt559b8s_.bkp';
Alter database mount;
Prod
List backup;--找最新的archlog的 scn用于不完全恢复
List of Archived Logs in backup set 25
Thrd Seq Low SCN Low Time Next SCN Next Time
---- ------- ---------- --------- ---------- ---------
1 29 2848763 13-OCT-19 2848803 13-OCT-19
3、恢复数据库
拷贝prod的最新备份文件到新主机相同目录下(建目录)
新主机:mkdir -p /u01/app/oracle/fast_recovery_area/PROD/backupset
Prod:scp -r /u01/app/oracle/fast_recovery_area/PROD/backupset/2019_10_13 oracle@192.168.20.251:/u01/app/oracle/fast_recovery_area/PROD/backupset/
新主机:
Restore & recover database
Run{
Set until scn 2848803;
Restore database;
Recover database;
}
4、启动库
alter database open resetlogs;
Duplicate database --复制数据库
在线复制
基于备份的复制(对生产没有影响)--(连接生产、不连接生产)--连接新主机
12c新概念
The push process is based on image copies; 镜像拷贝
The pull process is based on backup sets;12c 新特性 (备份集拷贝)
---在线复制-复制成新实例名称
1、复制initorclt.ora到新主机
2、修改initoraclt.ora 的实例名称和路径、建立路径
3、启动到nomount
4、启动监听alter system register;
5、静态注册,改配置文件
6、准备脚本http://www.xuwang.online/index.php/archives/57/
7、准备密码文件 orapwd file=$ORACLE_HOME/dbs/orclpwdb01
8、
9、运行脚本
作业:在线复制数据库
11的prod 复制到251成orcl
1、复制initorclt.ora到新主机
scp initprod.ora oracle@192.168.20.251:/u01/app/oracle/product/12.1.0/dbhome_1/dbs/initorcl.ora
2、修改initoraclt.ora 的实例名称和路径、建立路径
:%s/prod/orcl/g
Mkdir -p /u01/app/oracle/admin/orcl/adump /u01/app/oracle/oradata/orcl/
3、启动到nomount
export ORACLE_SID=orcl
sqlplus / as sysdba
Startup nomount;
4、启动监听alter system register;
静态注册,改配置文件
LISTENER =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.20.251)(PORT=1521))
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME = orclzc)
(SID_NAME = orcl)
(ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1)
)
)
6、准备脚本http://www.xuwang.online/index.php/archives/57/
run{
SET NEWNAME FOR DATABASE TO '/u01/app/oracle/oradata/orcl/%b';
DUPLICATE TARGET DATABASE TO orcl
FROM ACTIVE DATABASE
NOFILENAMECHECK
logfile
group 1 ('/u01/app/oracle/oradata/orcl/redo01a.log') SIZE 50M REUSE,
group 2 ('/u01/app/oracle/oradata/orcl/redo02a.log') SIZE 50M REUSE,
group 3 ('/u01/app/oracle/oradata/orcl/redo03a.log') SIZE 50M REUSE;
}
7、rman连接目标库和还原库
orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle
rman target sys/oracle@192.168.20.11:1521/prod auxiliary sys/oracle@192.168.20.251:1521/orclzc
backup-based duplicate (orcl ---> cfopdb)
1. Create an Oracle password file for the auxiliary instance. (optional)
$ orapwd file=orapwcfopdb
2. Establish Oracle Net connectivity to the auxiliary instance. (optional)
3. Create an initialization parameter file for the auxiliary instance.
4. Start the auxiliary instance in NOMOUNT mode.
[oracle@demo dbs]$ export ORACLE_SID=cfopdb
[oracle@demo dbs]$ rman target /
startup nomount;
5. Mount or open the target database.
SQL> select status from v$instance;
6. Ensure that backups and archived redo log files are available.
$ scp /u01/app/oracle/fast_recovery_area/ORCL/archivelog/2019_10_13/* 192.168.20.10:/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2019_10_13/
7. Allocate auxiliary channels if needed.
8. Execute the DUPLICATE command.
$ rman target sys/oracle@192.168.20.250:1521/orcl auxiliary /
RMAN> RUN
{SET NEWNAME FOR DATABASE TO '/u01/app/oracle/oradata/cfopdb/%b';
DUPLICATE TARGET DATABASE to cfopdb NOFILENAMECHECK
logfile
group 1 ('/u01/app/oracle/oradata/cfopdb/redo01a.log') SIZE 50M REUSE,
group 2 ('/u01/app/oracle/oradata/cfopdb/redo02a.log') SIZE 50M REUSE,
group 3 ('/u01/app/oracle/oradata/cfopdb/redo03a.log') SIZE 50M REUSE;
}
rman加密恢复
TDE(钱夹的方式 基于钥匙的加密)
1、基于口令的加密
恢复
2、基于钥匙的加密
http://www.xuwang.online/index.php/archives/140/
A、建钥匙目录
Mkdir /u01/wallet
B、配置钱夹位置
More $ORACLE_HOME/network/admin/sqlnet.ora
Lsnrctl stop / start
C、创建秘钥
Sqlplus / as sysdba
作业:秘钥加密、钱夹方式加密、双栈模式
Rman
--密码加密备份
SET ENCRYPTION ON IDENTIFIED BY 'oracle' only; run{
Backup datafile 6; }
alter database datafile 6 offline;
rm /u01/app/oracle/oradata/prod/users01.dbf;
--密码提供恢复
SET DECRYPTION IDENTIFIED BY 'oracle';run{
restore datafile 6;
recover datafile 6;}
--钱夹加密
--建目录
Mkdir /home/oracle/wallet
--编辑sqlnet.ora
--重启监听实例
--sqlplus / as sysdba
--创建keystore文件
--打开keystore文件
--生成key
--打开wallet
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/home/oracle/wallet' IDENTIFIED BY oracle;
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY oracle;
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY oracle WITH BACKUP USING 'for_12c';
ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "oracle";
rman
SET ENCRYPTION ON;
run {
backup datafile 6;
}
alter database datafile 6 offline;
restore datafile 6;
--diagnosing failures
Adr(repository仓库)/ dra(advisor顾问)
考--参数diagnostic_dest 指定adr 的路径
Dra 只支持单实例 不支持rac
支持主从切换
Dra 功能作用
Dra 步骤
Validate database; --对数据库进行校验、检查是否有错误。
Rman
List failure;
Advise failure;
Repair failure;
---cure日志出问题实例直接挂了
启动到mount;
不完全恢复
--block 恢复
物理坏块
--查看坏块
1、Ora-01578 物理坏块
2、告警日志
3、看视图
防止坏块参数(性能)
恢复坏块:
1、制作坏块
2、人为校验 rman > validate database;
Validate datafile 5;
Select * from v$database_block_corruption;
3、修复
Recover datafile 5 block 150;
recover corruption list;
ADG 主备库
逻辑坏块
作业:物理坏块修复
1、制作坏块
dd if=/dev/zero of=/u01/app/oracle/oradata/prod/users01.dbf count=2 seek=150 bs=8192 conv=notrunc
2、人为校验
rman > validate database;
Select * from v$database_block_corruption;
3、修复坏块
Recover datafile 6 block 150;
Recover datafile 6 block 151;
recover corruption list;
pitr 基于时间点的还原
Tspitr:表空间基于时间点的还原(启动辅助实例-导出源数据-修改原来的datafile)
Tpirt:表基于时间点的还原 (12c)(启动辅助实例-导出表数据-导入数据表)
Target time:目标点
Recover set:需要恢复的表空间集合
Auxiliary set:辅助完成需要的集合
Auxiliary destination --辅助实例目录
操作:
1、Backup database;
2、Select to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual;
3、Drop table name;
4、-检查表空间是否self-contain(是否独立是否和其他表空间关联)
5、--check lost object --检查是否有丢失数据
6、还原表空间到时间点
Users是永久表空间,不能删除,需要换一个表空间进行实验
作业:表空间、表的时间点的恢复
--表空间的时间点恢复
create tablespace cytbs datafile '/u01/app/oracle/oradata/prod/cytbs01.dbf' size 10m;
backup database;
create table hr.regionscp tablespace cytbs as select * from hr.regions;
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2019-10-19 15:45:27
drop table hr.regionscp;
1. self-contain
exec DBMS_TTS.TRANSPORT_SET_CHECK ('CYTBS');
SELECT * FROM TRANSPORT_SET_VIOLATIONS;
2. check lost object
select owner, name,to_char(creation_time,'yyyy-mm-dd hh24:mi:ss') create_time
from ts_pitr_objects_to_be_dropped
where tablespace_name = 'CYTBS' and
creation_time > to_date('2019-10-19 15:45:27','yyyy-mm-dd hh24:mi:ss');
3. 还原表空间
mkdir /home/oracle/aux
rman target /
RECOVER TABLESPACE cytbs
UNTIL TIME "to_date('2019-10-19 15:45:27','yyyy-mm-dd hh24:mi:ss')"
AUXILIARY DESTINATION '/home/oracle/aux';
4、alter tablespace cytbs online;
--表的时间点恢复
Backup database
1、创建表
2、查找时间点
3、drop table (truncate 表不能还原(提示表存在,可以再次把表删除再还原))
4、检查self-contain和check lost object
4、还原表
create table hr.regionscp tablespace cytbs as select * from hr.regions;
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2019-10-19 16:01:16
drop table hr.regionscp;
recover table hr.regionscp
until time "to_date('2019-10-19 16:01:16','yyyy-mm-dd hh24:mi:ss')"
auxiliary destination '/home/oracle/aux';
Transporting data 可传输表空间
跨平台功能 版本10.0以上
表空间传输操作:
1、查看系统是否支持
2、检查表空间自包含
3、修改表空间read only
Alter tablespace tabales_name read only;
4、倒源数据
5、转换数据 (不同系统)
Rman >
注:%U唯一名称
6、让生产库表空间可读
Alter tablespace tabales_name read write;
7、传输源和转换后的数据文件到新主机
8、源数据放到data_pump_dir 目录下
Select * from dba_directories
9、新主机导入
Alter tablespace tabales_name read write;
exclude=statistics ---不导入统计信息
content=metadata_only --只导出源数据
作业:传输表空间
1、select * from v$transportable_platform;
execute dbms_tts.transport_set_check('CYTBS',true);
select * from transport_set_violations;
2、Alter tablespace CYTBS read only;
3、expdp system/oracle dumpfile=cytbs.tbs.metadata transport_tablespaces=CYTBS
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 is:
/u01/app/oracle/admin/prod/dpdump/cytbs.tbs.metadata
******************************************************************************
Datafiles required for transportable tablespace CYTBS:
/u01/app/oracle/oradata/prod/cytbs01.dbf
新主机
4、select * from dba_directories where directory_name='DATA_PUMP_DIR';
5、新主机导入
impdp system/123qweQWE dumpfile=cytbs.tbs.metadata transport_datafiles='/u01/app/oracle/oradata/orcl/cytbs01.dbf';
Alter tablespace CYTBS read write;
Rman troubleshooting rman告警
Debuge 选项
Rman 三个阶段Read、 process、 write 读、 处理、 写
Backup validate database 只进行读 处理 不写 (测试速度)
V$backup_async_io v$backup_sync_io --异步io 同步io视图
V$session_longops --时间很长的语句
注 :rman 看进度
Rman 调优
BEST PRACTISE
1. whole ---> partial --部分备份
2. increamtal backups (block change tracking) --增量备份
3. multile channel( parallel) --多通道 并行
RMAN>run{
ALLOCATE CHANNEL c1 DEVICE TYPE disk;
ALLOCATE CHANNEL c2 DEVICE TYPE disk;
ALLOCATE CHANNEL c3 DEVICE TYPE disk;
backup database;
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
}
-----手工指定通道
BACKUP
INCREMENTAL LEVEL = 0
(DATAFILE 1,4,5 CHANNEL c1)
(DATAFILE 2,3,9 CHANNEL c2)
(DATAFILE 6,7,8 CHANNEL c3);
---
4. Compress --压缩
5. section size + parallel --大文件分块+并行
6.
a.CONFIGURE BACKUP OPTIMIZATION ON --rman自动优化参数(备了的就不备份了)
b.backup archivelog delete input;
c.backup archivelog;
delete archivelog until time "sysdate-1/24" --删除一小时以前的所有归档
7. large pool --配置大池
8. minnus backup or restore --最小备份恢复
Use block media recovery for isolated block corruptions.
十、闪回
准备配置:
Flashback privileges
Show parameter undo;
undo_management string AUTO
--显示当前数据库的scn号
1、闪回查询
2、闪回版本查询(两点之间的变化)
作业:闪回查询
create table a(id int);
insert into a values(1);
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
3615339
update a set id=10 where id=1;
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
3615366
--闪回查询
select * from a as of scn 3615339 where id=1;
--闪回版本查询
select versions_xid,VERSIONS_STARTSCN,VERSIONS_ENDSCN,id from a versions between scn 3615339
and 3615366;
--闪回查询 做了ddl语句就不能生效
发生段的收缩 不能查询
3、闪回事务查询
(分析作用)(里面有undo sql)
Flashback_transaction_query --闪回事务查询表
select * from FLASHBACK_TRANSACTION_QUERY where table_name='REGIONS';
需要开附加日志
Alter database Add supplemental log data;
闪回事务
select * from FLASHBACK_TRANSACTION_QUERY where table_name='A';
Dbms_falshback.transaction_backout (调用闪回存储方法)
declare
xids sys.xid_array;
begin
xids := sys.xid_array('04000D00A9050000');
dbms_flashback.transaction_backout(1,xids,options=>dbms_flashback.nocascade);
end;
/
注意:闪回事务不自带提交
Write-after-writer 多个事务更新,闪回前一个的时候
Primary key depend 多个事务delet-insert,主键冲突 (对delete事务闪回)
Foreign key depend 多个事务多张表 表一insert 表二引用表一的insert数据(对表一的事务闪回)
Cascade(级联)、nocascade、nocascade_force、nonconflict_only(闪回不冲突的)
作业:闪回事务
--打开闪回事务日志(日志会变大)
Alter database Add supplemental log data;
--查询闪回信息记录表
select * from FLASHBACK_TRANSACTION_QUERY where table_name='A';
--输入xid闪回事务
declare
xids sys.xid_array;
begin
xids := sys.xid_array('0200180082100000');
dbms_flashback.transaction_backout(1,xids,options=>dbms_flashback.nocascade);
end;
/
--进行事务提交
Commit;
4、闪回表
In-place
相关权限
Alter table table_name enable row movement; --开启表移动
select current_scn from v$database;
update hr.regions set region_name='sc';
commit;
flashback table hr.regions to scn 2476463;
自带提交
注意:统计信息不能闪回
操作时要锁表
系统表不能闪回
Ddl 不能跨越
产生undo redo data
5、闪回drop
Recycle bin(放在回收站)(默认开启)show parameter recycle
Show recyclebin;
Flashback table emjployes to before drop;
flashback table regionscp to before drop rename to oldregionscp;
flashback table "BIN$lT6QVYSWd+DgU/r+Gawd/A==$0" to before drop;
Show recyclebin;--显示回收站信息
Dba_free_space ---数据库空间
Purge table regionscp; --清理回收站最老的数据
System\sys 用户操作没有回收站
6、闪回数据归档
Temporal history(11g)
把某个表的操作归档到表中(闪回归档)
1、建表空间
2、创建闪回归档
3、表关联数据归档
create tablespace fdatbs datafile '/u01/app/oracle/oradata/orcl/fdatbs01.dbf' size 10m;
CREATE FLASHBACK ARCHIVE fda1 TABLESPACE fdatbs QUOTA 10M RETENTION 1 YEAR;
ALTER TABLE HR.REGIONS FLASHBACK ARCHIVE fda1;
表做了闪回归档,就不能删除了
Temporal validity and history(12c)--数据自动归档
作业:闪回表、闪回drop、配置某表的闪回归档
--闪回表
create table hr.cs(id int,name varchar2(20));
insert into hr.cs values (1,'zhangs');
SQL> select current_scn from v$database; --查询scn号
CURRENT_SCN
-----------
3736392
insert into hr.cs values (2,'zhangs');
Commit;
Alter table hr.cs enable row movement; --配置行移动
flashback table hr.cs to scn 3736392; --闪回表到某个点
--闪回drop
drop table hr.cs;
Show recyclebin; --查看回收站
Flashback table hr.cs to before drop; --闪回表
--配置某表的闪回归档
create tablespace fdatbs datafile '/u01/app/oracle/oradata/prod/fdatbs01.dbf' size 10m; --创建表空间
CREATE FLASHBACK ARCHIVE fda1 TABLESPACE fdatbs QUOTA 10M RETENTION 1 YEAR; --创建闪回归档
ALTER TABLE HR.cs FLASHBACK ARCHIVE fda1; --表关联数据归档
ALTER TABLE HR.cs no FLASHBACK ARCHIVE ; --撤销关联
7、闪回数据库
逻辑闪回 rman物理还原
前提: 开闪回区
开归档
开闪回数据库
Shutdown immediate;
Starup mount;
Show parameter recover;
archive log list;
Alter database flashback on;
Alter database open;
使用:
select current_scn from v$database;
Drop user hr cascade; --删除用户及表
Startup mount force;
Flashback database to scn 3750985;
Alter database open read only; --只读模式后可以多次进行闪回
Alter database open resetlogs;
--查询最早闪回时间
Guaranteed restore points --强制还原点
十一、managing spaces
Block space management
(ASMM)
(pctfree 作用) Row chain/row migrate 行连接(insert时) 行迁移(update)
Select chain_cnt,avg_row_len from user_tables where table_name='hr.cs';
analyze table hr.cs compute statistics;--表分析
alter table hr.cs move ; --表移动可以消除块和指针分离的情况,提高查询速度 (表迁移索引会失效)
Segments 段
Understanding deferred segment creation --延迟段分配
Show paramater defer; --参数
下面三类不能延迟段分配:
Iot表 (索引表)
分区表
字典类型表空间的表
Alter index test_1 rebuild online;--在线建索引,不加online会锁表
Unusable 不分配表空间,回收空间
Table compression--表压缩
Direct-path insert operations --基本压缩(一次性导入,其他在次insert没什么用)(直接路径加载)
-默认-pctree=0 --内容不经常变得表
Advanced row compression for dml dperations --高级压缩,所有的操作都可以(写数据要慢点、很耗cpu)
(12c语法)
高级压缩使用情况:
堆表、分区表、nested table
不能用情况:
多余255列的表、基本压缩不能删除列,高级压缩可以删除列
Select * from dba_segments;--段表
作业表压缩:基本压缩、高级压缩
create table big as select * from dba_objects;
insert into big select * from big;
commit;
create table nocompresst as select * from big;
create table compresst COMPRESS BASIC as select * from big;
create table compresst_oltp ROW STORE COMPRESS ADVANCED as select * from big where 1=2;
insert into compresst_oltp select * from big;
commit;
--查看
select segment_name,bytes/1024/1024 from dba_segments where segment_name in ('NOCOMPRESST','COMPRESST','COMPRESST_OLTP');
Tablespace monitoring --表空间监控
Shrinking segments
--收缩表空间
操作(不能对sys表空间的表进行操作)
Alter table table_name enable row movement;--行移动
Alter table table_name shrink space compact; --移数据
Alter table bable_name shrink space; --移水位线(锁表)
Rowid 变动 索引失效
--shrinking
自动维护索引
不会触发 触发器
节省空间
Iot表 建议重修rebuit二级索引
Assm segments 自动表空间管理
段顾问(只能用在自动段空间管理的表空间)
自动跑
手动运行段顾问
--分析表是否有空的高水位线
variable id number;
begin
declare
name varchar2(100);
descr varchar2(500);
obj_id number;
begin
name:='advisor_cy test3';
descr:='Segment Advisor Example';
dbms_advisor.create_task (
advisor_name => 'Segment Advisor',
task_id => :id,
task_name => name,
task_desc => descr);
dbms_advisor.create_object (
task_name => name,
object_type => 'TABLE',
attr1 => 'HR',
attr2 => 'BIGT',
attr3 => NULL,
attr4 => NULL,
attr5 => NULL,
object_id => obj_id);
dbms_advisor.set_task_parameter(
task_name => name,
parameter => 'recommend_all',
value => 'TRUE');
dbms_advisor.execute_task(name);
end;
end;
/
tablespace-based:
object_type:TABLESPACE
attr1: <tablespace-name>
attr2: NULL
----查看分析结果
col task_name format a10
col segname format a10
col partition format a10
col type format a10
col message format a30
select af.task_name, ao.attr2 segname, ao.attr3 partition, ao.type, af.message
from dba_advisor_findings af, dba_advisor_objects ao
where ao.task_id = af.task_id
and ao.object_id = af.object_id
and lower(af.message) like '%shrink%';
作业:创建一个大表,删除数据 分析是否有空高水位线,进行shrink
create table hr.big as select * from dba_objects;
insert into hr.big select * from hr.big;
Commit;
Delete hr.big;
---进行分析
variable id number;
begin
declare
name varchar2(100);
descr varchar2(500);
obj_id number;
begin
name:='advisor_cy test3';
descr:='Segment Advisor Example';
dbms_advisor.create_task (
advisor_name => 'Segment Advisor',
task_id => :id,
task_name => name,
task_desc => descr);
dbms_advisor.create_object (
task_name => name,
object_type => 'TABLE',
attr1 => 'HR',
attr2 => 'BIG',
attr3 => NULL,
attr4 => NULL,
attr5 => NULL,
object_id => obj_id);
dbms_advisor.set_task_parameter(
task_name => name,
parameter => 'recommend_all',
value => 'TRUE');
dbms_advisor.execute_task(name);
end;
end;
/
--查看结果
col task_name format a10
col segname format a10
col partition format a10
col type format a10
col message format a30
select af.task_name, ao.attr2 segname, ao.attr3 partition, ao.type, af.message
from dba_advisor_findings af, dba_advisor_objects ao
where ao.task_id = af.task_id
and ao.object_id = af.object_id
and lower(af.message) like '%shrink%';
--进行shrink
Alter table hr.big enable row movement;--行移动
Alter table hr.big shrink space compact; --移数据
Alter table hr.big shrink space; --移水位线(锁表)
Managing Resumable space allocation
--空间不够暂停jobs 可唤醒表空间管理
操作
Show parameter resum;
Alter session enable resumable timeout 3600;
Select * from dba_resumable; --查看等待多少时间
使用唤醒表空间的情况
The following operations are resumable:
Queries: SELECT statements that run out of temporary
space (for sort areas)
DML: INSERT,
INSERT UPDATE,
UPDATE and DELETE statements
The following DDL statements:
CREATE TABLE ... AS SELECT
CREATE INDEX
ALTER INDEX ... REBUILD
ALTER TABLE ... MOVE PARTITION
ALTER TABLE ... SPLIT PARTITION
ALTER INDEX ... REBUILD PARTITION
ALTER INDEX ... SPLIT PARTITION
CREATE MATERIALIZED VIEW
Automat tasks --自动任务
Schedule(时间) ---job ---program(任务块)
SELECT t.* FROM dba_jobs t; --查看所有的job
--创建job任务
1. create program
BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM(
program_name =>'my_pro1',
program_action =>'begin
insert into hr.job_test1 values(sysdate);
commit;
end;',
program_type =>'PLSQL_BLOCK',
number_of_arguments =>0,
comments =>'insert sysdate into table',
enabled =>TRUE);
END;
/
2. create schedule
BEGIN
dbms_scheduler.create_schedule(
repeat_interval => 'FREQ=SECONDLY;INTERVAL=30',
start_date => sysdate,
comments => 'Start Every 30 seconds',
schedule_name => 'my_sch1');
END;
/
3. create job
BEGIN
dbms_scheduler.create_job(
job_name => 'my_job1',
program_name=> 'my_pro1',
schedule_name => 'my_sch1',
comments=> 'insert sysdate into table',
enabled=> TRUE);
END;
/
Job chain -很多job 链接在一起
Resource manager --资源管理器
多个系统使用同一个数据库
作用对象 资源使用者组
资源计划
Using advanced scheduler features
Thresholds
Memory manager
Amm-->asmm-->手动管理方式
--内存管理
Amm (automaitc memory managerment) --自动管理所有内存
Show parameter memory
Memory_max_target --最大限制,不给就以下面为准
Memory_target --以这个参数为准(启用了amm)(60-80%)
Asmm (automatic shared memory management) --自动管理sga内存
Memory_target = 0
Show parameter sga --开启asmm
Sga_max_size
Sga_target ---设置memory的80%
Log buffer --修改后要重启实例(一般不改)
Pga_aggregate_target --pga参数(没什么用)
-------查看内存管理
先看memory (amm)
再看sga (asmm)
----如果memory、sga 都设置了值 sga设置的值为最小值
Amm-->asmm-->手动管理方式
重置内存参数,修改spfile
Huge page --开大页(2M)
设置
关闭amm(memory)
Sga_max_size
1、算页 Sga_max_size/2 + 100
2、打开限制
More /etc/security/limits.conf
Oracle soft memlock -1
Oracle hard memlock -1
3、设置参数
More /etc/sysctl.conf
vm.nr_hugepages = ‘算出的页大小’
Sysctl -p (配置大页 很慢) --建议重启主机
查看大页
grep -i huge /proc/meminfo
Ipcs
Rac: off transparent hugepage --rac 关闭透明大页
作业:开启huge page
Show parameter target
--关闭amm
Alter system set memory_target=0;
--计算大页个数
Sga_max_size/2 + 100 = 260
--打开限制,添加参数
# vi /etc/security/limits.conf
oracle soft memlock -1
oracle hard memlock -1
--设置参数,添加配置
# tail -n 1 /etc/sysctl.conf
vm.nr_hugepages = 260 [sysctl -a --查找参数]
--reboot host and review
Install grid
优点:
1、进程重启
2、资源放asm上
Oracle restart
Install db software
Dbca
Install grid software
Register to cluster software
1、建目录
mkdir -p /u01/app/grid/12.1 /u01/app/grid_base
2、解压
3、Root
xhost +
Echo $DISPLAY
Su - oracle
Export DISPLAY=:0
4、安装
执行root命令时注意。
5、环境变量
6、注册
加数据库、加监听(先关监听)
srvctl add database -db prod -oraclehome /u01/app/oracle/product/12.1.0/dbhome_1
Lsnrctl stop
srvctl add listener
7、集群软件管理数据库
srvctl start database -d orcl --启动数据库
srvctl status database -d orcl
crsctl stat res -t
select open_mode,status from v$database,v$instance;
Asm
Raw(udev)
http://www.xuwang.online/index.php/archives/124/
Asmlib
asmca
冗余级别
High (3份)
Normal (2份)
Externam(none) (1份)
Rebalance(power) --加磁盘到组 oracle会自动平衡数据
删除盘 自动迁移数据到其他盘
Failgroup 失败组(不同磁盘分到同一个组)
Grid 实例
Sqlplus / as sysasm
V$asm_disk \ V$asm_diskgroup
Show parameter asm_dis; --默认查找磁盘路径
--统计信息收集(系统定时晚上收集)(即字典对表信息的显示 如表多少行)
--手动收集统计信息(查询慢可以进行统计信息收集)
http://www.xuwang.online/index.php/archives/146/
作业:手动收集统计信息
select * from DBA_AUTOTASK_CLIENT;
select owner,table_name,num_rows from dba_tables where
table_name='REGIONS';
select count(*) from hr.regions;
insert into hr.regions values(13,'1');
commit;
--查看统计信息没有变
select owner,table_name,num_rows from dba_tables where
table_name='REGIONS';
--收集表统计信息
exec dbms_stats.gather_table_stats(ownname => 'HR',tabname => 'EMPLOYEES',estimate_percent => 10,method_opt=> 'for all indexed columns') ;
--再次查看统计信息变化了
select owner,table_name,num_rows from dba_tables where
table_name='REGIONS';
Awr
Mmon-->60minutes -->awr
--查看快照
Select * from Dba_hist_snapshot
--拍摄快照(默认快照8天)
--基线(一段时间的快照集合)
生成awr 报告
--配置起始快照位置
@?/rdbms/admin/awrrpt.sql
Addm
--monitor
--识别和修复不可用的对象
Cdb pdb
http://www.xuwang.online/index.php/archives/46/