asm=cluster+omf+raid+vm
ASM学习- Windows平台
自动存储管理(ASM)通过创建磁盘组减少了人们手工管理成千上万个数据文件方面的潜在负担。磁盘组由一系列磁盘设备以及其上驻留的文件组成,可以作为一个逻辑单元来管理。ASM具有如下优点:
1)ASM能够利用OMF,并且将它与镜像功能和条带技术结合起来,形成一种强健的文件系统和逻辑管理器,甚至可以支持RAC中的多个节点。2)ASM不再要求人们购买第三方逻辑管理器软件3)ASM能够自动负载平衡文件的分发,能够对文件进行条带化处理ASM结构
ASM将数据文件以及其它数据库结构分解成区(extent),再将区分解为磁盘组中的各个磁盘,以提高性能和可用性。ASM并不是对整个磁盘进行镜像,而是对数据库对象进行镜像处理。自动负载平衡是ASM另一个关键功能。当人们需要增加磁盘空间时,你可以向磁盘组中添加磁盘设备,ASM会把一定比例的文件从一个或多个现有的磁盘中转移到新的磁盘中,并保持所有磁盘在总体I/O上的负载平衡。ASM使用一种特殊类型的Oracle实例来提供传统Oracle实例与文件系统之间的接口。有两个新的后台进程支持ASM实例:RBAL和ORBn。RBAL用于协调磁盘组中各个磁盘之间的活动,而ORBn用于在实际磁盘之间执行实际的区移动。N可以从0到9。对于使用ASM的数据库,也有两个新的后台进程:OSMB和RBAL。OSMB负责数据库与ASM实例之间的通讯。磁盘组特点:
磁盘组动态负载平衡
每当磁盘组的配置发生改变时,不论是向其中加入、删除一个失效组还是在一个失效组中添加、删除一块磁盘,系统都会自动进行动态负载平衡处理。这种负载平衡处理是在数据库联机状态下进行的,而且始终保持对用于的可用性。可以通过调整ASM_POWER_LIMIT参数的值来改变负载平衡操作对系统的影响。
1 创建ASM实例
要注意要有裸设备。如果是WINDOWS平台,要求磁盘是基本磁盘,不要升级成动态磁盘,创建扩展分区,然后创建逻辑分区,但是一定不要格式化,否则创建ASM的过程中将无法找到设备。在虚拟机安装oracle10G
虚拟机vmware新建4个1G的磁盘(之后增加了2个2G的虚拟磁盘)
选择这个,建立裸设备
2013-01-25 10:58:17 更新
最后还是通过导入的方式建立数据库nc3,在上面安装的时候选择了em。
1.1 和手工建库一样,首先创建管理目录(dump目录)
mkdir %ORACLE_BASE%\admin\+ASM2\bdump
mkdir %ORACLE_BASE%\admin\+ASM2\cdumpmkdir %ORACLE_BASE%\admin\+ASM2\hdumpmkdir %ORACLE_BASE%\admin\+ASM2\udump注意文件夹名称需要是+asm2 --与后面的实例sid对应
1.2 创建asm的pfile --和实例的pfile一样放在@?/database下,命名为init+asm2.ora
# _asm_allow_only_raw_disks=false# asm_diskgroups='gdata'background_dump_dest=C:\oracle\product\10.2.0\admin\+ASM2\bdumpcore_dump_dest=C:\oracle\product\10.2.0\admin\+ASM2\cdumpuser_dump_dest=C:\oracle\product\10.2.0\admin\+ASM2\udump############################################ Miscellaneous###########################################instance_type=asmcompatible=10.2.0############################################ Pools###########################################large_pool_size=12M############################################ Security and Auditing###########################################remote_login_passwordfile=exclusive
补充:INSTANCE_TYPE
对于ASM实例而言,这个参数值是ASM。对于传统的Oracle实例,值是RDBMS
1.3 cmd下输入localconfig add,添加css服务
C:\oracle\product\10.2.0\db_1\BIN下有localconfig.bat
1.4 识别裸设备
cmd 运行asmtoolg
一次修改一个未格式化的裸设备,这里需要修改6个,4个1g,2个2g
asmtool -list 查看
1.5 创建asm实例 --这里需要有“+”号
C:\Documents and Settings\Administrator>oradim -new -asmsid +asm2startup
ASM实例的启动和关闭
ASM实例上运行与其它数据库相似,不过用默认的STARTUP MOUNT命令代替了STARTUP命令。此外,我们还可以用STARTUP RESTRICT来暂时阻止数据库实例连接到ASM实例上并安装磁盘组。如果人们在ASM实例上使用SHUTDOWN命令,在ASM完成关机操作之前,他会等待所有的相关的数据库都关闭。唯一的例外是,如果使用SHUTDOWN ABORT,则ASM实例并不将ABORT命令传送到相关的数据库,而是所有的相关数据库都会立即执行一条SHUTDOWN ABORT命令。1.6 创建磁盘组
SYS@+asm2>select group_number,disk_number,mount_status from v$asm_disk; --系统已经识别了裸设备
CREATE DISKGROUP gdata NORMAL REDUNDANCY FAILGROUP controller1 DISK '\\.\ORCLDISKD1','\\.\ORCLDISKD3' FAILGROUP controller2 DISK '\\.\ORCLDISKD2','\\.\ORCLDISKD4';
这里的ORCLDISKD1就是asmtoolg修改的裸设备link name
在定义磁盘组的镜像处理类型之前,必须将磁盘组成失效组(failure group)。失效组是指属于一个磁盘组的一块活多块磁盘组成的一部分资源,例如磁盘控制器。它如果失效将引起磁盘组的一部分磁盘不可用。大多数情况下,ASM实例不知道某个磁盘的硬件和软件的依赖关系。因此,除非人们明确将一个磁盘指定到一个失效组,否则磁盘组的每一个磁盘都属于只包含自身的一个失效组。
定义了失效组之后,我们就可以定义磁盘组的镜像处理了。磁盘组中可用失效组数量会限制该磁盘组可用的镜像类型,下面是三中可用的类型:1)外部冗余:External redundancy要求只有一个失效组,并且认为该磁盘组对于数据库运行并不重要,或者改磁盘由外部的一个高可用性硬件,如RAID控制器管理2)普通冗余普通冗余要求有两个失效组,提供双路镜像。3)高冗余高冗余要求至少三个失效组,提供三路镜像,即使有两路失效,仍然可以使用。
select group_number, name, total_mb, free_mb, state, type from v$asm_diskgroup;
目前查询只有一个2,需要mount磁盘组
mount(或open后)
select group_number, disk_number, mount_status, header_status, state, path, failgroup from v$asm_disk;
目前查询为空
1.7 使用磁盘组创建表空间--连接到数据库实例
SYS@nc3>create tablespace tams3 datafile '+gdata' size 10m;
在磁盘组创建表空间需要在磁盘组名称前面加“+”,否则就到了C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\路径(不知道原因),比如上面的tasm2表空间
创建在磁盘组的表空间路径为“+GDATA/nc3/datafile/tams3.256.805645313”(有点乱)
所有的ASM文件都是OMF,因此在大多数管理工作中不用关心使用的实际文件名是什么。当人们从一个ASM磁盘删除对象时,对应的文件也会删除。
向磁盘组中添加裸设备,增大容量
alter DISKGROUP gdata add disk '\\.\ORCLDISKD5','\\.\ORCLDISKD6'; --这里不需要指定FAILGROUP controller1,增加的磁盘是成对的
容量变成了1+1+1+1+2+2=8G
二、将数据库从文件系统迁移到ASM
create spfile from pfile之后,重启Oracle,系统从spfile启动,之后
SYS@nc3>alter database backup controlfile to 'c:\ctbackup.ctl'; --备份控制文件(疑问:controlfile不是一直在记录在数据文件的scn号,现在备份,稍后rman还原为什么可以用它)
数据库已更改。(这一步不是必须的,可以直接使用已有的控制文件)
SYS@nc3>alter system set control_files='+gdata' scope=spfile;
系统已更改。
SYS@nc3>alter system set db_recovery_file_dest='+gdata';
系统已更改。
关闭数据库
rman下 启动到nomount,将控制文件还原到磁盘组
RMAN> restore controlfile from 'C:\CTBACKUP.CTL';
启动 restore 于 25-1月 -13
使用通道 ORA_DISK_1通道 ORA_DISK_1: 已复制控制文件副本
输出文件名=+GDATA/nc3/controlfile/current.256.805656163完成 restore 于 25-1月 -13补充:恢复刚才备份的控制文件,由于我们设置了初始化参数control_files,将其指向了磁盘组gdata,因此恢复出来的控制文件会存放在gdata里。
rman下mount数据库
通过拷贝的方式,将所有的数据文件全都迁移到ASM磁盘组(gdata)里。
RMAN> backup as copy database format '+gdata'; --copy的,真心不怎么懂悲剧,还是失败了,gdata磁盘组8G还是不够大
2013-01-28 15:16:57 更新:
网友上海digoss操作了以下命令
连接到:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining optionsSYS@+ASM2>alter diskgroup gdata mount;磁盘组已变更。SYS@+ASM2>exit从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining options 断开C:\>asmcmdASMCMD> lsGDATA/ASMCMD> cd gdataASMCMD> lsNC3/ASMCMD> rm -rf *ASMCMD> lsASMCMD> pwd+gdataASMCMD> exitC:\>gao ding le'gao' 不是内部或外部命令,也不是可运行的程序或批处理文件。
2013-01-29 11:20:00 更新
3,rman nomount下还原控制文件到磁盘组
RMAN> startup nomount;
Oracle 实例已启动
系统全局区域总计 293601280 字节
Fixed Size 1248624 字节
Variable Size 79692432 字节Database Buffers 209715200 字节Redo Buffers 2945024 字节RMAN> restore controlfile from 'C:\oracle\product\10.2.0\oradata\nc3\CONTROL01.CTL'; --使用已有的控制文件,随便其中一个(恢复刚才备份的控制文件,由于我们设置了初始化参数control_files,将其指向了磁盘组DgroupA,因此恢复出来的控制文件会存放在gdata里。)
启动 restore 于 29-1月 -13
使用目标数据库控制文件替代恢复目录分配的通道: ORA_DISK_1通道 ORA_DISK_1: sid=157 devtype=DISK通道 ORA_DISK_1: 已复制控制文件副本
输出文件名=+GDATA/nc3/controlfile/backup.256.805979179完成 restore 于 29-1月 -134,mount数据库,做数据文件转移到磁盘组
RMAN> alter database mount;
数据库已装载
释放的通道: ORA_DISK_1RMAN> backup as copy database format '+gdata';
启动 backup 于 29-1月 -13
分配的通道: ORA_DISK_1通道 ORA_DISK_1: sid=153 devtype=DISK通道 ORA_DISK_1: 启动数据文件副本输入数据文件 fno=00001 name=C:\SENDB\SYSTEM01.DBF输出文件名 = +GDATA/nc3/datafile/system.257.805979241 标记 = TAG20130129T110720recid = 1 时间戳 = 805979262通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:25通道 ORA_DISK_1: 启动数据文件副本输入数据文件 fno=00002 name=C:\SENDB\UNDOTBS01.DBF输出文件名 = +GDATA/nc3/datafile/undotbs1.258.805979265 标记 = TAG20130129T110720 recid = 2 时间戳 = 805979284通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:25通道 ORA_DISK_1: 启动数据文件副本输入数据文件 fno=00003 name=C:\SENDB\SYSAUX01.DBF输出文件名 = +GDATA/nc3/datafile/sysaux.259.805979291 标记 = TAG20130129T110720recid = 3 时间戳 = 805979300通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:16通道 ORA_DISK_1: 启动数据文件副本复制当前控制文件输出文件名 = +GDATA/nc3/controlfile/backup.260.805979307 标记 = TAG20130129T110720 recid = 4 时间戳 = 805979307通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:03通道 ORA_DISK_1: 启动全部数据文件备份集通道 ORA_DISK_1: 正在指定备份集中的数据文件在备份集中包含当前的 SPFILE通道 ORA_DISK_1: 正在启动段 1 于 29-1月 -13通道 ORA_DISK_1: 已完成段 1 于 29-1月 -13段句柄=+GDATA/nc3/backupset/2013_01_29/nnsnf0_tag20130129t110720_0.261.805979311 标记=TAG20130129T110720 注释=NONE通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02完成 backup 于 29-1月 -13RMAN>
5,切换成数据文件副本
RMAN> switch database to copy;
数据文件 1 已切换成数据文件副本 "+GDATA/nc3/datafile/system.257.805979241"
数据文件 2 已切换成数据文件副本 "+GDATA/nc3/datafile/undotbs1.258.805979265"数据文件 3 已切换成数据文件副本 "+GDATA/nc3/datafile/sysaux.259.805979291"6,开始恢复数据库。
RMAN> recover database;
7,将临时表空间所包含的临时文件迁移到磁盘组gdata里。
RMAN> run{ switch tempfile 1 to '+gdata'; }8,通过SQL*Plus连入数据库实例,将控制文件里记录的联机日志文件的路径修改为磁盘组gdata。
SQL> alter database rename file '/u01/app/oracle/oradata/ora10g/redo01.log' to '+gdata';SQL> alter database rename file '/u01/app/oracle/oradata/ora10g/redo02.log' to '+gdata';SQL> alter database rename file '/u01/app/oracle/oradata/ora10g/redo03.log' to '+gdata';(群里说是mount状态rman下直接操作上面的代码,有机会试下 )
mount下操作
SYS@nc3>select status from v$instance;
STATUS
------------------------MOUNTEDSYS@nc3>select member from v$logfile;
MEMBER
----------------------------------------C:\SENDB\REDO01.LOG
C:\SENDB\REDO02.LOGC:\SENDB\REDO03.LOG每次都是这个错误
回顾redo log的迁移
将REDO01.LOG移动到一个新地方
( 日志文件的移动或重命名:1. 关闭数据库2. 使用操作系统的命令拷贝、移动或重命名重做日志文件3. 启动 mount下 使用 rename to是不是因为我步骤2没有做,就是事先在asm磁盘组中没有联机日志
在mount下增加了两个联机日志组,每组两个成员,都是150M
SYS@nc3>alter database add logfile group 5 '+gdata' size 150m;
SYS@nc3>alter database add logfile member '+gdata' to group 5;
下一步打算切换了日志状态之后,drop掉物理磁盘,保留磁盘组
SYS@nc3>alter system switch logfile;
alter system switch logfile*ERROR at line 1:ORA-01109: database not openopen 数据库
SYS@nc3>select status, GROUP#, MEMBERS from v$log;
STATUS GROUP# MEMBERS
-------------------------------- ---------- ----------INACTIVE 1 1INACTIVE 2 1ACTIVE 3 1CURRENT 4 2UNUSED 5 2SYS@nc3>alter database drop logfile group 1;--删除了第一个
Database altered.
看位置
看磁盘组的使用情况:
select group_number, name, total_mb, free_mb,type, state from v$asm_diskgroup;
9, 在RMAN中以resetlogs选项打开数据库,从而根据控制文件里记录的联机日志文件的路径(这里也就是DgroupA),自动在DgroupA里创建联机日志文件。
RMAN> alter database open resetlogs;--这一步不需要操作了