oracle查看是否使用asm存储,ORACLE 管理 存储与ASM

本文详细介绍了Oracle数据库的存储结构,包括表空间、数据文件、大文件表空间、段空间管理、extent分配以及回收。讨论了DMT和LMT的段空间管理模式,以及手工和自动分配的extent管理方式。还涵盖了如何查看和管理表空间、段空间的使用情况,以及回收空闲空间的方法。此外,提到了裸设备和ASM在数据库管理中的应用及其优势。
摘要由CSDN通过智能技术生成

存储结构

tablespace

表空间是逻辑结构,数据要存储在数据文件中,数据文件是容器;

一个表空间至少拥有一个数据文件最多1023个;

大文件表空间只能又有一个数据文件;

表空间的空间管理模式有两种DMT & LMT

DMT:字典管理模式

LMT:本地管理模式

segment空间管理模式:(table)段的空闲空间如何管理

占用存储空间的对象!段在占用空间时不能跨越表空间!

段可以使用表空间中的任何一个数据文件!

MANUAL

AUTO

extent的管理:

1.创建段时会分配初始范围(extent)

create table scott.t as select * from scott.emp where 1=0;

select segment_name,FILE_ID,block_id,blocks,bytes

from dba_extents

where segment_name='T4'

and owner='SCOTT';

select tablespace_name,file_name

from dba_data_files where file_id=4;

2.数据增长:

insert into scott.t select * from scott.emp;

insert into scott.t select * from scott.t;

select dbms_rowid.ROWID_BLOCK_NUMBER(rowid),count(*)

from scott.t

group by dbms_rowid.ROWID_BLOCK_NUMBER(rowid)

order by 1;

create table scott.t1 (a number(1)) PCTFREE 0;

begin

for i in 1..1000 loop

insert into scott.t1 values (null);

end loop;

commit;

end;

/

select dbms_rowid.ROWID_BLOCK_NUMBER(rowid),count(*)

from scott.t1

group by dbms_rowid.ROWID_BLOCK_NUMBER(rowid)

order by 1;

3.手工分配:

alter table scott.t allocate extent (size 64k datafile '/u01/app/oracle/oradata/test/users02.dbf');

extent空间的回收:

1.手工回收:

alter table scott.t deallocate unused;

只能回收崭新的范围!

2.碎片整理(oracle 10g):(HWM --> high water mark 段级别所使用过的最后一个块)

delete scott.t;

commit;

alter table scott.t enable row movement;

alter table scott.t shrink space;

3.截断表:

truncate table scott.t;

保留初始范围和结构!

4.删除表:

drop table scott.t purge;

释放初始范围!

extent的分配类型:(在创建表空间时指定)

系统分配

统一分配(制式管理)

select tablespace_name,ALLOCATION_TYPE

from dba_tablespaces;

SYSTEM

UNIFORM

SYSTEM(自动分配):使用后台算法分配范围的尺寸!范围的尺寸阶梯增长!

前16个范围的尺寸是 8*8k 64k

接下来的63个范围的尺寸是 128*8k 1M

再接下来的120个范围的尺寸是 1024*8k 8M

再接下来的所有范围的尺寸是 8192*8k 64M

表中数据量越大范围的尺寸也越大!

范围的尺寸也越大表所占用的空间中碎片越少!

UNIFORM(制式分配):一成不变的分配模式!

create tablespace data01 datafile

'/u01/app/oracle/oradata/test/data01.dbf' size 100m

uniform size 10m;

select

TABLESPACE_NAME,

INITIAL_EXTENT,

NEXT_EXTENT,

ALLOCATION_TYPE

from dba_tablespaces;

create table scott.t2 tablespace data01

as select * from scott.emp where 1=0;

段空间的管理类型:(在创建表空间时指定)

select tablespace_name,segment_space_management

from dba_tablespaces;

段空间的管理类型指的是段级别现有空闲空间的管理模式!

MANUAL:使用空闲列表(freelist)管理空闲空间

freelist:是指向表中第一个空闲块的地址,存在于segment header!

空闲块:可以用来作insert操作的块!

AUTO:使用映射位图块管理空闲空间(以来于表空间的本地管理模式)

alter system dump datafile 4 block min 185 block max 192;

生成用户跟踪文件!放在参数unser_dump_dest所指定的目录下,

名字叫做_ora_.trc

show parameter unser_dump_dest

= $ORACEL_SID

:

select spid from v$session s,v$process p

where p.addr=s.paddr

and s.sid=(select sid from v$mystat where rownum=1);

7728

extent:

是分配空间的单位!

set long 2000

select dbms_metadata.get_ddl('TABLE','T','SCOTT')

from dual;

CREATE TABLE "SCOTT"."T"

( "EMPNO" NUMBER(4,0),

"ENAME" VARCHAR2(10),

"JOB" VARCHAR2(9),

"MGR" NUMBER(4,0),

"HIREDATE" DATE,

"SAL" NUMBER(7,2),

"COMM" NUMBER(7,2),

"DEPTNO" NUMBER(2,0)

) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING

STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

TABLESPACE "USERS" ENABLE ROW MOVEMENT;

create table scott.t4 (id int) storage (initial 1m);

oracle block的管理:

show parameter db_block_size --标准块大小

使用打包因子(只能在段级别指定)管理块空间的使用:

PCTFREE 10 :空闲用来应付块内行自身的增长!减少行的迁移!

行的链接:行的数据量太大,任何一个8k块都放不下!

PCTUSED 40:

freelist中存在的都是什么样的块?

练习

如何查看表空间空间的存储管理模式?有什么优缺点?

如何查看段空间的存储管理模式?

创建段空间的存储管理模式为手工的表空间

创建段空间的存储管理模式为自动的表空间

如何查看段空间占用情况?

如何查看范围空间存储管理模式?

创建范围的分配类型为system的表空间

创建范围的分配类型为uniform的表空间

在范围的分配类型为system的表空间中创建表,插入大量数据后查看段空间占用情况

在范围的分配类型为uniform的表空间中创建表,插入大量数据后查看段空间占用情况

如何回收段的空闲空间?

如何测试块的数据存储能力?

裸设备数据库的管理

准备裸设备列表文件

--vi /home/oracle/dbca_raw_config.txt--

spfile=/dev/raw/raw1

control1=/dev/raw/raw2

control2=/dev/raw/raw3

control3=/dev/raw/raw4

redo1_1=/dev/raw/raw5

redo1_2=/dev/raw/raw6

redo1_3=/dev/raw/raw7

system=/dev/raw/raw8

sysaux=/dev/raw/raw9

undotbs1=/dev/raw/raw10

temp=/dev/raw/raw11

users=/dev/raw/raw12

example=/dev/raw/raw13

准备设备:

dd if=/dev/zero of=/u01/spfile bs=1M count=10

dd if=/dev/zero of=/u01/ctl1 bs=1M count=10

dd if=/dev/zero of=/u01/ctl2 bs=1M count=10

dd if=/dev/zero of=/u01/ctl3 bs=1M count=10

dd if=/dev/zero of=/u01/redo1 bs=1M count=51

dd if=/dev/zero of=/u01/redo2 bs=1M count=51

dd if=/dev/zero of=/u01/redo3 bs=1M count=51

dd if=/dev/zero of=/u01/system bs=1M count=550

dd if=/dev/zero of=/u01/sysaux bs=1M count=300

dd if=/dev/zero of=/u01/undo bs=1M count=250

dd if=/dev/zero of=/u01/temp bs=1M count=50

dd if=/dev/zero of=/u01/users bs=1M count=50

dd if=/dev/zero of=/u01/example bs=1M count=150

增加循环设备:

--------------------------------------------------------------------------------------------------

方法1:

[root@ ~]# vi /etc/modprobe.conf

options loop max_loop=25

[root@ ~]# /sbin/modprobe loop

[root@ ~]# /sbin/rmmod loop

[root@ ~]# modprobe -v loop

[root@ ~]# ll /dev/loop*

方法2:

for i in $(find /dev/ -type b -name "loop*");do chown oracle:oinstall $i;done

for i in {0..13};do mknod -m 640 /dev/loop$i b 7 $i;done

chown root:disk /dev/loop*

--------------------------------------------------------------------------------------------------

losetup /dev/loop1 /u01/spfile

losetup /dev/loop2 /u01/ctl1

losetup /dev/loop3 /u01/ctl2

losetup /dev/loop4 /u01/ctl3

losetup /dev/loop5 /u01/redo1

losetup /dev/loop6 /u01/redo2

losetup /dev/loop7 /u01/redo3

losetup /dev/loop8 /u01/system

losetup /dev/loop9 /u01/sysaux

losetup /dev/loop10 /u01/undo

losetup /dev/loop11 /u01/temp

losetup /dev/loop12 /u01/users

losetup /dev/loop13 /u01/example

raw /dev/raw/raw1 /dev/loop1

raw /dev/raw/raw2 /dev/loop2

raw /dev/raw/raw3 /dev/loop3

raw /dev/raw/raw4 /dev/loop4

raw /dev/raw/raw5 /dev/loop5

raw /dev/raw/raw6 /dev/loop6

raw /dev/raw/raw7 /dev/loop7

raw /dev/raw/raw8 /dev/loop8

raw /dev/raw/raw9 /dev/loop9

raw /dev/raw/raw10 /dev/loop10

raw /dev/raw/raw11 /dev/loop11

raw /dev/raw/raw12 /dev/loop12

raw /dev/raw/raw13 /dev/loop13

chown oracle.oinstall /dev/raw/raw*

su - oracle

dbca

------------------------------------------------------------------------------------------------------------------

安装iscsi服务端rpm包:

yum install scsi-target-utils

安装iscsi客户端rpm包:

yum install iscsi-initiator-utils

校验iscsi所需服务启动否:

service iscsi status

service iscsid status

service tgtd status

配置脚本:

vi /etc/tgt/targets.conf

----------------------------------------

backing-store /dev/sda10

initiator-address 10.1.1.22

----------------------------------------

vi /etc/udev/scripts/iscsidev.sh

----------------------------------------

#!/bin/bash

BUS=${1}

HOST=${BUS%%:*}

[ -e /sys/class/iscsi_host ] || exit 1

file="/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*/targetname"

target_name=$(cat ${file})

if [ -z "${target_name}" ] ; then

exit 1

fi

echo "${target_name##*:}"

----------------------------------------

chmod +x /etc/udev/scripts/iscsidev.sh

vi /etc/udev/rules.d/55-openiscsi.rules

-----------------------------------------------

KERNEL=="sd*",BUS=="scsi",PROGRAM="/etc/udev/scripts/iscsidev.sh %b",SYMLINK+="iscsi/%c"

-----------------------------------------------

在服务端发布设备:

service tgtd restart

tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL

service iscsi start

扫描iscsi服务器:

iscsiadm -m discovery -t sendtargets -p 10.1.1.xx -l

(关闭扫描错误的设备

iscsiadm -m session -u

iscsiadm -m discovery -t sendtargets -p 10.1.1.xx -l)

对iscsi共享盘分区:

dd if=/dev/zero of=/u01/spfile bs=1M count=10

dd if=/dev/zero of=/u01/ctl1 bs=1M count=10

dd if=/dev/zero of=/u01/ctl2 bs=1M count=10

dd if=/dev/zero of=/u01/ctl3 bs=1M count=10

dd if=/dev/zero of=/u01/redo1 bs=1M count=101

dd if=/dev/zero of=/u01/redo2 bs=1M count=101

dd if=/dev/zero of=/u01/redo3 bs=1M count=101

dd if=/dev/zero of=/u01/system bs=1M count=550

dd if=/dev/zero of=/u01/sysaux bs=1M count=300

dd if=/dev/zero of=/u01/undo bs=1M count=50

dd if=/dev/zero of=/u01/temp bs=1M count=50

dd if=/dev/zero of=/u01/users bs=1M count=50

dd if=/dev/zero of=/u01/example bs=1M count=150

将新建的分区加入rawdevice:

vi /etc/udev/rules.d/60-raw.rules

------------------------------------------------

ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"

ACTION=="add", KERNEL=="sdb2", RUN+="/bin/raw /dev/raw/raw2 %N"

ACTION=="add", KERNEL=="sdb3", RUN+="/bin/raw /dev/raw/raw3 %N"

ACTION=="add", KERNEL=="sdb5", RUN+="/bin/raw /dev/raw/raw5 %N"

ACTION=="add", KERNEL=="sdb6", RUN+="/bin/raw /dev/raw/raw6 %N"

ACTION=="add", KERNEL=="sdb7", RUN+="/bin/raw /dev/raw/raw7 %N"

ACTION=="add", KERNEL=="sdb8", RUN+="/bin/raw /dev/raw/raw8 %N"

ACTION=="add", KERNEL=="sdb9", RUN+="/bin/raw /dev/raw/raw9 %N"

ACTION=="add", KERNEL=="sdb10", RUN+="/bin/raw /dev/raw/raw10 %N"

ACTION=="add", KERNEL=="sdb11", RUN+="/bin/raw /dev/raw/raw11 %N"

ACTION=="add", KERNEL=="sdb12", RUN+="/bin/raw /dev/raw/raw12 %N"

ACTION=="add", KERNEL=="sdb13", RUN+="/bin/raw /dev/raw/raw13 %N"

ACTION=="add", KERNEL=="sdb14", RUN+="/bin/raw /dev/raw/raw14 %N"

KERNEL=="raw[1-3]", MODE="0660", GROUP="oinstall", OWNER="oracle"

KERNEL=="raw[5-9]", MODE="0660", GROUP="oinstall", OWNER="oracle"

KERNEL=="raw10", MODE="0660", GROUP="oinstall", OWNER="oracle"

KERNEL=="raw11", MODE="0660", GROUP="oinstall", OWNER="oracle"

KERNEL=="raw12", MODE="0660", GROUP="oinstall", OWNER="oracle"

KERNEL=="raw13", MODE="0660", GROUP="oinstall", OWNER="oracle"

KERNEL=="raw14", MODE="0660", GROUP="oinstall", OWNER="oracle"

启动udev:

start_udev

为dbca准备裸设备配置文件:

--vi /home/oracle/dbca_raw_config.txt--

spfile=/dev/raw/raw1

control1=/dev/raw/raw2

control2=/dev/raw/raw3

control3=/dev/raw/raw5

redo1_1=/dev/raw/raw6

redo1_2=/dev/raw/raw7

redo1_3=/dev/raw/raw8

system=/dev/raw/raw9

sysaux=/dev/raw/raw10

undotbs1=/dev/raw/raw11

temp=/dev/raw/raw12

users=/dev/raw/raw13

example=/dev/raw/raw14

练习

将数据库创建在裸设备的好处是什么?

ASM数据库的管理

export ORACLE_SID=+ASM

sqlplus / as sysdba

查看磁盘组信息:

col name for a10

SELECT group_number,name,type,state,total_mb,free_mb,offline_disks FROM V$ASM_diskgroup;

GROUP_NUMBER NAME TYPE STATE TOTAL_MB FREE_MB OFFLINE_DISKS

------------ ---------- ------ ----------- ---------- ---------- -------------

1 DG1 NORMAL MOUNTED 8192 5832 0

2 DG2 EXTERN MOUNTED 2048 1962 0

查看ASM磁盘的信息:

col group# for 99

col disk# for 99

col name for a5

col path for a11

col LABEL for a7

col FAILGROUP for a10

select GROUP_NUMBER group#,DISK_NUMBER disk#,LABEL,STATE,FAILGROUP,name,path,TOTAL_MB,FREE_MB from v$asm_disk;

GROUP# DISK# LABEL STATE FAILGROUP NAME PATH TOTAL_MB FREE_MB

------ ----- ------- -------- ---------- --------------- -------------------- ---------- ----------

2 0 NORMAL DG2_0000 DG2_0000 /dev/raw/raw21 2048 1962

1 3 NORMAL FAIL2 DISK4 /dev/raw/raw20 2048 1473

1 2 NORMAL FAIL1 DISK3 /dev/raw/raw19 2048 1477

1 0 NORMAL FAIL2 DISK2 /dev/raw/raw16 2048 1443

1 1 NORMAL FAIL1 DISK1 /dev/raw/raw15 2048 1439

增加磁盘组:

CREATE DISKGROUP dgd NORMAL REDUNDANCY

FAILGROUP failgroup1 DISK

'/dev/raw/raw1' NAME diskA1 SIZE 120G FORCE,

'/dev/raw/raw2',

'/dev/raw/raw3'

FAILGROUP failgroup2 DISK

'/dev/raw/raw4',

'/dev/raw/raw5',

'/dev/raw/raw6';

增加fail组:

ALTER DISKGROUP dg1 ADD FAILGROUP fail3 DISK '/dev/raw/raw22' name disk5 REBALANCE POWER 11;

添加ASM磁盘:

ALTER DISKGROUP dg1 add failgroup fail1 DISK '/dev/raw/raw19' name disk3;

删除ASM磁盘:

ALTER DISKGROUP dg1 DROP DISK disk4;

卸载磁盘组:要先关闭rdbms实例

ALTER DISKGROUP dg2 DISMOUNT;

检测磁盘组或磁盘:

ALTER DISKGROUP dg1 CHECK ALL;

alter diskgroup dga check disk vol19;

控制均衡容错组数据的速度:

ALTER DISKGROUP dg2 REBALANCE POWER 11;

平衡速度控制参数:

asm_power_limit = 1~11

检查数据库平衡速度:

SELECT group_number, operation, state, est_work, sofar, est_rate, est_minutes FROM v$asm_operation;

删除磁盘组:

drop diskgroup group1 including contents;

取消删除:

ALTER DISKGROUP group1 UNDROP DISKS;

添加目录:

alter diskgroup dg1 add directory '+dg1/asmdb/test';

create tablespace test datafile '+dg1/asmdb/test/test01.dbf' size 10m;

重命名目录:表空间不受任何影响

alter diskgroup dg1 rename directory '+dg1/asmdb/test' to '+dg1/asmdb/demo';

删除目录:

alter diskgroup dg1 drop directory '+dg1/asmdb/demo' force;

创建别名:

alter diskgroup dg1 add alias '+DG1/ASMDB/spfileasmdb.ora' for '+dg1/asmdb/parameterfile/spfile.269.777315781';

重命名别名:

alter diskgroup dg1 rename alias '+DG1/ASMDB/spfile.ora' to '+DG1/ASMDB/spfileasmdb.ora';

删除别名:删除别名文件不会被删除

alter diskgroup dg1 drop alias '+DG1/ASMDB/spfileasmdb.ora';

练习

ASM的好处是什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值