Oracle 管理中需要用到的命令
因为比较笨,所有做个文档记录一下。方便日后使用。以后遇到常用的命令再不断更新进来。
Linux 命令
检查内存
#grep MenTotal /proc/meminfo
查看共享内存
#df –k /dev/shm
交换空间检查
#grep SwapTotal /proc/meminfo
查看有效的内存和交换空间
#free
临时目录/tem检查
#df –k /tmp
磁盘空间检查
#df –k
#df –h
操作系统检查
#cat /etc/redhat-release
#lsb_release –a
@uname –r
Rpm安装
#rpm –ivh *.rpm
Rpm查看
#rpm –q *
创建组
#/usr/sbin/groupadd oinstall
#/usr/sbin/groupadd dba
#/usr/sbin/groupadd oper
创建用户
#/usr/sbin/useradd –g 组名–G 组名 用户名
#/usr/sbin/useradd –g oinstall –G dba,operoracle
查看用户
#id 用户名
设置用户密码
#passwd 用户名
创建目录
#mkdir –p /路径
修改目录属性
#chown –R 用户名:组 /路径
#chown –R oracle:oinstall /u01/app
修改目录的读写执行权限
#chmod –R 775 /路径
#chmod 775 /路径
#chmod –R 775 /u01/app
编辑文件profile
$ls –al .bash_profile(.bash_profile为隐藏文件,因此要用ls –a命令查找)
$vi .bash_profile(用vi编辑.bash_profile)
修改环境配置文件
#vi /etc/profile
修改SHELL限制
#vi /etc/security/limits.conf
Eg:修改oracle用户
#vi /etc/security/limits.conf
Oracle soft nproc 2047
Oracle hard nproc 16384
Oracle soft nofile 1024
Oracle hard nofile 65536
编辑文件login
#vi /etc/pam.d/login
Session required/lib/security/pam_limits.so
Session required pam_limits.so
修改内核参数
#env
查看内核参数的值
#/sbin/sysctl –a | grep kernel.shmmax
切换用户
#su – root
#su – oracle
启动图形化
#xhost +
Oracle 命令
Oracle 的安装步骤:
1. 下载oracle的安装文件
2. 硬件检查
3. 软件检查
4. 创建用户和组
5. 创建相应的目录,并分配权限
6. 修改用户的SHELL的限制
7. 修改用户的环境配置
8. 修改内核参数
9. 必备软件包的安装
10. 数据库软件的安装
11. 创建数据库
12. 创建监听
13. 补丁的安装
14. 数据库备份策略制定
15. 数据库备份脚本编写、测试,全备
Oracle删除的步骤
1. 用DBCA删除数据库
2. 删除ASM
3. 停止Oracle所有的服务
4. 用OracleUniversal Installer 自动删除Oracle的组件
5. 手动删除Oracle的其余组件
a) 删除注册表中与Oracle相关的内容
b) 删除与Oracle相关的环境变量
c) 删除与Oracle相关的目录或文件
d) 删除启动菜单中的Oracle
Oracle监听的启动和关闭
#su – oracle
#export ORACLE_SID=xxxx
#lsnrctl start (listener)
#lsnrctl stop (listener)
测试oracle监听
Tnsping ORACLE_SID
Oracle参数文件
PFILE: 初始化参数文件 Initialization Parameter Files 是文本文件
SPFILE: 服务器参数文件 Server Parameter Files 是二进制文件
Oracle参数文件的转换
CREATE PFILE = ‘/路径/PFILE的名字’ FROM SPFILE = ‘/路径/SPFILE的名字’ (ORACLERAC环境下慎用)
CREATE SPFILE = ‘/路径/SPFILE的名字’ FROM PFILE= ‘/路径/PFILE的名字’
Oracle用参数文件启动
STARTUP PFILE=’SPFILE文件的绝对路径’
Oracle 启动步骤
#sqlplus /nolog
SQL>CONNECT sys AS SYSDBA
SQL>STARTUP NOMOUNT (分配内存)
SQL>ALTER DATABASE MOUNT (打开控制文件)
SQL>ALTER DATABASE OPEN (打开数据库)
只读方式打开数据库
SQL>STARTUP OPEN READ ONLU
关闭数据库
SQL>SHUTDOWN IMMEDIATE (最安全的关闭方式)
SQL>SHUTDOWN NORMAL (一般不用,或只在测试环境下用)
SQL>SHUTDOWN TRANSACTIONAL (比较慢或很慢,一般不用)
SQL>SHUTDOWN ABOUT (强行关闭数据库,下次数据库启动时需要实例恢复)
Oracle表空间
创建表空间
CREATE TABLESPACE 表空间名
DATAFILE ‘/绝对路径/’ SIZE xxxM
AUTOEXTEND ON NEXT xxM MAXSIZE UNLIMITED
LOGGING
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO (DEFAULT)
扩展表空间
1.手动增加表空间中的数据文件大小
ALTER DATABASE DATAFILE ‘/绝对路径/’ RESIZE xxxM
2.把表空间中的数据文件设置成自动扩展
ALTER DATABASE DATAFILE ‘/绝对路径/’ AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
3.往表空间中增加数据文件
ALTER TABLESPACE 表空间名 ADD DATAFILE ‘/绝对路径/数据文件名’ SIZE 100M
表空间在线离线、只读设置
ALTER TABLESPACE表空间名 OFFLINE
ALTER TABLESPACE表空间名ONLINE
ALTER TABLESPACE表空间名READ ONLY
ALTER TABLESPACE表空间名READ WRITE
重命名表空间名
ALTER TABLESPACE表空间名RENAME TO 新表空间名
删除表空间
DROP TABLESPECE 表空间名 INCLUDING CONTENTS
删除表空间及其数据文件
DROP TABLESPECE 表空间名 INCLUDING CONTENTS AND DATAFILES
表和表空间的关系
1. 查看所有表空间大小
(数据文件)
SQL> select tablespace_name,sum(bytes)/1024/1024 from dba_data_files
group by tablespace_name;
2. 已经空闲的表空间大小
(空闲表空间)
SQL> selecttablespace_name,sum(bytes)/1024/1024 from dba_free_space
group by tablespace_name;
3. 所以使用空间可以这样计算
selecta.tablespace_name,total,free,total-free used from
(selecttablespace_name,sum(bytes)/1024/1024 total from dba_data_files
group by tablespace_name) a,
( selecttablespace_name,sum(bytes)/1024/1024 free from dba_free_space
group by tablespace_name) b
wherea.tablespace_name=b.tablespace_name;
4. 下面这条语句查看所有segment的大小。
Select Segment_Name,Sum(bytes)/1024/1024From User_Extents Group By Segment_Name
5. 还有在命令行情况下如何将结果放到一个文件里。
SQL> spool out.txt
SQL> select * from v$database;
SQL> spool off
得到创建表空间的SQL语句
SQL>set long 10000
SQL>SELECT DBMS_METADATA.GET_DDL(‘TABLESPACE’,’表空间名’) FROM dual
数据文件管理
非归档模式,离线
ALTER DATABASE DATAFILE ‘/路径/数据文件名’ OFFLINE
归档模式,离线(慎用,这样离线的数据文件将永远不能再次在线)
ALTER DATABASE DATAFILE ‘/路径/数据文件名’ OFFLINE FOR DROP
使数据文件在线
ALTER DATABASE DATAFILE ‘/路径/数据文件名’ ONLINE
数据文件移动
查询位置SELECTfile_name,Tablespace_name FROM DBA_DATA_FILES
ALTER TABLESPACE 表空间名 OFFLINE NORMAL
(在OS上移动数据文件位置)
ALTER TABLESPACE表空间名RENAME DATAFILE ‘/数据文件原绝对路径/’ TO ‘/数据文件新绝对路径/’
ALTER TABLESPACE表空间名ONLINE
查询验证SELECTfile_name,Tablespace_name FROM DBA_DATA_FILES
删除数据文件
ALTER TABLESPACE表空间名DROP DATAFILE ‘/数据文件绝对路径/’
如果是删除临时文件
ALTER TABLESPACE 临时表空间名 DROP TEMPFILE ‘/数据文件绝对路径/’
列出数据库中的数据文件
SELECT file#,name FROM v$datafile
临时表空间管理
创建临时表空间
CREATE TEMPORARY TABLESPACE 临时表空间名 TEMPFILE ‘/数据文件绝对路径/’ SIZExx M
找出默认临时表空间
SELECT PROPERTY_NAME,PROPERTY_VALUE FROMDATABASE_PROPERTIES WHERE PROPERTY_NAME=’DEFAULT_TEMP_TABLESPACE’
查看有哪些临时表空间
SELECT TABLESPACE_NAME,FILE_NAME,STATUSFROM DBA_TEMP_FILES ORDER BY TABLESPACE_NAME
UNDO,回滚表空间的操作
创建回滚表空间
CREATE UNDO TABLESPACE 回滚表空间名 DATAFILE ‘/数据文件绝对路径/’ SIZE 2M REUSE AUTOEXTEND ON
删除回滚表空间
管理员可以删除回滚表空间,但不能删除数据库当前正在使用的回滚表空间。只能先把数据库切换到另一个回滚表空间,然后重启数据库后再删除。
显示数据库当前正在使用的回滚表空间
SHOW PARAMETER UNDO_TABLESPACE
切换回滚表空间
ALTER SYSTEM SET UNDO_TABLESPACE = 新回滚表空间名SCOPE=BOTH
查询数据库中的回滚表空间
SELECT TABLESPACE_NAME FROM DBA_TABLESPACESWHERE CONTENTS = ‘UNDO’
往回滚表空间增加数据文件
ALTER TABLESPACE回滚表空间名 ADD DATAFILE ‘’ SIZE 5M ATUOEXTEND ON NEXT 1M MAXSIZE UNLIMITED
查看Oracle内存信息
SGA
SQL>SHOW SGA
SELECT * FROM V$SGA
显示数据库高速缓冲区
SELECT NAME,BYTES/1024/1024||’M’ FROM V$SGAINFOWHERE NAME=’Buffer Cache Size’
相关视图
V$MEMORY_DYNAMIC_COMPONENTS
显示重做日志缓冲区
SELECT * FROM V$SGAINFO
显示共享池大小
SELECT NAME,BYTES/1024/1024||’M’ FROM V$SGAINFOWHERE NAME=’Shared Pool Size’
相关视图
V$MEMORY_DYNAMIC_COMPONENTS
显示Java Pool大小
SELECT NAME,BYTES/1024/1024||’M’ FROM V$SGAINFOWHERE NAME=’Java Pool Size’
显示Large Pool大小
SELECT NAME,BYTES/1024/1024||’M’ FROM V$SGAINFOWHERE NAME=’Large Pool Size’
显示共享池(Shared Pool)大小
SELECT NAME,BYTES/1024/1024||’M’ FROM V$SGASTATWHERE NAME=’free memory’ AND POOL = ’Shared Pool’
查看Oracle的后台进程
SELECT * FROM V$BGPROCESS WHERE PADDR != ‘00’ORDER BY NAME
查看Oracle的会话
SELECT * FROM V$SESSION WHERE TYPE=’USER’
查看Oracle的会话状态
SELECT SID,SERIAL#,STATUS,SERVER FROMV$SESSION WHERE USERNAME = ‘用户名’
终止会话
ALTER SYSTEM KILL SESSION ‘SID,SERIAL#’
修改归档进程(ARCn)的数量
ALTER SYSTEM SETLOG_ARCHIVE_MAX_PROCESSES=n SCOPE=both (n为整数)
查看数据库是否已经启动了相应数量的归档进程
SELECT * FROM V$BGPROCESS WHERE paddr<>’00’
查看数据库中控制文件
SELECT * FROM V$CONTROLFILE
SHOW PARAMETER control_files
修改镜像控制文件
1. 再PFILE中修改control_files 参数
2. 根据PFILE生成SPFILE
3. 重启数据库
查看控制文件
SHOW PARAMETER DIAGNOSTIC_DEST
DUMP出控制文件的详细信息
ALTER SESSION SET events ‘immediate tracename control level 10’
在$ORACLE_HOME/rdbms/sid/trace下进行查找,找到dump文件。
得到创建控制文件的脚本
查询跟踪文件的路径
SHOW PARAMETER user_dump_dest
把控制文件备份到数据库的跟踪文件中,再查看跟踪文件,得到创建控制文件的脚本
ALTER DATABASE BACKUP CONTROLFILE TO TRACE
移动和删除控制文件
通过修改PFILE文件中的初始化参数control_files来实现。
修改PFILE文件需再根据修改后的PFILS文件创建SPFILE文件。
重做日志(Redo Log)管理
查询数据库中有哪些重做日志组
SELECT * FROM V$LOG
查询数据库中的重做日志文件
SELECT * FROM V$LOGFILE
特别说明:STATUS状态
INVALID 表示文件不可访问
STALE 表示文件的内容不完整
DELETED 表示文件不再被使用
NULL 表示文件在使用中
创建重做日志组
ALTER DATABASE ADD LOGFILE (‘/绝对路径/日志文件1.rdo’, ‘/绝对路径/日志文件2.rdo’) SIZE 4M
创建重做日志,并制定重做日志组的编号
ALTER DATABASE ADD LOGFILE GROUP 组编号(‘/绝对路径/日志文件1.rdo’, ‘/绝对路径/日志文件2.rdo’) SIZE 20M
添加重做日志文件
ALTER DATABASE ADD LOGFILE MEMBER ‘/绝对路径/日志文件n.rdo’ TO GROUP 组编号
查询重做日志组的状态
SELECT GROUP#,ARCHIVED, STATUS FROM V$LOG;
删除重做日志组
ALTER DATABASE DROP LOGFILE GROUP 组编号
删除重做日志组成员
SELECT * FROM V$LOGFILE
ALTER DATABASE DROP LOGFILE MEMBER ‘/绝对路径/日志文件n.rdo’
改变重做日志组的状态
ALTER SYSTEM SWITCH LOGFILE
ALTER SYSTEM CHECKPOINT
查看重做日志组是否已经归档
SELECT GROUP@,STATUS,ARCHIVED FROM V$LOG
特别说明ARCHIVED状态
ARCHIVED=YES 表示日志已经归档
ARCHIVED=NO 表示日志未归档
Oracle用户管理
创建用户账号
简化版
CREATE USER 用户名 IDENTIFIED BY 密码 (Oracle 11g中,密码大小写敏感)
繁琐版
CREATE USER 用户名 IDENTIFIED BY 密码
DEFAULT TABLESPACE 表空间名 (指定用户默认表空间)
QUOTA 10M ON 表空间名 (在表空间上有10MB空间的使用权限)
QUOTA 5M ON SYSTEM (在system表空间上有5MB空间的使用权限)
TEMPORARY TABLESPACE TEMP (临时表空间)
PROFILE DEFAULT (使用默认的概要文件)
PASSWORD EXPIRE (指定该用户是否过期,该用户在登录前必须修改密码)
ACCOUNT UNLOKC (指定账户的状态,是否锁定)
修改用户密码
ALTER USER 用户名 IDENTIFIED BY 密码
使用户的密码过期
ALTER USER 用户名 PASSWORD EXPIRE
修改用户的临时表空间
ALTER USER 用户名 TEMPORARY TABLESPACE 表空间名
修改用户的默认表空间
ALTER USER 用户名 DEFAULT TABLESPACE 表空间名
修改用户的表空间限额
ALTER USER 用户名 QUOTA 50M 表空间名
锁定用户
ALTER USER用户名 ACCOUNT LOCK
解锁
ALTER USER用户名 UNLOCK
查看单个用户的信息
SELECT USERNAME,PROFILE,ACCOUNT_STATUS FROMDBA_USERS WHERE USERNAME=’用户名’
查看所有用户信息
SELECT USERNAME,PROFILE,ACCOUNT_STATUS FROMDBA_USERS
查看所有用户的信息
SELECT * FROM DBA_USERS
查看用户的表空间限额
SELECT * FROM DBA_TS_QUOTAS
查看每个会话内存的使用情况
SELECT USERNAME,VALUE||’BYTES’ ”Current UGAmemory” FROM V$SESSION SESS, V$SESSTAT STAT, V$STATNAME NAME
WHERE SESS.SID=STAT.SID ANDSTAT.STATISTIC#=NAME.STATISTIC# AND NAME.NAME=’session uga memory’
找出和用户相关的会话
SELECT SID,SERIAL#,USERNAME FROM V$SESSION
终止要被删除的用户相关的会话
ALTER SYSTEM KILL SESSION ‘SID,SERIAL#’
查看用户拥有的模式对象
SELECT OWNER,OBJECT_NAME FROM DBA_OBJECTSWHERE OWNER LIKE ‘用户名’
删除用户
DROP USER 用户名
如果用户模式下存在对象,则用下面的语句
DROP USER 用户名 CASCADE
查看当前有哪些用户登录数据库
SELECT USERNAME FROM V$SESSION WHERE TYPE =‘USER’
USER PROFILES概要文件(限制用户对资源的消耗)
创建概要文件PROFILE
CREATE PROFILE 概要文件名 LIMIT
SESSIONS_PER_USER UNLIMITED 每个用户允许建立的最大会话数(无限制)
CPU_PER_SESSION UNLIMITED 每个用户的CPU时间限制,(无限制)
CPU_PER_CALL 3000 每次调用最懂可以消耗的CPU时间(百分之一秒)
CONNECT_TIME 45 每个会话能够连接到数据库的最长时间(分钟)
LOGICAL_READS_PER_SESSION DEFAULT 每个会话所能读取的数据块的最大数量
LOGICAL_READS_PER_CALL 1000 每个调用所能读取的数据块的最大数量
PRIVATE_SGA 15K 在SGA中每个会话分配的私有SQL区的最大值
COMPOSITE_LIMIT 5000000 表示一个会话所消耗资源的总额度
创建概要文件PROFILE_PASSWORD
CREATE PROFILE profile_password LIMIT
FAILED_LOGIN_ATTEMPTS 5 允许登录失败的次数
PASSWORD_LIFE_TIME 60 口令的生存时间(天)。在生存时间达到之前要修改密码
PASSWORD_REUSE_TIME 60 用户重复使用一个口令之前必须经历的时间(天)
PASSWORD_REUSE_MAX 5 用户在重用一个口令之前必须修改的次数
PASSWORD_LOCK_TIME 1/24 用户输错密码,保持锁住状态的时间
PASSWORD_GRACE_TIME 10 用户口令过期时间
修改用户的概要文件
ALTER USER 用户名 PROFILE概要文件名
删除概要文件
DROP PROFILE概要文件名 CASCADE
Oracle口令文件
语法:ORAPWD FILE =filename [ENTRIES=numusers]
[FORCE={Y|N}][IGNORECASE={Y|N}][NOSYSDBA={Y|N}]
口令文件的默认路径:ORACLE_BASE/ORACLE_HOME/DATABASE
ENTRIES: 为整数值,指定最多可以有多少个用户成为超级用户
FORCE: 指定是否强行覆盖已经存在的口令文件
IGNORECASE: Y表示口令大小写不敏感
#orapwd FILE=/绝对路径/PWDsid.ORA ENTRIES=5 FORCE=y
查看数据库中有哪些超级用户
SELECT * FROM V$PWFILE_USERS
创建角色
CREATE ROLE角色名
创建口令验证的角色
CREATE ROLE角色名 IDENTIFIED BY 密码
创建全局角色
CREATE ROLE角色名 IDENTIFIED GLOBALLY
创建外部角色
CREATE ROLE角色名 IDENTIFIED EXTERNALLY
授予角色系统权限
GRANT CREATE VIEW TO角色名
授予角色对象权限
GRANT INSERT ON 对象名名
删除角色
DROP ROLE角色名
数据泵 Oracle Data Pump
OS中创建目录,使oracle对该目录有读写权限,创建目录对象
#mkdir /u01/app/dump
#chmod –R 775 /u01/app/dump
SQL>CREATE DIRECTORY dmp_dir AS ‘/u01/app/dump’
SQL>GRANT PRAD,WRITE ON DIRECTORYdmp_dir TO 用户名
全库导出
Expdp用户名 DIRECTORY=dmp_dir DUMPFILE=fulldb.dmp FULL=y
模式导出
Expdp用户名 DIRECTORY=dmp_dir DUMPFILE=userdum.dmp SCHEMAS=用户1的对象,用户2的对象
表导出
Expdp SYSTEM DIRECTORY=dmp_dir DUMPFILE=DUMPtable.dmpTABLES=用户名.表名1, 用户名.表名2….
表空间导出
Expdp SYSTEM DIRECTORY=dmp_dir DUMPFILE=DUMPtbs.dmpTABLESPACES=表空间1,表空间2…
导入(这里不是很清楚)
Impdp 用户名 DIRECTORY=dmp_dir DUMPFILE=*.dmp
数据库的备份
Recovery Catalog Database 恢复资料数据库/恢复目录数据库
1. 创建恢复资料/目录的拥有者
创建一个表,永久表空间,用于存放恢复资料/目录
CREATE TABLESPACE 表空间名(space_for_backup) DATAFILE ‘/绝对路径/数据文件名.dbf’ SIZE 50M
创建恢复资料/目录的拥有者
CREATE USER rman IDENTIFIED BY 密码
TEMPORARY TABLESPACE temp
DEFAULT TABLESPACE 表空间名(space_for_backup)
QUOTA UNLIMITED ON表空间名(space_for_backup)
把恢复资料/目录数据库的维护和查询权限授予恢复资料/目录的拥有者rman
GRANT RECOVERY_CATALOG_OWNER TO rman
2. 创建恢复资料/目录(创建相关的表和视图)
#rman
登录到恢复资料/目录数据库
RMAN>CONNECT CATALOG rman/密码
创建恢复资料/目录
RMAN>CREATE CATALOG TABLESPACE表空间名(space_for_backup)
如果不指定表空间,恢复资料/目录将放在用户rman的默认表空间中。
3.注册目标数据库(把目标数据库的信息写到恢复资料/目录中)
#rman
登录到恢复资料/目录数据库
RMAN>CONNECT CATALOG rman/密码@网络服务名(监听名称)
登录到目标数据库
RMAN>CONNECT TRAGET sys/密码@网络服务名(监听名称)
注意:这里要使用专有服务器连接(即SERVER=DEDICATED),否则会产生ORA-19550:无法再使用调度程序时使用备份/还原功能。
注册目标数据库
RMAN>REGISTER DATABASE
查看注册是否成功
RMAN>REPORT SCHEMA
备份整个数据库
使用RMAN连接到目标数据库
RMAN>CONNECT TARGET sys
连接到恢复资料/目录数据库
RMAN>CONNECT CATALGO rman
备份整个数据库
RMAN>BACKUP DATABASE FORMAT ‘/绝对路径/BACKUP/bk0_%s_%p_%t’
FORMAT 指定备份生成的文件的路径及文件名的格式:%s指定备份集,%p指定碎片编号(Piece Number),%t指定时间戳
备份单个表空间
方法1:
查询要备份的表空间由哪些数据文件组成
SELECT TABLESPACE_NAME,FILE_NAME FROMSYS.DBA_DATA_FILES WHERE TABLESPACE_NAME=’表空间名’
把表空间置于备份模式
ALTER TABLESPACE 表空间名 BEGIN BACKUP
在OS中,用cp命令把组成表空间的数据文件复制到备份路径中
让表空间退出备份模式,回到正常状态
ALTER TABLESPACE 表空间名 END BACKUP
执行手工归档
ALTER SYSTEM ARCHIVE LOG CURRENT
方法2:
RMAN>BACKUP TABLESPACE 表空间名FORMAT ‘/绝对路径/BACKUP/bk0_%s_%p_%t’
备份单个数据文件
查询要备份的表空间由哪些数据文件组成
SELECT TABLESPACE_NAME,FILE_NAME FROMSYS.DBA_DATA_FILES WHERE TABLESPACE_NAME=’表空间名’
RMAN>BACKUP DATAFILE ‘‘/绝对路径/数据库文件/’ FORMAT ‘/绝对路径/BACKUP/bk_0_%s_%p_%t’
备份归档日志文件
方法1:
SELECT THREAD#,SEQUENCE#,NAME FROV$ARCHIVED_LOG
在OS中,用cp命令把归档日志文件从归档路径复制到备份目录
方法2:
RMAN>BACKUP ARCHIVELOG ALL FORMAT ‘/绝对路径/BACKUP/bkar_%u’
备份控制文件
方法1
SQL>ALTER DATABASE BACKUP CONTROFILE TO ‘/绝对路径/BACKUP/conf.bak’
方法2 把控制文件备份到跟踪文件中,在跟踪文件中生成创建控制文件的脚本
SQL>ALTER DATABASE BACKUP CONTROFILE TOTRACE
方法3
RMAN>BACKUP CURRENT CONTROLFILE
方法4 启动控制文件的自动备份,当使用RMAN执行备份时,RMAN自动备份控制文件(也会备份SPFILE)
RMAN>CONFIGURE CONTROLFILE AUTOBACKUP ON
备份SPFILE
RMAN>BACKUP SPFILE
也可以直接在OS下拷贝SPFILE文件到备份路径
数据库的恢复
先诊断是否有错误
1对数据库进行验证
RMAN>VALIDATE DATABASE
2使用过LIST FAILURE命令列出故障
RMAN>LIST FAILURE
3根据故障编号获得故障的详细信息
RMAN>LIST FAILURE 故障编号 DETAIL
4得到故障的修复建议
RMAN>ADVISE FAILURE
也可列出指定故障的修复建议
RMAN>ADVISE FAILURE 故障编号
5执行故障修复
RMAN>REPAIR FAILURE
6再次查看故障是否已经被修复
RMAN>LIST FAILURE
恢复整个数据库
1如果数据库在运行,则强制把数据库启动到MOUNT状态
RMAN>STARUP FORCE MOUNT
2还原数据库
RMAN>RESTORE DATABASE
3恢复数据库
RMAN>RECOVER DATABASE
4打开数据库
RMAN>ALTER DATABASE OPEN
恢复单个表空间
可以在数据库运行的情况下操作
1要是被恢复的表空间离线
RMAN>SQL ‘ALTER TABLESPACE 表空间名 OFFLINE’
2运行RUN命令,执行表空间的还原与修复
RMAN>RUN
{
#重命名数据文件
SET NEWNAME FOR DATAFILE ‘/绝对路径1/数据文件.dbf’ TO ‘/绝对路径2/数据文件.dbf’;
#还原表空间
TESTORE TABLESPACE 表空间名;
#更新控制文件
SWITCH DATAFILE ALL;
#执行表空间的恢复
RECOVER TABLESPACE 表空间名
3使表空间重新在线
RMAN>SQL ‘ALTER TABLESPACE 表空间名 ONLINE’
恢复单个数据文件
如果单个数据文件损坏,只需恢复损坏的数据文件即可。
1从备份中还原数据文件
RMAN>RESTORE datafile ‘/绝对路径/数据文件.dbf’
2执行数据文件的恢复
RMAN>RECOVER DATAFILE ‘/绝对路径/数据文件.dbf’
3使数据文件在线
RMAN>ALTER DATABASE DATAFILE ‘/绝对路径/数据文件.dbf’
恢复数据块
如果数据块冲突,不用关闭数据库,可以在线修复冲突块
1找出冲突块:
方法1
SQL>SELECT * FROM V$DATABASE_BLOCK_CORRUPTION
方法2
查询跟踪文件(Trace Files)和警报文件(Alert Log)的位置
SQL>SELECT NAME,VALUE FROM V$DIAG_INFO
在跟踪文件(Trace Files)或警报文件(Alert Log)中查找冲突块信息
2修复冲突块
RMAN>BLOCKRECOVER DATAFILE N BLOCK ADATAFILE M BLOCK B;
修复数据文件N中的坏块A及数据文件M中的坏块B
也可以使用下面的命令修复冲突块
RMAN>RECOVER CORRUPTION LIST
不过该命令会修复视图V$DATABASE_BLOCK_CORRUPTION中列出的所有冲突块。