一、检查磁盘组状况信息
1、查询磁盘组故障组分配
SELECT G.NAME,D.disk_number,D.STATE,D.redundancy,D.NAME,D.PATH,D.FAILGROUP,D.FAILGROUP_TYPE FROM V$asm_diskgroup g,v$asm_disk d where g.group_number=d.group_number;
2、查看磁盘组,(空间情况)
select name name2,state,type,free_mb,total_mb,usable_file_mb from v$asm_diskgroup;
3、查看磁盘情况
select GROUP_NUMBER,free_mb,total_mb,disk_number,MOUNT_STATUS,mode_status,STATE,HEADER_STATUS,name name2,PATH from v$asm_disk order by 4,5;
二、创建磁盘组
获取磁盘列表信息查看磁盘状态:
CANDIDATE-该磁盘从来没有分配给任何ASM磁盘组;
MEMBER-该磁盘分配给ASM磁盘组;
PROVISIONED-正在使用ASMLib,并且该磁盘尚未分配给磁盘组。
1、取消删除的操作
提到的ASM自动平衡的特性,上述语句返回后并不代表磁盘已经被删除,此时后台可能由于正忙碌地执行着IO重平衡的工作,因此如果在这个当口,DBA忽然意识到操作失误,其实磁盘并不需要被删除,那也可以马上通过alter diskgroup dgname undrop disks语句来取消删除的操作,例如:
SQL> alter diskgroup asmdisk2 drop disk asmdisk2;
SQL> alter diskgroup asmdisk2 undrop disks;
Diskgroup altered.
只要删除操作还没有真正完成,任何就会被取消,否则的话,上述语句也挽回不了什么了,如果希望挽回,那DBA只能再通过ADD语句将该磁盘重新加入到磁盘组了。
三、AU与条带
AU和条带就是一个分配单位,数据会被以一定单位分割,存储在多个磁盘中。分割单位的大小由AU、条带来决定。
1、ASM有两种条带
- 不可调粗粒度:相当于ASM没有条带,或者说AU就是条带,条带就是AU。条带宽度永远为1,不可改变。条带大小等于AU大小。
可调细粒度:条带大小为128kb,条带宽度为8 这是oracle默认的细粒度条带设置。条带的宽度不一定等于磁盘数。
a、在DG上创建细粒度模板:alter diskgroup data add template stp_fine attributes (unprotected fine);
b、创建使用细粒度可调条带的表空间
create tablespace test datafile '+data(stp_fine)/test.dbf' size 10m;
总结下小条带的优缺点:
小条带的优点是数据更分散,有助于分散热点。 小条带的缺点是过小的AU、条带,导致连续数据太小,OLAP系统性能受影响。 大AU、大条带的优点是数据连续存储,显著提高OLAP类操作性能。 大AU、大条带的缺点是过大的AU、条带,可导致数据分散度不够高。 在OLTP环境下,使用较小的条带分散热点,可以减少竞争、提高性能。 但在OLAP环境下,全扫描操作较多,这时数据的连续性是关键。连续的IO越多,IO性能越佳,为了让数据连续的存储,尽量使用大的AU.
四、最大I/O与最小IO
ORACLE 最大IO取决于连续的数据有多大,当然还有OS和硬件的限制。
ORACLE 最小IO 取决于块大小,数据文件最小I/O是8kb,redo文件最小IO是512byte,ASM元数据文件大小是4kb,很多操作系统、硬件层都有一个单次IO最大大小限制通常都是1MB.五、AU与条带的总结
AU是针对DG的,条带是针对文件的,一个DG只能有一种大小的AU,但可以有多个条带大小不一的文件。
例:1、在data 磁盘组上创建一个细粒度可调条带的表空间(数据文件)
create tablespace test1 datafile '+data(stp_fine)/test1.dbf' size 10m;
2、在这个data磁盘组上创建粗粒度不可调条带的表空间(数据文件)
create tablespace test2 datafile '+data' size 10m;
3、在OLAP环境下:不用考虑条带大小,用大AU,大小为4MB或8MB为宜,甚至可以考虑更大。但大的AU唯一的缺点会浪费一点点空间。
4、在OLTP环境下:如果并发插入的数据比较多,可以使用小条带进一步分割数据。
六、ASM常用命令
--------查看磁盘组,(空间情况)
select name,state,free_mb,total_mb,usable_file_mb from v$asm_diskgroup;
--------查看磁盘情况
select GROUP_NUMBER,free_mb,total_mb,disk_number,MOUNT_STATUS,mode_status,
HEADER_STATUS,name,PATH
from v$asm_disk order by 4,5;
select g.group_number,g.name,d.name,d.path from v$asm_diskgroup g,v$asm_disk d where g.group_number=d.group_number;
select GROUP_NUMBER,free_mb,total_mb,disk_number,
HEADER_STATUS,name,PATH
from v$asm_disk order by 4;
---查看是否有数据库实例连接上ASM实例
select instance_name,db_name,status from v$asm_client;
--------查看asm存储文件的层次图(树状)
select lpad(' ', 4*(level-1))||name name ,REFERENCE_INDEX,PARENT_INDEX,GROUP_NUMBER
from v$asm_alias
start with ALIAS_INDEX = 0
connect by prior REFERENCE_INDEX=PARENT_INDEX ;
--------查看层次图-类型和大小
select a.GROUP_NUMBER,b.name,a.file_number,a.bytes,a.type ,a.modification_date
from v$asm_file a ,v$asm_alias b
where a.file_number=b.file_number
and a.GROUP_NUMBER = b.GROUP_NUMBER
order by 1,5;
--------查看及修改asm重新平衡速度
show parameter power
alter diskgroup data check all repair ;;--检测一致性,并修复错误
ALTER DISKGROUP data REBALANCE POWER 11;--设置最高速度来做平衡的操作
--------查看asm实例操作变化平衡的进度(只记录结构变化操作)
select group_number,operation,power,est_minutes from v$asm_operation;
#####################################################################################3
---手动平衡磁盘组
alter diskgroup data rebalance power 5;
--------创建磁盘组
create diskgroup DATA2 external redundancy disk
'/dev/vx/rdmp/Disk_0s2',
'/dev/vx/rdmp/Disk_4s2',
'/dev/vx/rdmp/Disk_5s2'
create diskgroup DATA2 external redundancy disk
'/dev/rdisk/ora_data_01' ATTRIBUTE 'compatible.asm' = '11.2';;
--------删除磁盘组的某个磁盘
alter diskgroup datadg drop disk DATADG_0000 ;
alter diskgroup datadg drop disk DATADG_0001 ;
SQL> alter diskgroup DATA drop disk A4;
SQL> alter diskgroup DATA undrop disks;
--------修改asm实例搜索可用asm磁盘路径,不同路径用逗号隔开
ALTER SYSTEM SET
asm_diskstring=
'/dev/vx/rdsk/oradata122/*','/dev/vx/rdmp/emc*'
scope=both sid='+ASM1';
使用asmlib时磁盘的格式:
alter diskgroup DATA2 add disk 'ORCL:ASMDISK09';
SQL> alter diskgroup fra add disk 'ORCL:ASMDISK06' NAME A6;
--卸载所有磁盘组
SQL> alter diskgroup all dismount;
SQL> select group_number,name,state,total_mb,free_mb from v$asm_diskgroup;
--挂载所有磁盘组
SQL> alter diskgroup all mount;
select group_number,name,state,total_mb,free_mb from v$asm_diskgroup;
--如果当前磁盘组有实例在访问,则不能被卸载
SQL> alter diskgroup data dismount;
#############################################################################
a、在DG上创建细粒度模板:
alter diskgroup data add template stp_fine attributes (unprotected fine);
b、创建使用细粒度可调条带的表空间
create tablespace test datafile '+data(stp_fine)/test.dbf' size 10m;
c、创建非标准大小AU的磁盘组,一般在OLAP系统上建议使用。
CREATE DISKGROUP DATA2 external redundancy DISK '/dev/raw/raw11', '/dev/raw/raw10',
'/dev/raw/raw9' ATTRIBUTE 'au_size' = '16M', 'compatible.asm' = '11.2';
CREATE DISKGROUP DATA external redundancy DISK 'ORCL:ASMDISK01', 'ORCL:ASMDISK02'
ATTRIBUTE 'compatible.asm' = '11.2';
select name,state,compatibility,ALLOCATION_UNIT_SIZE from v$asm_diskgroup;
######################################################################################3
实验一:
启动Gi服务
cd /u01/app/oracle/product/11.2.0/grid/bin
./crsctl start has --启动高可用服务
./crsctl stop has --停止高可用服务
./crsctl enable has --重启操作系统会自动启动HAS服务。
如果创建了ASM实例,我们就可以通过. oraenv 命令来切换环境变量(+ASM),然后直接运行srvctl,crsctl这些命令
******************************************************************
. oraenv PROD4切换到数据库的环境变量,执行下面操作注册数据库和监听到has服务中去:
srvctl add database -d PROD4 -o /u01/app/oracle/product/11.2.0/db_1 --注册数据库到GI
srvctl remove database -d PROD4
srvctl start database -d PROD4 --启动数据库
srvctl stop database -d PROD4 --闭关数据库
srvctl config database --查看哪些数据库已经注册
srvctl status database -d PROD4/EMREP
lsnrctl stop listener
srvctl add listener -l listener -p 1521 -o /u01/app/oracle/product/11.2.0/db_1
srvctl config listener --查看监听是否注册成功
srvctl start listener 启动监听
srvctl remove listener -l listener如果注册错误可以使用该命令删除
*******************************************************************************
crs_stat -t
target是资源所在目标的状态,state是资源是否可用
####################
crs_stat -p ora.cssd --查看cssd资源状态
crs_stat -p ora.diskmon --查看
crsctl start resource ora.cssd --手工重启cssd
#########################################################################################
实验:二
1、会创建ASM实例
cd /u01/app/oracle/product/11.2.0/grid/bin
单机环境:要先启动has服务
./crsctl start has
2、会使用./asmca 创建磁盘组
3、会使用sqlplus 命令创建管管理磁盘组
create diskgroup DATA2 external/normal/high redundancy disk 'ORCL:ASMDISK03','ORCL:ASMDISK04'(v$asm_disk里的path) ATTRIBUTE 'compatible.asm'(版本兼容性) = '11.2';--创建磁盘组
alter diskgroup data2 add disk 'ORCL:ASMDISK06';--添加磁盘
alter diskgroup data2 add disk 'ORCL:ASMDISK07';
alter diskgroup data2 add disk 'ORCL:ASMDISK11';
alter diskgroup data2 drop disk 'ASMDISK04';--删除磁盘
SQL> drop diskgroup data2 including contents;--删除磁盘组
4、会使用ASMCMD命令管理asm文件
5、会删除第一个磁盘组
SQL>sqlplus / as sysasm
SQL> alter diskgroup data dismount force;
SQL> drop diskgroup data force including contents;
########################################################################################
实验三:文件系统迁移到ASM
1、首先打开归档,确认归档路径
2、查询下数据库文件结构
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/PROD4/PROD4/system01.dbf
/u01/app/oracle/oradata/PROD4/PROD4/sysaux01.dbf
/u01/app/oracle/oradata/PROD4/PROD4/undotbs01.dbf
/u01/app/oracle/oradata/PROD4/PROD4/users01.dbf
/u01/app/oracle/oradata/PROD4/PROD4/example01.dbf
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/PROD4/PROD4/control01.ctl
/u01/app/oracle/oradata/PROD4/PROD4/control02.ctl
/u01/app/oracle/oradata/PROD4/PROD4/control03.ctl
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/PROD4/PROD4/redo03.log
/u01/app/oracle/oradata/PROD4/PROD4/redo02.log
/u01/app/oracle/oradata/PROD4/PROD4/redo01.log
SQL> select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/PROD4/PROD4/temp01.dbf
3、全库做备份:open状态就可以
[oracle@edsir1p8-PROD4 ~]$ rman target /
RMAN> BACKUP as copy database format '+DATA';
RMAN> EXIT
PROD4创建一个测试表:
SQL> create table t1 as select * from dba_objects;
Table created.
SQL>alter system switch logfile;
4、 在生产库查看asm磁盘组中备份的控制文件的路径
RMAN> list backup of controlfile;
specification does not match any backup in the repository
RMAN> list copy of controlfile;
List of Control File Copies
===========================
Key S Completion Time Ckp SCN Ckp Time
------- - --------------- ---------- ---------------
5 A 17-MAY-16 871730 17-MAY-16
Name: +DATA/prod4/controlfile/backup.260.912089587
Tag: TAG20160517T141203
修改spfile文件中控制文件的路径信息
create pfile='/home/oracle/pfile' from spfile
修改文件中*.control_files='+DATA/prod4/controlfile/backup.262.940489201'
删除$ORACLE_HOME/dbs/lkPROD4文件
使用另一个实例 将数据库开启到mount
export ORACLE_SID=p4
startup pfile='/home/oracle/pfile' mount;
进入rman修改控制文件指针 恢复数据
rman target /
RMAN> catalog start with '+data';
RMAN> switch database to copy;
RMAN> recover database;
恢复后 开启数据库
[oracle@edsir1p8-P4 dbs]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Thu May 19 09:57:03 2016
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
SQL> alter database open resetlogs;
指定resetlogs,会执行下列操作:
1)将当前的在线重做日志文件归档,然后清空其内容并将日志文件序列号重置为1
2)重置控制文件中关于在线重做日志文件的元数据
3)更新数据文件和在线重做日志文件的resetlogs scn等信息
6、创建新的临时表空间文件,并删除旧的
SQL> alter tablespace temp add tempfile '+DATA' size 200M;
SQL> alter database tempfile '/u01/app/oracle/oradata/PROD4/PROD4/temp01.dbf' drop ; 或
alter tablespace temp drop tempfile '/u01/app/oracle/oradata/PROD4/PROD4/temp01.dbf';
7、把redo添加新的成员,删除老的成员,查看原来有多少组,就添加多少成员
select member from v$logfile;
alter database add logfile member '+data' to group 1;
alter database add logfile member '+data' to group 2;
alter database add logfile member '+data' to group 3;
select group#,status,member from v$logfile;
初始化新加的logfile
SQL> alter system switch logfile;--最少执行三遍
select group#,status,member from v$logfile;--查询下日志成员状态
删除旧的logfile member(如果无法删除,说明该文件还在使用,我们可以进行手工切换之后,再删除)
SQL> select group#,members,status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 2 CURRENT
2 2 INACTIVE
3 2 INACTIVE
alter database drop logfile member '/u01/app/oracle/oradata/PROD4/PROD4/redo03.log';
alter database drop logfile member '/u01/app/oracle/oradata/PROD4/PROD4/redo02.log';
SQL> alter system switch logfile;
alter database drop logfile member '/u01/app/oracle/oradata/PROD4/PROD4/redo01.log';
8、可以根据实际情况重新设置归档路径
alter system set log_archive_dest_1='location=+arch'
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。