1:database
a:physical structure
1:controlfile控制文件
select * from v$controlfile;
11g 以三个11g二个互为镜像文件
坏了数据库就打不开了..
IO一个块 16k一个文件2MB不会太大?10MB
数据库名
数据文件位置
很多的参数.....
2:datafile 数据文件
select file_name,file_id from dba_data_files;
数据文件都是由8k块组成
show parameter db_block_size;
3:redo logfile
select * from v$logfile;
SELECT * from v$log;//当前日志状态
b:logical structure
tablespace
---------------------------------
v$controlfile 视图[动态内存]
dba_data_files 视图[静态表]
2:instance
1:sga(system global area) 内存区域
select * from v$sga_dynamic_components;
select * from v$sga;
select component from v$sga_dynamic_components;
sga由如下6个部分组成
1:data buffer cache
数据以8K为单位..-->读取到data buffer cache
就是一块内存区..
2:shared pool
a:library cache 执行sql语句
parse 解析[编译]-->cache
select .. 有cache 不用再次解析
如果足够大,保存很多cache
如果sql重复使用机率很小没用..
b:dictionary cache 系统表放在内容..[数据字典]
旧版本可以设置,新版本不能动..
3:large pool
大块,大IO
4:java pool
5:streams pool
数据同步
1:shareplx
2:glodengate
6:log buffered
通过视图查看log buffer
show parameter log_buffer;
show parameter share
shared_pool_size big integer 128M
在旧系统中需要手工修改
alter system set shared_pool_size=80m;
select component,min_size from v$sga_dynamic_components;
alter system set sga_target=0;//手工管理6区大小
alter system set sga_target=300m;
//-----------------------------------------
2:background process
select paddr,name from v$bgprocess;
select paddr,name from v$bgprocess where paddr<>‘00‘;
DBWD[DB WRITER PROCESS 0] 数据库写进程
修改
表--读取-->data buffer->修改-->DBWD->表中
DBWD 最多20个-->
SQL> select paddr,name from v$bgprocess where name like ‘%DBW%‘;
36 个进程
如果地址00没有启动
启动几个进程有参数限制
show parameter db_writer_processes
db_writer_processes integer 1
这个参数是一个静态参数不能直接修改
alter system set db_writer_processes=2;
//------------------------------------
LGWR Redo etc..
修改数据
表-->读取-->data buffer-->修改-->LOG BUFFER[512byte]-->LGWR(优先)-->log file->data buffer-->dbwd-->表中
//-----------------------------------
SMON
oracle 启动时SMON协调
从日志文件读取没有写到数据文件中的数据
//----------------------------
PMON process clearnup
清理杀死的进程所占资源...
查看所有oracle的进程
select addr,pname from v$process;
//-----------------------------------------
oracle 启动阶段
shutdown
nomount
mount
open
查看实例状态
select status from v$instance;
open/用户可以连接使用
shutdown immediate;
注册表可以设置
启动服务不启动实例
ORA_TEST1_AUTOSTART=TRUE
服务启动实例也启动...
//-----------------------------------
startup nomount;//
oracle 读取文件spfile;
show parameter spfile;
spfileTEST1.ora
spfile:server parameter file;
spfileSID.ora 文件格式
select status from v$instance;
startup mount;//
//----------------------------------------
案例:删除spfile...inittest1.ora 文件
SQL> startup nomount
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file ‘D:\DEV\ORACLE\PRODUCT\11.2.0\DBHOME_1\DATABASE\INITTEST1.ORA‘
oracle 中spfile和inittest1.ora 可以相互转换
仃止实例才可以做这样的操作
shutdown immediate
//-----------------------------------
create pfile from spfile;
create spfile from pfile;
spfiletest.ora oracle9.2开始使用(优先高)
必须放在服务器上..
二进制文件可以动态修改;;
INITtest1.ORA 文本文件修改[客户端]
需重启服务器
启动服务器到mount状态
使用控制文件
alter database mount;
show parameter control_files;
查看一下状态
select status from v$instance;
alter database open;
到这个状态才真正用到数据文件日志文件
//----------------------------------
示例删除控制文件
0: shutdown immediate
1:D:\DEV\ORACLEDATA\TEST\CONTROL01.CTL,
D:\DEV\ORACLE\FLASH_RECOVERY_AREA\TEST\CONTROL02.CTL
2:startup mount
显示乱码可以通过
注册表解决
NLS_LANG
american_CHINA.ZHS16GBK
系统出错需要找日志文件 文件最大2GB
oracle\diag\rdbms\test\test1\alert_test1.log
//----------------------------------------
alter database close;
没有session
//----------------------------------------
修改参数
1:实例级别
alter system(instnace)
2:session级别
alter session
3:database 级别
alter database
instance database 关系
1:startup nomount 启动实例
2:mount
3:open
一个数据库至少需要一个实例
多个实例为一个数据库服务
[RAC real application cluster]
多台oracle服务器 对应一台数据文件服务器
select * from v$instnace;
select * from v$database;
select * from gv$instance;//rac
show parameter shared;
实例的参数可以查询
select name,value,type from v$system_parameter;
session级别的参数
select name,value,issys_modifiable from v$parameter
immediate
false 改完不能立即生效..
实例级别
alter system set shared_pool_size=100m;
//---------------------------
示例:修改静态属性
alter system set processes=200; //静态参数不能直接修改
alter system set processes=200 scope=spfile;//可以
立即查看spfile文件
show parameter process;//还是原来地的值
shutdown immediate
startup
show parameter process;//还是原来地的值
//-------------------------------------------
alter system set shared_pool_size=100m;
alter system set shared_pool_size=120m scope=memory//重启动失效...
alter system set shared_pool_size=110m scope=both//spfile内存一块修改
alter system set shared_pool_size=110m 不加scope默认both
show parameter shared_pool_size; 112 //4MB颗粒
//------------------------------------------
示例
修改session级别的变量
show parameter nls_date_format
alter session set nls_date_format=‘yyyy/mm/dd hh24:mi:ss‘;
SQL> select sysdate from dual;
SYSDATE
-------------------
2014/03/06 22:34:33
//-------------------------------
创建pfile文件
1:create pfile=‘d:\init20140306.ora‘ from spfile;
2:shotdown immediate
3:delete a controfile
4:select * from v$controlfile
5:修改参数
startup nomount
6:show parameter control_files;
7:alter system set control_files=‘‘ scope=spfile;
8:alter database mount
9:alter database open
10:show parameter control_files;
//-------------------------------------------------------
Logical Structure
tablespace
segments
extent
blocks
select * from dba_tablespaces;
永久表空间
undo表空间
临时表空间
select * from dba_data_files;
select * from dba_temp_files;//临时表空间对应临时文件
//-------------------------------
创表空间
create tablespace tom datafile ‘D:\DEV\ORACLEDATA\TEST\tom01.DBF‘ size 5m;
select * from dba_data_files;查看文件大小
create table tt(id int)tablespace tom;
//------------------------------
表空间包含哪些对象
select * from dba_segments where tablespace_name=‘TOM‘;
metadata 元数据
data 数据
描述数据的数据..[元数据]
id number(39)
name varchar(20) 描述数据..
insert into tt values(1,2);//数据..
元数据永远放在system表空间中
表的元数据信息
select table_name,tablespace_name from dba_tables where table_name=‘T1‘;
列的元数据认息
select table_name,column_name,column_id from dba_tab_cols where table_name=‘T1‘;
数据段
select segment_name from dba_segments where segment_name=‘T1‘;
数据段中有多少个区
select * from dba_extents where segment_name=‘T1‘;
oracle 有二个id一个指向元数据,一个指向数据
select object_id,data_object_id,object_name from dba_objects where object_name=‘T1‘;
多添加记录。。
insert into t1 select object_id,object_id,object_name from dba_objects;
查询数据字典14336块..
SQL> select segment_name,blocks from dba_segments where segment_name =‘T1‘;
SEGMENT_NAME BLOCKS
--------------------------------------------------------------------------------- ----------
T1 8
T1 14336
//------------------------------------
修必表所在的表空间
alter table t1 move tablespace jerry;
//向jerry表空间添加表
create table t2(id int)tablespace jerry;
SQL> select segment_name,tablespace_name from dba_segments where tablespace_name=‘JERRY‘;
SEGMENT_NAME TABLESPACE_NAME
--------------------------------------------------------------------------------- ---------------
T1 JERRY
T2 JERRY
//----------------------------------------------------
向表空间添加数据文件
alter tablespace jerry add datafile ‘D:\DEV\ORACLEDATA\TEST\JERRY02.DBF‘ size 50m;
//-----------------------------------------------------
数据文件不够用解决问题
1:改变数据文件的大小
select * from dba_data_files;
alter database datafile 10 resize 20m;
一个数据文件最大32g
2:向表空间里添加文件
alter tablespace jerry add datafile ‘D:\DEV\ORACLEDATA\TEST\JERRY02.DBF‘ size 50m;
3:让数据文件自动扩展
alter database datafile 10 autoextend on ;//默认一次扩展1block
alter database datafile 10 autoextend on next 1m;
alter database datafile 10 autoextend on next 1m maxsize 200m;
//-----------------------------------------------
create tablespace tbs datafile ‘D:\DEV\ORACLEDATA\TEST\tbs01.DBF‘ size 5m autoextend on next 1m maxsize unlimited autoallocate;
//每一个数据段128k
create tablespace tbs datafile ‘D:\DEV\ORACLEDATA\TEST\tbs01.DBF‘ size 5m autoextend on next 1m maxsize unlimited uniform size 128k;
3:session