设为首页 收藏本站
查看: 785|回复: 0

[经验分享] ORACLE 管理 存储与ASM-7727197

[复制链接]

尚未签到

发表于 2018-9-9 12:53:16 | 显示全部楼层 |阅读模式
  存储结构
  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'>
  uniform>  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>  '/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'>  重命名目录:表空间不受任何影响
  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的好处是什么?


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-569057-1-1.html 上篇帖子: ORACLE 管理 日志与空间 下篇帖子: 【oracle优化】oracle 10g 与 11g-HAPPY
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表