Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chenzx/df94ec74d5a0093dda53 to your computer and use it in GitHub Desktop.
Save chenzx/df94ec74d5a0093dda53 to your computer and use it in GitHub Desktop.
深入理解Oracle 12c数据库管理
深入理解Oracle 12c数据库管理
跳转至: 导航、 搜索
目录
1 安装Oracle
2 实现数据库
3 配置高效环境
4 表空间和数据文件
5 管理控制文件、联机重做日志和归档
6 用户账号和基本安全
7 表和约束
8 索引
9 视图、同义词和序列
10 数据字典的基本结构
11 大对象
12 分区:分而治之
13 数据泵
14 外部表
15 物化视图
16 用户管理的备份与恢复
17 配置RMAN
18 RMAN备份和报告
19 RMAN恢复操作
20 Oracle安全备份
21 作业自动化
22 数据库疑难答疑
23 可插拔数据库
安装Oracle
OFA标准:
清单目录
基础目录(ORACLE_BASE)
主目录(ORACLE_HOME)
网络文件目录(TNS_ADMIN)
自动诊断库(ADR_HOME)
p5 基础版可免费下载,任何后续补丁需要许可证?
OS组:oinstall dba oper asmdba asmadmin backupdba dgdba kmdba
$ cat 10gr2_db_so1.cpio.gz | gunzip | cpio -idvm
创建oraInst.loc文件
配置应答文件
$ find . -name "*.rsp"
$ ./runInstaller -ignoreSysPrereqs -force -silent -responseFile .../inst.rsp
使用已安装程序的副本安装
附加主目录
p16 升级Oracle软件和升级数据库不是同一个概念
p17 不允许以覆盖原有程序的方式安装新软件?
安装临时补丁(opatch)?
使用图形界面的远程安装
xhost?
实现数据库
设置OS变量:oratab/oraenv
初始化文件:spfile/init.ora
创建必需的目录(?)
创建数据库
$ sqlplus / as sysdba
SQL> startup nomount
如果CREATE DATABASE出现错误,可检查警告日志
配置listener(使得可以远程连接)
listener.ora --> lsnrctl start
netca ?
创建密码文件(可选)
OS认证(有OS权限的,可以输入错误密码进入!)
SQL> shutdown immediate;
使用dbca(图形界面)创建数据库
了解Oracle体系结构
配置高效环境
PS1='[\h:\u:${ORACLE_SID}]$ '
SQL> SET SQLPROMPT '&_USER.@&_CONNECT_IDENTIFIER.> '
alias lsd='ls -altr | grep ^d'
*编写shell函数
$ history 5 && !276
!!
开发标准脚本:login.sql top.sql lock.sql users.sql
表空间和数据文件
5个表空间:SYSTEM SYSAUX UNDO TEMP USERS
控制重做日志
create tablespace xxx datafile '/.../data01.dbf' size 100m .... nologging;
ORA-01578错误(损坏的数据块)
更改为只读
drop tablespace xxx including contents and datafiles cascade constraints;
OMF
create bigfile tablespace xxx ...(无法扩展尺寸)
create tablespace xxx .... DEFAULT ROW STORE COMPRESS ADVANCED;
alter tablespace users offline;
12c: alter tablespace xxx move datafile <path1> to <path2>;
管理控制文件、联机重做日志和归档
SQL> show parameter control_files;
REDO日志
‘归档日志模式’
丢失了redo情况下保护数据:Oracle DataGuard,MOS 239100.1
日志组
FRA?
用户账号和基本安全
SYS vs SYSTEM
default_pwd$
密码安全性设置:FAILED_LOGIN_ATTEMPTS PASSWD_LIFE_TIME ...(profile表)
resource_limit
表和约束
DDL语句自动提交,DML则需要明确COMMIT/ROLLBACK
表类型
数据类型
varchar2(30 char):注意,默认按byte,最长4000B?
INTERVAL?
RAW(2000B => 32767B)
p7 为所有表创建数值代理主键(通过sequence生成)?
11g 虚拟列:col_name generated always AS (case when .. then .... end)
12c 隐藏列:invisible 确保添加列不会破坏现存应用的代码
11g 只读表:read only
11gR2 延迟段
12c 插入时自动增长的列:... number generated as identity (start with 5 increment by 2)
其实相当于是一个‘语法糖’
注意:序列值不会回滚(溢出了怎么办?)
并行度:parallel N
12c 表压缩*
NOLOGGING可以大幅度减少下列操作生成的redo日志:
SQL*Loader直接路径加载
直接路径的INSERT /*+ append */
CREATE TABLE AS SELECT(CTAS)
ALTER TABLE MOVE
创建和重建索引
修改表
删除列之前,建议先重命名它(DBA的良好习惯!)
直接drop (col) ==> 先set unused (col)再drop unused columns;
显示表的DDL
exp/imp
数据泵
DBMS_METADATA
恢复已删除的表(回收站?)
SQL> show recyclebin;
SQL> flashback table xxx to before drop;
删除表中数据
SQL> truncate table xxx reuse storage;
查看和调整高水位线标记
Autotrace/DBMS_SPACE
创建临时表
... on commit delete rows;
创建索引组织表(IOT)
管理约束*(见鬼,Oracle的控制粒度也太细了)
索引
&变量:define index_size=100m --> &&index_size
index_stats视图:analyze index cust_idx1 validate structure;
多重索引
create index cust_idx2 on cust(first_name, last_name);
create bitmap index cust_bmx1 on cust(first_name, last_name) invisible;
基于函数的索引:... on cust(func(col1))
唯一索引:create unique index ...
位图索引
位图连接索引
...
维护索引
alter index xxx unusable/rebuild/monitoring usage
外键列索引
p216 如果外键列上没有索引,当向子表插入记录或删除记录时,父表所有行都会被锁定
视图、同义词和序列
create or replace view ... with check option;
create or replace优点:如果是先删除再重建,则需要重新赋予角色视图权限
... with read only;
可更新的连接视图
被更新的列必须属于‘键保留表’
instead of 触发器*
rename xxx to yyy
drop view
任何依赖该视图的视图、物化视图、同义词(create synonym)都会失效,相关权限也会被删除
序列伪列:nextval/curval
数据字典的基本结构
静态视图:user/all/dba/cdb
动态视图:v$ gv$
x$基础表
大对象
LOB定位器 -> LOB索引 -> LOB块
BFILE列:存储路径和文件名
区分BasicFiles和SecureFiles
... store as basicfile/securefile (tablespace xxx);
分区表LOB
可通过range、list、hash子句
SecureFiles高级功能
压缩:... (compress high) ...
去重:... (deduplicate) ...
加密:... (encrypt) ... 透明加密技术(TDE)?
加载LOB
先创建目录对象:create or replace directory load_db as '/...';
分区:分而治之
11g 根据父表分区:partition by reference
虚拟列分区(其实可以视为函数/hash分区吧)
应用控制的分区(其实就是应用自定义hash函数)
insert into tbl partition(p1) values(...);
?通过现存的表交换分区
~stl::swap
索引分区
本地索引:局部前缀 vs 局部非前缀
全局索引:使用与表不同的分区策略*
12c 部分索引:indexing on/off
分区修剪:查询使用了分区键
数据泵
expdp/impdp/DBMS_DATADUMP
一致性导出:
select current_scn from v$database;
expdp mv_maint/foo directory=dp_dir full=y flashback_scn=5715397 dumpfile=full.dmp
交互模式(Ctrl+C)
监控作业*
外部表
直接读取CSV:... organization external(type oracle_loader access parameters(
records delimited by newline
fields terminated by '|'
物化视图
用户管理的备份与恢复
配置RMAN
RMAN备份和报告
RMAN> backup as backupset incremental level=0 database;
p489 0级备份用于恢复数据文件,1级用于恢复已提交的事务
块修改跟踪
SQL> alter system set db_create_file_dest='/u01/012c/bct' scope=both;
SQL> alter database enable block change tracking;
RMAN恢复操作
p519 怎么在软件测试时模拟物理坏块?
不完全恢复
restore databse until
flashback database
Oracle安全备份
OSB磁带备份?
作业自动化
数据库疑难答疑
可插拔数据库
Multitenant:多租户容器数据库(CDB)
DBCA
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment