oracle学习4
来源:互联网 发布:三菱数控系统编程 编辑:程序博客网 时间:2024/05/16 06:11
本篇讲述搭配Automatic Storage Management的Oracle数据库迁移。
1.新的任务
那天,小明正在心声上看美女,PL走了过来。
“你交付过Oracle数据库迁移吗?”
“某年某月某日,我在某地成功交付过。”小明有些得意。
“非常好。现在有一个使用ASM的Oracle数据库要迁移,你去交付吧。”
“哪里不会点哪里,你点读机啊!”
2. ASM简介
2.1概述
ASM是Automatic Storage Management的简写,功能等于卷管理+文件系统。它意图终结Oracle数据库文件(数据文件、控制文件、重做日志文件等)使用文件系统、裸设备(Raw Device)。
为了简化管理,提高数据库稳定性,Oracle公司开发出了ASM,可以直接对接操作系统上的磁盘(LUN),无需卷管理器或者文件系统。这是官方推荐存储管理方式,号称性能接近裸设备。
我们在《Oracle初级篇1》里,是把Oracle数据库文件保存在文件系统上。而裸设备方式,已经退役了。
Oracle公司偷了懒,用Oracle数据库实例的概念仿照了ASM。所以ASM也有实例,通过实例进行磁盘管理。
数据库实例与ASM实例,是非常多相似、相通的地方,但也有不少的差异。
1. ASM实例的状态相对简单一些,基本上就只有shutdown和started两种状态。
2. 通常情况下,我们用oracle用户安装和配置Oracle数据库
3. 安装和配置ASM,我们使用的是grid用户。
4. grid用户有一套类似、但是不同于oracle用户的环境变量。
2.2登录asmcmd界面
登录到界面
# su – gird
$ asmcmd
然后进入到ASMCMD>命令提示行。
它提供了文件及目录管理的接口,我们可以在其中运行 ls / cd / pwd / rm等类似文件系统的子命令。
2.3登录SQL界面
还可以进入SQL命令界面,正常情况下,ORACLE_SID的值一般是+ASM
千万注意,这里是sysasm,不是sysdba
这里是sysasm!
sysasm!
重要的事情说三遍。
# su – grid
$ echo $ORACLE_SID
$ sqlplus "/ as sysasm"
然后就看见SQL>提示符了。注意阅读提示信息。
如果你看到“Connected to an idle instance.”,这表示ASM实例处于shutdown状态。
2.4起停ASM实例
切换实例状态shutdown → started
SQL> startup
切换实例状态 started → shutdown
SQL> shutdown immediate
2.5 ASM实例的进程
我们先来看一下ASM实例的进程。
敲入如下的操作系统命令:
ps -ef | grep asm
可以看到后台进程,类似于oracle数据库实例。
grid 4944 1 0 03:35 ? 00:00:08 asm_pmon_+ASM
grid 4946 1 0 03:35 ? 00:00:39 asm_vktm_+ASM
……
我们在《Oracle初级篇3》里讲过:
1. 左边第一列,是运行进程的用户名。它们是操作系统上的用户名,这里通常都是grid。
2. 最后一列,是oracle的OS进程名称。进程名称,被"_"切割为了3部分,最后一部分是实例名。
ASM实例与数据库实例是相互独立的,实际上它们之间是一对多的关系。
3.搭配ASM的Oracle安装
因为不会,小明赶紧在实验室找了一套设备来进行学习和演练。
Linux版本,选择的是Oracle Unbreakable Linux 6.4,;数据库版本,选择的是11g R2,版本号11.2.0.4,也就是与《Oracle初级篇1》里相同。
下面的备份和恢复的演练,也是基于这套环境进行。
相对于《Oracle初级篇1》里的安装,ASM功能包含在Oracle Grid Infrastructure里,需要通过第3个安装文件 p13390677_112040_Linux-x86-64_3of7.zip 进行安装。
另外,建议使用ASMLib功能,需要2个额外的RPM包,oracleasm-support在OS安装ISO里,oracleasmlib需要单独下载。
所有软件都上传到了onebox,点这里从onebox下载
我还是不会重新发明轮胎的。
下述样例的环境有一些小小不同,但稍加维修即可适用。
请看这篇文章Installing Oracle Database 11g R2 on Oracle Linux 6.3 with ASM
注意,grid用户和oracle用户的ORACLE_BASE和ORACLE_HOME都是不同的。
这是符合OFA(Optimal Flexible Architecture)规范的命名。
4.搭配ASM的Oracle备份
注意,本章操作用户都是oracle用户。
4.1启用归档日志模式
在进行Oracle数据库在线物理备份之前,我们需要开启归档日志模式。详见《Oracle初级篇1》第5章。
如果我们要指定归档日志,怎么办呢?
在mount模式下,使用SQL语句
SQL> ALTER SYSTEM set log_archive_dest_1='LOCATION=/arch' scope=spfile;
SQL> alter database archivelog;
其中,/arch可以替换成其它目录,要求对oracle用户可读可写。建议它是一个单独的文件系统。
4.2数据库全备份
小明说,这些他都会的。你信不?
然后他运用《Oracle初级篇2》第3章的知识演练了一遍,果然。
RMAN命令如下:
注意,一行一行地输入,>符号及它以前的字符无需输入。或者可以生成RMAN脚本运行。
RMAN> run{
2> allocate channel ch00 type disk '/disk1/bk_%s_%p_%t';
3> backup database plus archivelog;
4> backup current controlfile;
5> release channel ch00;
6> }
注意阅读屏幕输出信息。它会告诉我们备份保存在哪里了,数据文件、归档日志、控制文件生成的备份文件名字。
注意,备份文件默认保存在ASM里,我们这里指定了保存在/disk1目录。oracle用户要具有/disk1目录的读写权限。
如果要进行优化,请参见《Oracle初级篇3》第4章。
5.搭配ASM的Oracle恢复
5.1删除数据文件+控制文件
找到数据文件
SQL> select name from v$datafile;
可以找到数据文件的位置,形如
+DATA/test/datafile/system.272.885100053
其中,“+”是磁盘组的根目录,DATA是ASM磁盘组的名称。
找到控制文件
SQL> show parameter control_files;
我们用grid用户登录到asmcmd界面,类似Linux的目录/文件的管理界面,可以执行ls / cd / pwd / rm 等子命令。
例如执行删除命令
ASMCMD> rm +DATA/test/datafile/*
找到并删除所有的数据文件和控制文件。
注意:ASM对oracle数据库提供了保护,当数据库文件被加载时(非nomount状态的控制文件、open状态的数据文件),无法被删除。所以,我们先把数据库关闭,再进行删除。
5.2恢复控制文件+数据文件
小明又说,这些他都会的。我相信了。
然后他就真的运用《Oracle初级篇2》第4章的知识,成功地恢复了数据库。
以oracle用户运行的RMAN恢复命令。
恢复的流程是:
启动到nomount状态 →恢复控制文件 →切换到mount状态 →恢复数据文件 → recover database(自动恢复归档日志) → 切换到open状态(resetlogs)
6.下一步行动
哪里不会点哪里,so easy!
小明顺利地完成了测试,然后上3ms看东哥的博客去了,呵呵。
不念过去,不畏将来。现场交付迁移,小明又将面临什么样的挑战呢?我们下期见。
- Oracle 学习4
- oracle 学习小结4
- oracle学习笔记4
- Oracle 学习笔记4
- oracle 学习小结4
- oracle学习笔记4
- oracle学习4
- oracle学习之--4oracle的体系结构
- Oracle基础学习4--Oracle权限传递
- Oracle学习笔记(4)
- oracle学习之体系结构4
- Oracle入门学习(4)
- 【oracle学习】oracle安装
- [oracle学习] oracle 数据类型
- 【Oracle】Oracle基础学习
- 学习oracle-认识oracle
- oracle学习
- Oracle学习
- Java工具类
- python基础(输入—字符串—list—tuple—循环)
- LeetCode || Maximal Rectangle
- poj 1637 最大流解混合图欧拉回路
- python 多线程
- oracle学习4
- How to Use OpenCV in Android Studio
- jsrender页面数据的展示
- ios的单元测试
- java 简单的TCP接收数据与发送数据
- android之--adb环境变量配置
- bat实现ftp上传
- sharedUserID的使用
- 静态内部类的使用场景