Oracle 维护相关

一、Oracle目录结构详解:

oracle体系结构

  • 数据库实例:用来访问和使用数据库的一块进程,只存在于内存中,和java中new出来的实例对象差不多,一个数据库可以有N个实例。
  • 表空间:通过表空间存储物理表,一个数据库实例存储N个表空间,一个表空间存储N个表,可以有N个数据文件;
  • 数据文件:数据文件是数据库的物理存储单位,数据库的数据是存储在表空间中的,真正是在某一个或多个数据文件中,而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间,一旦数据文件被加入到某个表空间后,就不能直接删除这个数据文件,要删除它,只能删除它所属的表空间。
  • 用户:Oracle创建好之后,如果想要在数据库中建表,必须先给数据库创建用户,并为用户指定表空间

dbf文件用来存储数据库中的实际数据、索引以及其他对象的二进制文件

二、Oracle基础维护:

启动:

  • startup nomount 仅启动instances
  • startup mount 启动instances,连上mount数据库
  • startup normal 启动instances,连上mount数据库(推荐)缺省参数就是normal

listener:

  • Isnrctl start
  • Isnrctl stop

关闭数据库:

  • sql> shutdown  和启动一样,并且缺省也是normal

三、数据库备份:

1、冷备:关闭数据库,将datafile、controlfile、redolog、archived redolog、initora.ora等全部备份,需要恢复时将文件放回目录即可。

2、逻辑备份:

  • EXP
  • 完全:exp wootest/woo22 buffer=64000 file=/backup/full.dmp full=y  (导出整个库的内容,前提登录用户需要有权限)

buffer=64000指定导出操作中使用的内部缓冲区大小,这里是一个导出性能可调整点

full -y表示导出完全备份

  • 用户模式:exp wootest/woo22 buffer=64000 file=/back/wootest01.dmp owner=wootest

备份用户woo的所有对象到/back/wootest.dmp文件中

  • 表模式:exp wootest/woo22 buffer=64000 file=/back/score.dmp owner=wootes tables=score

备份用户wootest的表score

  • IMP
  • 完全:imp wootest/woo22 buffer=64000 file=/back/full.dmp full=y  (完全导入需要有角色IMP_FULL_DATABASE)

b、用户模式:imp wootest/woo22 buffer=64000 file=/back/wootest.dmp fromuser=wootest touser=wootestbak

备份wootest的所有对象到/back/wootest.dmp到用户woo22中,必须指定fromuser、touser参数

c、表模式:imp wootest/woo22 buffer=64000 file=/back/source.dmp fromuser=wootest touser=wootestbak tables=source

备份用户wootest的表souce导入到wootestbak中

  • 物理备份
  • % tar cvf /dev/rmt0    oracle路径下的所有文件备份到磁盘机上
  • % tar xvf /dev/rmt0 把备份磁盘带上所有文件恢复进oracle当前路径
  • % tar tvf /dev/rmt0 查看磁带上有哪些文件
  • 备份控制文件

每次数据库物理结构发生改变时,必须及时备份控制文件

SQL> alter database backup controlfile to /backup/control.ctl;

SQL> alter database backup controlfile to trace  #将控制文件的变化备份到跟踪文件中

  • 联机全备份+日志备份

设置:

Oracle两种运行方式–> 归档和不归档

SQL> connect internal

SQL> starup mount

SQL> alter database archivelog 切换为归档模式

  • 使用自动存档

在初始化文件”init*.ora”下加参数:log_archive_start=true

  • 指定存档得重做登录文件名和存放的位置,同样是在初始化文件”init*.ora”中加入 参数:

log_archive_formal=%S.arc

log_archive_dest=/arch11/arch

  • 重启数据库生效
  • archive log list查看状态,去除归档日志功能的命令是alter database noarchivelog

步骤:

  • 联机全备份:

数据库处于open状态,依次对各个表空间备份

表空间备份:

SQL-> alter tablespace system begin backup;

begin backup是对表空间冻结写入,end backup是解除冻结,因此复制datafile的过程不能太长,不然可能会导致大批量数据不能入库

备份controlfile:

SQL> alter database backup controlfile to 备份目录;

  • 日志备份

SQL> alter system archive log stop;

移去日志目录下的所有archived redolog

SQL> alter system archive log start;

  • 恢复

前提:数据库处于shutdown状态

  • 磁盘全部损坏,仅保存上次联机全备份和每天日志备份。这种情况最坏。

解决硬件故障,配置系统软件及环境

oracle用户,将全备份和日志备份转移至相应目录,根据initSid.ora中controlfile的配置,将备份控制文件复制到相应目录下

SQL> startup mount;

SQL> recover database until cancel using backup controlfile;

recover database:数据库执行恢复操作,尝试恢复到指定状态。

until cancel:恢复操作将一直持续直到用户手动取消为止。意味着数据库会持续应用归档日志,只能手动停止。

using backup controlfile:表示要使用备份的控制文件来执行数据库恢复操作。

逐个确认恢复的archived redolog,待最后一个完成时,键入cancel,数据库停止应用归档日志,恢复操作将结束,

SQL> alter database open resetlogs;  #重置重做日志文件的日志序列号和日志记录信息。

open resetlogs:表示打开数据库时要重置重做日志文件。重做日志文件记录了数据库中发生的所有修改操作。

注意:由于日志已经重置,所以应该尽快做一次联机全备份。

  • 丢失某数据文件

将此文件从上次联机全备份钟复制到其目录,并将上次联机全备份以来所有日志备份移至归档目录。

SQL> startup mount;

SQL> alter database recover datafile path/file;  path/file要恢复的数据文件的路径和文件名。

SQL> alter database open;

  • 文件损坏或丢失,又无备份

将此文件脱机,将数据exp出来,重建表空间,再imp进去。

具体实现步骤:

假设表空间user_data中的数据文件user01.dbf发生损坏而无法访问,并且没有可用的备份。

1)将损坏的数据文件脱机

alter database datafile ‘/path/to/user01.dbf’ OFFLINE DROP;

2)使用exp工具将数据导出到文件中

exp username/password@database FILE=/path/to/user_data.dmp owner=username TABLES=table1.table2,…

3)创建新的表空间;

create tablespace new_user_data;

DATAFILE ‘/new/path/to/user_data01.dbf’ size 100M;

4)使用imp工具将导出的数据导入新的表空间中,

imp username/password@database FILE=/path/to/user_data.dmp REMAP_TABLESPACE=user_data:new_users_data;

  • 注意要点
  • 获取前必须要先做冷备,留条后路
  • rollback段损坏

非常严重的问题,可以在initora.ora中写入_corrupted_rollback_segments=(rxx),启动时避开损坏的rollback段,但是不能解决根本性问题。如果数据处于archivelog,应从上一次全备份起,利用备份的日志进行恢复;如果数据库处于noarchivelog,应尽快将全部数据export出来,重建数据库,再import进去,但是所有操作前,都需要先做冷备份。

通过查询数据字典来查看损坏的rollback段名称,命令如下:

select segment_name from dba_rollback_segs where status=’NEEDS RECOVERY’;

检索出需要恢复的rollback段。

  • 数据库异常中止处理

通过手工shutdown abort操作中止数据库,不会产生多大影响

如果系统崩溃引起的中止,就用上面的恢复方法。

  • 数据库扩容
  • 增加表空间

增加回滚和临时表空间:

SQL> create rollback segment segment_name tablespace 表空间名 storage(initial 1m next 4m);

SQL> create tmpporary tablespace 临时表空间名 tempfil “表空间路径/temp.dbf” size 32M reuse autoextend on next 640K minimum extent 64k default storage (

initial 64k

next 64k

minextents 1

maxextents unlimited

pctincrease0

)

temporary;

  • REUSE: 表示如果已经存在相同名称的表空间,可以重用。
  • AUTOEXTEND ON NEXT 640K: 表示在需要时自动扩展表空间,并指定每次扩展的大小为640K。
  • MINIMUM EXTENT 64K: 指定表空间的最小扩展大小为64K。
  • DEFAULT STORAGE: 指定表空间的默认存储参数。INITIAL 64K: 指定新对象的初始大小为64K。
  • NEXT 64K: 指定在对象需要扩展时每次增加的大小为64K。
  • MINEXTENTS 1: 指定对象的最小扩展数为1。
  • MAXEXTENTS UNLIMITED: 指定对象的最大扩展数为无限。
  • PCTINCREASE 0: 指定对象不会按百分比递增。
  • TEMPORARY: 表示创建的是临时表空间,用于存储临时数据

使用完成后,删除或者offline

SQL> drop tablespace segment_name;

SQL> drop tablespace 临时表空间;

SQL> alter tablespace segment_name offline;

SQL> alter tablespace 临时表空间 offline;

  • 增加某个表空间的大小

SQL> alter tablespace 表空间 add datafile ‘表空间路径/表空间名.dbf’ size 3M;

  1. 授权

SQL> grant connect to newuser;

SQL> grant resource to newsource;

SQL> grant update on 表名to newuser;

4、中断用户与数据库的连接

SQL> select sid,serial#,username from v$session;

SQL> alter system kill session sid,serial#;

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇