暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle数据库日常维护

数据库微课 2021-04-26
924

             数据库日常维护手册

 

1.1  数据库的安装

1.1.1  操作系统的准备工作

    Oracle 数据库的基本软件安装在oradb1和oradb2上。数据文件,日志文件,控制文件通过手工建库时,指定在共享的阵列上。Oradb1与Oradb2的安装配置方法相同,以Oradb1为例说明。

1.   内核参数的修改

编辑修改/etc/system 文件

    setshmsys:shminfo_shmmax= 0x200000000

set shmsys:shminfo_shmmin=1

set shmsys:shminfo_shmmni=100

set shmsys:shminfo_shmseg=10

set semsys:seminfo_semmni=100

set semsys:seminfo_semmsl=600

set semsys:seminfo_semmns=1200

set semsys:seminfo_semopm=100

set semsys:seminfo_semvmx=32767   

    扩大共享内存和信号量参数。

2.   检查需要的操作系统patch

通过sunsolve.sun.com 上下载特定版本(Solaris 8)的patch集并安装,可以满足Oracle 的安装需要。

3.   操作系统用户/组的添加

l  groupadd dba

l  groupadd oinstall

l  useradd -c "Oracle DBA" -d/home/oracle -g oinstall -G dba

l  修改/etc/passwd文件 ,更改用户登陆shell 或其他信息

    oracle:x:102:101::/export/home/oracle:/bin/ksh

  

4.   Oracle用户环境变量的设定

在oracle 用户的初始化环境变量文件中(/export/home/oracle/.profile),增加如下内容。

ORACLE_BASE=/opt/app/oracle

ORACLE_HOME=/opt/app/oracle/product/8.1.7

ORACLE_TERM=vt100

ORACLE_OWNER=oracle

NLS_LANG="SIMPLIFIEDCHINESE_china".ZHS16CGB231280

ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data

ORACLE_SID=actdb

TMP=/tmp

PATH=$ORACLE_HOME/bin:/usr/ccs/bin:$PATH

LD_LIBRARY_PATH=/opt/oracle/app/oracle/product/8.1.7/lib:/usr/lib

export ORACLE_BASE ORACLE_HOME ORACLE_TERM ORACLE_OWNERNLS_LANG ORA_NLS33 ORACLE_SID TMP PATH LD_LIBRARY_PATH

LANG=zh

export LANG

umask 022

stty erase ^H

EDITOR=vi

export EDITOR

 

文件主要设定数据库的基本目录,数据库的SID名称和数据库的中文语言环境。增加可执行文件的路径和操作系统的语言环境设置。最后设置vi为常用编辑器。

1.1.2  数据库的安装    

1.   用root用户取消显示设置#xhost +

2.   将Oracle安装光盘插入光驱。通过df –k 察看光驱是否已mount上。

3.   以下由Oracle用户执行 $ cd cdrom/cdrom0 ,$./runInstaller。出现 ORACLE Universal Installer的安装窗口,按Next键继续。

4.   在Unix user/group对话框中填入 oracle/dba,点击Next按钮。

5.   Destination框输入将要安装oracle的目录($ORACLE_HOME),接着出现弹出窗口要求用root运行orainstRoot.sh (它创建oraInventory的安装目录) 接着选择要安装的产品ORACLE8I 8.1.7 Enterprise Edition。

6.   选择Customer安装方式,将来可以手工建库。

7.   选择安装产品对话框中,建议选择所有产品。

8.   点击确认安装的按钮,安装正式开始。

9.   安装成功100%后又回到开始的选项菜单,建议察看安装日志。

10.  由于使用双机做HA,因此数据库的基本软件需要安装在两台服务器上,而数据库在阵列上创建。数据库基本软件在两台服务器安装完成后。通过dbassist手工建库。指定数据文件,控制文件,日志文件的路径为共享阵列。

11.  建库完成后通过oracle用户执行svrmgrl,启动数据库。 并检查数据库基本信息。

$svrmgrl

SVRMGR>connect internal

SVRMGR>startup

SVRMGR>select * fromv$version;

SVRMGR>select * fromv$database;

执行 $ lsnrctl start 启动监听程序。

1.1.3  数据库patch 安装

1.   Patch 下载:Oracle 数据库的patch 从Oracle的metalink网站下载,登录成功后,在patch页面中的Product Family下拉框中选择”Oracle Databse”,Product 下拉框中选择”RDBMS Server”;Release 下拉框中 选择”Oracle 8.1.7.4”;Platform 下拉框中选择”Sun Solaris OS( SPARC) 64-bit”,Language下拉框中选择”American English (US)” ,Limit Search to下拉框中选择”Latest Product Patches or Minipacks”,点击Submit提交。在随后出现的页面中点击Download下载patch。

2.   Patch 安装:Patch 下载后首先需要解压缩, 安装与数据库安装方法类似,启动runInstaller安装程序,选择解压缩完成后patch目录下的product文件进行安装。特别注意patch安装时,数据库必须处于正常关闭状态。

3.   安装完成后检查:select * from v$version; 检查各个产品的版本号是否从8.1.7.0升级成为8.1.7.4。

1.2  现场数据库工作方法

1.2.1  现场表空间的规划

ACT01,ACTX01是 enus用户的数据表空间以及索引表空间。

ACT02,ACTX02是 page,race用户的数据表空间以及索引表空间。

ACT03,ACT04,ACTX03,ACTX04是rap 用户的数据表空间以及索引表空间。

1.2.2  现场数据文件的添加

1)  数据库磁盘规划

表空间名称

磁盘数据文件规划

ACT01

/disk/data1

ACTX01

/disk/index1

ACT02

/disk/data2

ACTX02

/disk/index2

ACT03

/disk/data3   disk/data4

ACTX03

/disk/index3   disk/index4

ACT04

/disk/data4 

ACTX04

/disk/index4

2)  添加数据文件

A.  添加规则

现场建议每次出帐前,为表空间使用率接近80%的表空间添加数据文件。原则上现场不要存在超过80%的表空间。

目前建议每次添加的数据文件大小为4096M.

B.  添加前,检查表空间原有数据文件(保证数据文件命名的连续性)

例如:准备为ACTX04添加表空间

select file_name from dba_data_files wheretablespace_name=’ACTX04’

/disk/index4/actx04_01.dbf                                                     

/disk/index4/actx04_02.dbf                                                      

/disk/index4/actx04_03.dbf                                                     

/disk/index4/actx04_04.dbf

C.  添加数据文件

现场添加数据文件,目前原则上大小为4096M.

以为actx04添加表空间为例

   alter tablespace actx04 add datafile ‘/disk/index4/actx04_05.dbf’size 4096M;

1.2.3  现场索引的添加

1)     索引添加规则

 enus用户索引: ACTX01表空间

 rap用户索引: ACTX03,ACTX04表空间

 blues用户索引:ACTX02表空间

 race用户索引: ACTX02表空间

2)     常规表索引的建立

CREATEINDEX I_ACCOUNT_FEE_PHONE ON

  ACCOUNT_T(FEE_PHONE)

  TABLESPACE ACTX03 nologging;

3)       分区表索引的建立

u  注意事项:现场针对分区建立的索引必须都是local类型的索引。

u  建立脚本:(针对enus的time_t分区表为例)

CREATE INDEXI_TIME__ACCTIDNEW ON TIME_T(ACCOUNT_ID) LOCAL TABLESPACE ACTX01 nologging;

 

4)       察看索引对应的表空间

user_indexes;

5)       创建索引的用途以及维护要点

n  考虑用nologging创建索引

可以在create index语句中指定nologging来创建索引并产生最少的重作日志记录.

注意: 因为用nologging 创建索引时不存档,建议现场添加索引在凌晨左右进行,便于创建索引后,数据库尽快完成备份.

nologging 创建索引有如下好处:

a)        节省了重作日志文件的空间

b)       缩短了创建索引的时间

c)        改善了并行创建大索引时的性能

 

 

 

1.2.4  数据库用户的建立

注:以建立rap用户为例

create user rap identified by rap;

grant resource, connect to rap;

alter user rap default tablespace act03;

alter user rap temporary tablespace temp;

1.2.5  数据库数据的导入方法(探讨,针对测试环境数据的搭建)

 

1)  exp要进行测试的用户数据

2)  删除原先表数据(truncate)

select  'truncate table '||table_name||' ;' from tabs;

形成文件,批truncate表

3)  删除表

select  'drop table '||table_name||' cascadeconstraints ;' from tabs;

形成文件,批删除

4)     导入数据

imp rap/rap parfile=li.txt

li.txt文件的内容

buffer=409600

file=expdat_rap_0630.dmp

IGNORE=y

grants=y 

indexes=y

rows=y

commit=y

CONSTRAINTS=y

log=likqrap.log

1.2.6  把数据库设置成为非归档模式的方法(针对traffic上面的数据库)

 startup mount;

 alter database noarchivelog;

 alter database open;

1.2.7  检查表的创建模式

select degree from user_tables;

1.3  数据库优化及主要参数调整

1.3.1  调整原则

Oracle数据库在启动时会读取命名规则为init<sid>.ora的初始化参数文件。这个配置文件中的各个参数设定对整个Oracle数据库性能起决定作用,先简单介绍各个参数的含义,然后给出建议配置。除特殊说明外,介绍参数的更改都需进行数据库的重启操作。根据数据库系统规模,Oracle提供小,中,大(small,medium,large)三个建议建议配置档,配置时做为参考。通过在sqlplus中输入 SQL>show parameterparameter_name显示参数名称和相应的值。

l  db_block_size: 实际值:4096。数据块大小,数据存储的最小单位,这个参数在Oracle9i以前各个版本中,数据库创建完成后是不可改变的。可选范围是2K,4K,8K,16k,32k单位是byte。应用系统中,部分数据表字段较多,db_block_size设定偏小造成记录不能在单一数据块中存储,因此访问一条用户记录不能在一次物理I/O操作中完成,需要多次I/O,导致性能下降;另外较多的 varchar2类型字段和数据更新可能造成行链接和行迁移,除设定pctfree较大外,db_block_size也要设定大一些。,创建数据库时指定。

l  db_block_buffers: 实际值:1000000。数据高速块的多少,存放从硬盘中读出的数据块。db_block_buffers决定内存中可存放的大小为db_block_size的Oracle数据块的数量。应用程序第一次访问数据时从硬盘中读取,然后数据存储在内存中,直到数据长时间不被访问,同时内存中不能容纳更多数据时,数据被写回硬盘,下次需要访问时,再从硬盘中读取。该参数越大,Oracle在内存中找到所需数据的可能性就越大。相同数据内存读取速度要比硬盘快几十倍,因此响应速度也会大大提高。db_block_size与db_block_buffers乘积确定Oracle数据库所占内存的90%左右。 如果服务器专用运行数据库,建议两个参数的乘积占服务器物理内存的40%,通过对数据缓存的命中率进行监控后,做进一步调整。

l  shared_pool_size实际值:500000000。内存中存放sql语句访问路径,相关访问权限,表结构信息的位置,单位是字节。 建议在内存允许的情况下配置的大一些,但通常不超过500m。通过sql语句监控生产机缓存命中率后进行相应调整。

l  sort_area_size 实际值:4000000。可在内存中进行排序的最大字节数。应用程序向数据库发出类似orderby,groupby 或创建索引时,需要进行排序操作。排序在内存中完成的速度同样快于硬盘中速度。sort_area_size越大,排序完成在内存中的可能也越大。通过对动态视图的监控进行进一步的调整。

l  log_buffer:实际值:8388608。日志缓存大小,对于数据库的dml/ddl 等语句首先写入log_buffer,然后写入日志文件。建议初始配置为512k,如果日志缓存等待明显,再加大,一般不超过为1M。

l  processes实际值:500。同时访问Oracle数据库的进程数,包括后台进程(dbwr,lgwr,chpt)和Enus,Cnus,Rap 各个模块建立的到数据库的长连接数,设定大一点不会造成负面影响,如果偏小则会造成不能进行数据库连接的错误。

l  dml_locks: 实际值:988。它表示任何时间所有用户在所有表中放置锁定的最大数量。缺省值是事务最大数量的四倍。同样可以设定较大一点,不会有负面影响。

l  open_cursors: 实际值:2500。用户可以同时打开的游标数。设定大一点不会造成负面影响,如果偏小则会出现不能打开游表的错误。

l  db_files: 实际值:200。数据库数据文件的数目。

l  rollback_segments实际值:ACTROLL00~ACTROLL29,共30个回滚段。回滚段的名称,用户自己创建完回滚段后将名称添加在此处。在OLTP环境下,回滚段的数目为最大并发交易数的1/3~1/4。

l  db_file_multiblock_read_count实际值:32。数据库一次从硬盘中读取的数据块的数目。设定DB_FILE_MULTIBLOCK_READ_COUNT可以在进行全表扫描时减少I/O的次数。

l  log_checkpoints_to_alert实际值:true。设置成true的时候,每次检查点的信息写入alert.log文件。

l  log_archive_start/ log_archive_dest_1实际值:true/ disk/archive/arch决定数据库采用归档方式,指定归档日志存放的路径。

l  log_archive_max_processes实际值:1,确定后台归档进程(ArcN)的启动数目。目前100M日志文件在交易高峰期,每8分钟就切换一次。建议将此值扩大。

1.3.2  现场数据库参数设置-配置文件initactdb.ora

db_name ="actdb"

instance_name =actdb

service_names =actdb

control_files =("/disk/data4/system/control01.ctl","/disk/data3/system/control02.ctl", "/disk/data

2/system/control03.ctl")

open_cursors = 2500

max_enabled_roles =20              

db_block_buffers =1000000

shared_pool_size =367001600

large_pool_size =12582912

java_pool_size =10485760

db_file_multiblock_read_count= 32 

log_checkpoint_interval= 819200

log_checkpoint_timeout= 4800

cpu_count = 8

processes = 500

log_buffer = 1048576

log_archive_start =true

log_archive_dest_1 ="location=/disk/archive/arch"

log_archive_format =arch_%t_%s.arc

 

log_checkpoints_to_alert= TRUE

 

rollback_segments =(ACTROLL00 ACTROLL01 ACTROLL02 ACTROLL03 ACTROLL04 ACTROLL05 ACTROLL06ACTROLL07

 ACTROLL08 ACTROLL09 ACTROLL10 ACTROLL11ACTROLL12 ACTROLL13 ACTROLL14 ACTROLL15 ACTROLL16 ACTROLL17

 ACTROLL18 ACTROLL19 ACTROLL20 ACTROLL21ACTROLL22 ACTROLL23 ACTROLL24 ACTROLL25 ACTROLL26 ACTROLL27

 ACTROLL28 ACTROLL29)

background_dump_dest= opt/app/oracle/admin/actdb/bdump

core_dump_dest =/opt/app/oracle/admin/actdb/cdump

user_dump_dest =/opt/app/oracle/admin/actdb/udump

db_block_size = 4096

remote_login_passwordfile= exclusive

os_authent_prefix =""

job_queue_processes= 4

job_queue_interval =60

distributed_transactions= 10

open_links = 4

optimizer_mode =CHOOSE

dml_locks = 988

compatible = "8.1.0"

sort_area_size =4000000

sort_area_retained_size= 4000000

#db_writer_processes= 4

#db_block_lru_latches= 36  #cpu*2*3

 

 

1.3.3  数据库用户信息

            用户是数据库的使用和访问者。同一用户名(通常也就是schema名称)下的表共同完成相同的功能,如:在我们系统中的Enus用户下的表完成接入功能,Rap用户下的表完成计费,帐务功能。

l 用户名称,临时/默认表空间。用户创建日期。检查是否有用户的默认或临时表空间为system 表空间。

        SQL>col username format a12;

        SQL>col "Default TBS"format a12

        SQL>col "Temporary TBS"format a12

        SQL> col "CreateDate"format a12

        SQL>select   substr(username,1,12) UserName,      

        substr(DEFAULT_TABLESPACE,1,12)"Default TBS",

        substr(TEMPORARY_TABLESPACE,1,12)"Temporary TBS",

        to_char(CREATED,’yyyy/mm/dd’) "CreateDate"

from sys.dba_users order by username;

    

USERNAME    Default TBS  Temporary TBCreateDate

------------ ------------ --------------------------------

DBSNMP      SYSTEM       SYSTEM       2002/08/17

ENUS          ACT01       TEMP         2002/08/17

OUTLN       SYSTEM       SYSTEM       2002/07/01

PAGE          ACT02       TEMP         2002/07/04

RACE          ACT02       SYSTEM       2003/05/06

RAP           ACT03       TEMP         2002/08/17

RAP00         RAP00       TEMP         2002/10/22

RAPTEST     ACTTEST      TEMP         2002/09/10

SPOTLIGHT   USERS        TEMP         2003/04/24

SSPOT         USERS       TEMP         2002/07/01

SYS           SYSTEM      TEMP         2002/07/01

      SYSTEM      TOOLS        TEMP         2002/07/01

TRACESVR   SYSTEM       SYSTEM       2002/07/01

l 察看数据库用户的权限/角色。创建用户时,会给用户用户一些权限/角色,使用户可以进行相应的操作。

SQL>col grantee format a20;

SQL>select GRANTEE , GRANTED_ROLE , ADMIN_OPTION fromdba_role_privs where grantee in (‘ENUS’,’RAP’,’RACE’);

GRANTEE             GRANTED_ROLE      ADMIN_

--------------------         --------------------         -----------

ENUS                CONNECT              NO

ENUS                RESOURCE             NO

RACE                CONNECT              NO

RACE                RESOURCE             NO

RAP                 CONNECT              NO

RAP                 RESOURCE             NO

我们可以看到enus,rap,race三个用户都只有connect,resource权限,同时他们不能把connect,resource权限赋予其他用户。

       

1.4  数据库的备份/恢复

1.4.1  备份/恢复软件基本介绍

此次河南宽带网计费项目Oracle数据库使用的备份/恢复软件是Veritas公司的Netbackup。Netbackup 建立在Oracle自身提供的备份工具Rman之上。同时有Rman的功能,但又克服Rman 操作复杂的缺点。Netbackup是一个功能强大的企业级数据备份管理软件,它为Windows NT、UNIX和NetWare环境提供了完整的数据保护机制,具有保护从工作组到企业级服务器的所有的数据的能力. NetBackup的数据中心级介质管理使企业具有了包括带库共享在内的管理介质的各方面能力,并且NetBackup的Java界面提供了对所有备份和恢复操作的完整的实时和历史情况分析。该套装软件共由NetBackup Client,NetBackupServer,Catalog DB, MediaManager组成。

 

1.4.2  软件功能分布介绍

正常情况下,oradb1运行数据库 netbackup client,oradb2运行rap、netbackup server ,同时oradb2通过VCS与oradb1实现数据库的HA。

 

服务器/ip

安装软件

完成功能

Oradb1/

Netbackup Client

NetBackup Server的一个Client。Client不管理任何磁带库设备。需要=进行备份时,它仅仅提供Oracle需要备份的数据给Server。Server和Client之间的通过TCP/IP的sockets通讯。

 

Oradb2/

 

Netbackup Server(Master Server,  Media Server)

Media Manager

Catalog DB

Master Server管理制定全网的备份策略,控制所有的备份作业。

Media Server只连接存储设备,提供数据分流。

Media Manage:针对磁带设备。在备份或归档时调度磁带,并控制上带/卸带动作。

Catalog DB:由Rman控制,记录对数据库进行的备份恢复操作。

 

STK L20 磁带库设备


STK L20的机械手与主备份服务器(oradb2)直接相连,所有的光纤磁带机直接连接到光线交换机上,所以每台备份服务器都能看到所有的光纤磁带机

1.4.3  系统备份策略/实施

备份策略定义一台或几台服务器的备份方法。它包括哪些服务器需要备份、备份哪些目录或文件、在什么时间备份、采用什么方式进行备份等。配置NBU主要指定义备份策略。一个备份策略由四部分组成:

l General Attributes:策略的总体属性,包括策略类型,状态,使用的Storage Unit和Volume Pool。

l  Client List :需要备份的服务器,如Oracle Server: Oradb1。

l File List (文件列表):定义需要备份的文件列表。

l  Schedules(备份日程表):定义进行各种备份的时间。

 

 









Class

类型

Schedule

Type

开始时间

要备份的主机

保存期限

备份文件

oraclewholebackup

oracle

Days (除每月21号)

Auto_full

3:00:00--6:00

Orabk

1月

/opt/openv/netbackup/scripts/hot_database_backup.sh

oraclearchivebackup

oracle

每月21号

Auto_Full


  Orabk

1月

/opt/openv/netbackup/scripts/hot_archive_backup.sh

 

目前对数据库的备份分成两类,一类是数据库的全备份,第二类是对生成的归档日志的备份。备份时netbackup分别调用相应的” /opt/openv/netbackup/scripts/hot_database_backup.sh”和”/opt/openv/netbackup/scripts/hot_archive_backup.sh”两个脚本。目前每天早上3点(除21日)进行全备份到带库,保留一个月。每月的21日进行归档日志的备份。

1.4.4  备份脚本的内容

1.4.4.1全备份脚本

位于: /opt/openv/netbackup/scripts/hot_database_backup.sh

 

#!/bin/sh

 

CUSER=`id |cut-d"(" -f2 | cut -d ")" -f1`

 

RMAN_LOG_FILE=${0}.out

 

 

#then

#       rm -f "$RMAN_LOG_FILE"

#fi

 

 

echo >>$RMAN_LOG_FILE

chmod 666 $RMAN_LOG_FILE

 

 

echo Script $0 >>$RMAN_LOG_FILE

echo ==== started on`date` ==== >> $RMAN_LOG_FILE

echo >>$RMAN_LOG_FILE

 

ORACLE_HOME=/opt/app/oracle/product/8.1.7

export ORACLE_HOME

ORACLE_SID=actdb

export ORACLE_SID

ORACLE_USER=oracle

TARGET_CONNECT_STR=system/hnadm

RMAN=$ORACLE_HOME/bin/rman

echo >>$RMAN_LOG_FILE

echo   "RMAN: $RMAN" >>$RMAN_LOG_FILE

echo   "ORACLE_SID: $ORACLE_SID" >>$RMAN_LOG_FILE

echo   "ORACLE_USER: $ORACLE_USER">> $RMAN_LOG_FILE

echo   "ORACLE_HOME: $ORACLE_HOME">> $RMAN_LOG_FILE

echo  >> $RMAN_LOG_FILE

echo   "NB_ORA_FULL: $NB_ORA_FULL">> $RMAN_LOG_FILE

echo   "NB_ORA_INCR: $NB_ORA_INCR">> $RMAN_LOG_FILE

echo   "NB_ORA_CINC: $NB_ORA_CINC">> $RMAN_LOG_FILE

echo   "NB_ORA_SERV: $NB_ORA_SERV">> $RMAN_LOG_FILE

echo   "NB_ORA_POLICY: $NB_ORA_POLICY">> $RMAN_LOG_FILE

echo >>$RMAN_LOG_FILE

 

if ["$NB_ORA_FULL" = "1" ]

then

        echo "Full backup requested">> $RMAN_LOG_FILE

        BACKUP_TYPE="INCREMENTALLEVEL=0"

 

elif ["$NB_ORA_INCR" = "1" ]

then

        echo "Differential incrementalbackup requested" >> $RMAN_LOG_FILE

        BACKUP_TYPE="INCREMENTALLEVEL=1"

 

elif ["$NB_ORA_CINC" = "1" ]

then

        echo "Cumulative incrementalbackup requested" >> $RMAN_LOG_FILE

        BACKUP_TYPE="INCREMENTAL LEVEL=1CUMULATIVE"

 

elif ["$BACKUP_TYPE" = "" ]

then

        echo "Default - Full backuprequested" >> $RMAN_LOG_FILE

        BACKUP_TYPE="INCREMENTALLEVEL=0"

fi

 

 

CMD_STR="

ORACLE_HOME=$ORACLE_HOME

export ORACLE_HOME

ORACLE_SID=$ORACLE_SID

export ORACLE_SID

$RMAN target$TARGET_CONNECT_STR catalog rman/rman@catadb msglog $RMAN_LOG_FILE append<< EOF

RUN {

ALLOCATE CHANNEL ch00TYPE 'SBT_TAPE';

ALLOCATE CHANNEL ch01TYPE 'SBT_TAPE';

BACKUP

    $BACKUP_TYPE

    SKIP INACCESSIBLE

    TAG hot_db_bk_level0

    FILESPERSET 5

    # recommended format

    FORMAT 'bk_%s_%p_%t'

    DATABASE;

    sql 'alter system archive log current';

RELEASE CHANNEL ch00;

RELEASE CHANNEL ch01;

# backup all archive logs

ALLOCATE CHANNEL ch00TYPE 'SBT_TAPE';

ALLOCATE CHANNEL ch01TYPE 'SBT_TAPE';

BACKUP

   filesperset 20

   FORMAT 'al_%s_%p_%t'

   ARCHIVELOG ALL DELETE INPUT;

RELEASE CHANNEL ch00;

RELEASE CHANNEL ch01;

 

ALLOCATE CHANNEL ch00TYPE 'SBT_TAPE';

BACKUP

    # recommended format

    FORMAT 'cntrl_%s_%p_%t'

    CURRENT CONTROLFILE;

RELEASE CHANNEL ch00;

}

EOF

"

# Initiate the commandstring

 

if [ "$CUSER" ="root" ]

then

    su - $ORACLE_USER -c "$CMD_STR">> $RMAN_LOG_FILE

    RSTAT=$?

else

    /usr/bin/sh -c "$CMD_STR">> $RMAN_LOG_FILE

    RSTAT=$?

fi

 

# ---------------------------------------------------------------------------

# Log the completion ofthis script.

#---------------------------------------------------------------------------

 

if [ "$RSTAT" ="0" ]

then

    LOGMSG="ended successfully"

else

    LOGMSG="ended in error"

fi

 

echo >>$RMAN_LOG_FILE

echo Script $0 >>$RMAN_LOG_FILE

echo ==== $LOGMSG on`date` ==== >> $RMAN_LOG_FILE

echo >>$RMAN_LOG_FILE

 

exit$RSTAT

1.4.4.2增量备份脚本

位于: /opt/openv/netbackup/scripts/hot_archive_backup.sh

内容:

#!/bin/sh

 

CUSER=`id |cut-d"(" -f2 | cut -d ")" -f1`

 

RMAN_LOG_FILE=${0}.out

 

 

#then

#       rm -f "$RMAN_LOG_FILE"

#fi

 

 

echo >>$RMAN_LOG_FILE

chmod 666 $RMAN_LOG_FILE

 

 

echo Script $0 >>$RMAN_LOG_FILE

echo ==== started on`date` ==== >> $RMAN_LOG_FILE

echo >>$RMAN_LOG_FILE

 

ORACLE_HOME=/opt/app/oracle/product/8.1.7

export ORACLE_HOME

ORACLE_SID=actdb

export ORACLE_SID

ORACLE_USER=oracle

TARGET_CONNECT_STR=system/hnadm

RMAN=$ORACLE_HOME/bin/rman

echo >>$RMAN_LOG_FILE

echo   "RMAN: $RMAN" >>$RMAN_LOG_FILE

echo   "ORACLE_SID: $ORACLE_SID" >>$RMAN_LOG_FILE

echo   "ORACLE_USER: $ORACLE_USER">> $RMAN_LOG_FILE

echo   "ORACLE_HOME: $ORACLE_HOME">> $RMAN_LOG_FILE

echo  >> $RMAN_LOG_FILE

echo   "NB_ORA_FULL: $NB_ORA_FULL">> $RMAN_LOG_FILE

echo   "NB_ORA_INCR: $NB_ORA_INCR">> $RMAN_LOG_FILE

echo   "NB_ORA_CINC: $NB_ORA_CINC">> $RMAN_LOG_FILE

echo   "NB_ORA_SERV: $NB_ORA_SERV">> $RMAN_LOG_FILE

echo   "NB_ORA_POLICY: $NB_ORA_POLICY">> $RMAN_LOG_FILE

echo >>$RMAN_LOG_FILE

 

if ["$NB_ORA_FULL" = "1" ]

then

        echo "Full backup requested">> $RMAN_LOG_FILE

        BACKUP_TYPE="INCREMENTALLEVEL=0"

 

elif ["$NB_ORA_INCR" = "1" ]

then

        echo "Differential incrementalbackup requested" >> $RMAN_LOG_FILE

        BACKUP_TYPE="INCREMENTALLEVEL=1"

 

elif ["$NB_ORA_CINC" = "1" ]

then

        echo "Cumulative incrementalbackup requested" >> $RMAN_LOG_FILE

        BACKUP_TYPE="INCREMENTAL LEVEL=1CUMULATIVE"

 

elif ["$BACKUP_TYPE" = "" ]

then

        echo "Default - Full backuprequested" >> $RMAN_LOG_FILE

        BACKUP_TYPE="INCREMENTALLEVEL=0"

fi

 

 

CMD_STR="

ORACLE_HOME=$ORACLE_HOME

export ORACLE_HOME

ORACLE_SID=$ORACLE_SID

export ORACLE_SID

$RMAN target$TARGET_CONNECT_STR catalog rman/rman@catadb msglog $RMAN_LOG_FILE append<< EOF

RUN {

# backup all archive logs

ALLOCATE CHANNEL ch00TYPE 'SBT_TAPE';

ALLOCATE CHANNEL ch01TYPE 'SBT_TAPE';

sql 'alter system archivelog current';

BACKUP

   filesperset 20

   FORMAT 'al_%s_%p_%t'

   ARCHIVELOG ALL DELETE INPUT;

RELEASE CHANNEL ch00;

RELEASE CHANNEL ch01;

 

ALLOCATE CHANNEL ch00TYPE 'SBT_TAPE';

BACKUP

    # recommended format

    FORMAT 'cntrl_%s_%p_%t'

    CURRENT CONTROLFILE;

RELEASE CHANNEL ch00;

}

EOF

"

# Initiate the commandstring

 

if [ "$CUSER" ="root" ]

then

    su - $ORACLE_USER -c "$CMD_STR">> $RMAN_LOG_FILE

    RSTAT=$?

else

    /usr/bin/sh -c "$CMD_STR">> $RMAN_LOG_FILE

    RSTAT=$?

fi

 

#---------------------------------------------------------------------------

# Log the completion ofthis script.

#---------------------------------------------------------------------------

 

if [ "$RSTAT" ="0" ]

then

    LOGMSG="ended successfully"

else

    LOGMSG="ended in error"

fi

 

echo >>$RMAN_LOG_FILE

echo Script $0 >>$RMAN_LOG_FILE

echo ==== $LOGMSG on`date` ==== >> $RMAN_LOG_FILE

echo >>$RMAN_LOG_FILE

 

exit $RSTAT

1.4.5  数据库备份完成情况检查

1)  检查备份输出文件

脚本位置:orabd1: /opt/openv/netbackup/scripts/hot_database_backup.sh.out

检查:tail –f /opt/openv/netbackup/scripts/hot_database_backup.sh.out

正确结果:Script /opt/openv/netbackup/scripts/hot_database_backup.sh

==== endedsuccessfully on Thu Jul 3 07:30:27 CST 2003 ====

2)   通过netbackup命令行方式检查

oradb2:bpadm

status=0表示备份完成正常。

1.4.6  数据库的恢复

   下面只考虑数据库所有数据文件(包括控制文件)均损坏这一最复杂的情况下的恢复。

1)  备份现有的数据库数据文件(如果还有的话)

2)  恢复控制文件

将数据库置于nomount状态

在svrmgrl下,执行:

 startup nomount

在数据库所在的服务器上以oracle身份执行

rman target /catalog rman/rman@catadb cmdfilerestorecontrol

 

其中restorecontrol的内容如下:

run {

# exec:rman target / catalog rman/rman@catadbcmdfile restorecontrol

#set until time ='';

allocate channel ch1type 'sbt_tape';

restore controlfile;

alter databasemount;

}

 

3)  执行数据库的全恢复:

 

$RMAN target /catalog rman/rman@catadb cmdfile restorewho

其中restorewho为下:

RUN {

ALLOCATE CHANNELch00 TYPE 'SBT_TAPE';

ALLOCATE CHANNELch01 TYPE 'SBT_TAPE';

RESTORE

    DATABASE;

#RECOVER DATABASE;

RELEASE CHANNELch00;

RELEASE CHANNELch01;

}

4)  恢复archive log

然后根据控制文件的信息:

  select * from v$log(v$logfile)

来确定archive log的sequence,恢复archive log:

%rman target /rcvcat rman/rman@catadb cmdfile recarchive

# cmd line:rmantarget / rcvcat rman/rman@catadb cmdfile recarchive

run {

     allocate channel d1 TYPE 'SBT_TAPE';

     set archivelog destination to'/disk/archive/arch';

     restore archivelog from logseq 6 untillogseq 10;

     release channel d1;

}

 

5)  最后执行oracle的recover,在svrmgrl下:

recover databaseusing backup controlfile until cancel

当执行到合适的archivelog时,键入cancel

alter database openresetlogs

 

注:如果盘阵上的控制文件、redolog均未丢失,也可是使用当前的控制文件将数据库恢复当当前,这时候recover的时候只要

recover database就可以了,不要使用recover database using backupcontrolfile until console.

 

6)  打开数据库后,reset database

   rman target / catalog rman/rman@catadb

   rman>reset database

然后对数据库进行全备份。

 

1.4.7  针对catalog数据的备份

实现方法:每天上午7:50catalog数据库rman用户exp出来.

脚本部署:oradb2服务器

50 7 * * * /export/home/oracle/catalog/expuser.sh>/export/home/oracle/catalog/logfile/log.log2>&1

脚本expuser.sh的内容:

#!/bin/ksh

ORACLE_BASE=/opt/app/oracle

ORACLE_HOME=/opt/app/oracle/product/8.1.7

ORACLE_TERM=vt100

 

ORACLE_OWNER=oracle

NLS_LANG="american_america.utf8"

ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data

ORACLE_SID=catadb

TMP=/tmp

PATH=$ORACLE_HOME/bin:/usr/ccs/bin:$PATH

LD_LIBRARY_PATH=/opt/oracle/app/oracle/product/8.1.7/lib:/usr/lib

 

export ORACLE_BASE ORACLE_HOME ORACLE_TERMORACLE_OWNER NLS_LANG ORA_NLS33 ORACLE_SID TMP PATH LD_LI

BRAR

Y_PATH

 

FILEDIR=/export/home/oracle/catalog

logfile=$FILEDIR/logfile/`date'+%y%m%d%H%M%S'`.log

dumpfile=$FILEDIR/dumpfile/`date'+%y%m%d%H%M%S'`.dmp

exp rman/rman@catadb buffer=4096000OWNER=rman GRANTS=y ROWS=y COMPRESS=y file=$dumpfile log=$logfile

1.4.8  使用Rman备份数据库的另外一种方法(using controlfile)

1.4.8.1全备份脚本

1)       脚本:wholeback.sh

#!/bin/sh

 

OUTF=${0}.out

 

#---------------------------------------------------------------------------

# You may want to delete the output file sothat backup information does

# not accumulate.  If not, delete the following lines.

#---------------------------------------------------------------------------

 

 

{ # output block

 

echo "`date` ----------------Beginningof Script------------\n"

echo "Script name: $0"

 

ORACLE_HOME=/opt/app/oracle/product/8.1.7

export ORACLE_HOME

 

ORACLE_SID=actdb

export ORACLE_SID

 

 

ORACLE_USER=oracle

 

 

RMAN=rman

 

CMDFILE=/opt/app/oracle/rman/wholeback.rcv

 

#---------------------------------------------------------------------------

# Print out the value of the variables setby this script.

#---------------------------------------------------------------------------

 

#      must be set and exported within the switch user (su) command.

#---------------------------------------------------------------------------

 

echo

echo "% ${ORACLE_HOME}/bin/$RMANnocatalog cmdfile '$CMDFILE'\n"

echo

#touch /disk/data2/backup/test.file

#su - $ORACLE_USER -c "

ORACLE_SID=$ORACLE_SID

export ORACLE_SID

${ORACLE_HOME}/bin/$RMAN nocatalog cmdfile"$CMDFILE"

#"

RETURN_STATUS=$?

 

echo

echo "`date` ----------------End ofScript------------------\n"

echo

echo "exit $RETURN_STATUS"

#exit $RETURN_STATUS

 

echo "Backup control file:alterdatabase backup controlfile to ......\n"

tm=`date '+%y%m%d%H%M%S'`

filename=control.$tm

svrmgrl <<EOF

connect internal

alter database backup controlfile to'/disk/data2/backup/$filename';

exit

EOF

echo "\nBackup controlfilesuccess!\n"

 

exit $RETURN_STATUS

 

} >> $OUTF

2)       脚本wholeback.rcv

connect target 'system/hnadm'

 

 run{

 allocate channel d1 type disk;

 backup

         filesperset 5

         database include current controlfile

 format '/disk/data2/backup/%d_%s_%p';

  backup current controlfile tag = 'database backup';

  sql'ALTER SYSTEM ARCHIVE LOG CURRENT';

 backup

 format '/disk/data2/backup/arch/arch_%s_%p_%t'

 archivelog all delete input;  #

  release channel d1;

}

1.4.8.2增量备份脚本

1)  arcbak.sh脚本

#!/bin/sh

 

OUTF=${0}.out

 

#---------------------------------------------------------------------------

# You may want to delete the output file sothat backup information does

# not accumulate.  If not, delete the following lines.

#---------------------------------------------------------------------------

 

 

{ # output block

 

echo "`date` ----------------Beginningof Script------------\n"

echo "Script name: $0"

 

ORACLE_HOME=/opt/app/oracle/product/8.1.7

export ORACLE_HOME

 

ORACLE_SID=actdb

export ORACLE_SID

#touch /disk/data2/backup/newfile

 

ORACLE_USER=oracle

 

 

RMAN=rman

 

CMDFILE=/opt/app/oracle/rman/arcbak.rcv

 

#---------------------------------------------------------------------------

# Print out the value of the variables setby this script.

#---------------------------------------------------------------------------

 

#      must be set and exported within the switch user (su) command.

#---------------------------------------------------------------------------

 

echo

echo "% ${ORACLE_HOME}/bin/$RMANnocatalog cmdfile '$CMDFILE'\n"

echo

 

#su - $ORACLE_USER -c "

ORACLE_SID=$ORACLE_SID

export ORACLE_SID

#svrmgrl <<EOF

#connect internal

#alter system switch logfile;

#exit

#EOF

${ORACLE_HOME}/bin/$RMAN nocatalog cmdfile"$CMDFILE"

#"

RETURN_STATUS=$?

 

echo

echo "`date` ----------------End ofScript------------------\n"

echo

echo "exit $RETURN_STATUS"

#exit $RETURN_STATUS

 

echo "Backup control file:alterdatabase backup controlfile to ......\n"

tm=`date '+%y%m%d%H%M%S'`

filename=control.$tm

svrmgrl <<EOF

connect internal

alter database backup controlfile to'/disk/data2/backup/$filename';

exit

EOF

echo "Backup controlfilesuccess!\n"

exit $RETURN_STATUS

 

} >> $OUTF

2)       arcbak.rcv脚本内容

connect target 'system/hnadm'

 

run {

 allocate channel d1 type disk;

  sql'alter system archive log current';

 backup

 format '/disk/data2/backup/arch/arch_%s_%p_%t'

  (archivelog all delete input); 

 release channel d1;

}

 

 

1.5  数据库的监控/维护

1.5.1  推荐使用的监控方法

       Statspack 的介绍:Statspack 是Oracle公司针对Oracle Enterprise Edition 8.1.6及以上版本推出的性能监控工具包。用于替代原有的UTLBSTAT/UTLESTAT。比UTLBSTAT/UTLESTAT能够收集更多的数据,包括耗资源多的SQL。同时预先计算了许多对性能调优很有用的比值(ratios)。可以更加全面的监控数据的整体运行情况。同时可将生成的report文件发送给Oracle公司进行协助分析。

 

监控的范围主要是:

l 主要内存参数的大小(db_block_buffers, db_block_size, log_buffer, shared_pool_size)。

l 系统负载情况:每秒钟的生成的日志量,数据库的逻辑读,物理读,交易数量等。

l 各类缓存命中率。如库缓存命中率,字典缓存命中率,db block buffer命中率,排序在内存中进行的比率等。

l 造成系统响应时间慢的几类事件,通过优化这几类事件提高系统响应速度。

l 按照各类消耗资源排序的SQL语句。通常系统响应速度慢除与参数设置有关外,还与书写不规范的SQL语句有关。通过优化捕捉到的SQL语句,提高响应速度。

l 各个表空间及组成表空间各个文件的I/O负载情况。通过这部分内容判断各个文件I/O是否均衡。

l 回滚段信息:反映是否有回滚段的竞争,是否有回滚段的过分扩展。

l 所有没有按缺省设置的参数。

Statspack软件包的创建

l  安装文件:Unix 操作系统下,安装文件存放在$ORACLE_HOME/rdbms/admin 目录下。

l  创建时的执行的用户和执行的文件

SQL>connect internal ;

SQL>@?/rdbms/admin/spcreate.sql;

l  安装过程中的主要动作:

1安装生成一个用户perfstat/perfstat =>spcusr.sql,

  安装时输入:DEFAULT TABLESPACE/ TEMPORARYTABLESPACE

2建立需要的Table    =>spctab.sql   

3生成dbms_shared_pool和dbms_job PL/SQL 程序包=>spcpkg.sql

Statspack软件包的执行/数据采集

当系统响应速度出现明显下降的时候,可通过statspack进行系统运行数据采集,并生成报告文件,进行分析。

l  初始准备:在init<sid>.ora中设置timed_statistics=true,并让其生效。或使用alter systemset timed_statistics=true;

l  使用创建的perfstat用户连接

SQL>CONNECT PERFSTAT/PERFSTAT;

l  执行第一次采集程序:

SQL>EXECUTE STATSPACK.SNAP;

l  系统运行一段时间后进行第二次采集。

SQL>EXECUTE STATSPACK.SNAP;

生成报告:当执行了二次以上数据采集后,就可以生成系统运行报告,执行系统运行报告时,需要提供起始数据采集点的起始点和结束点,可生成任意两点间的性能报告。数据采集点之间数据库关闭过生成的报告无效。

l使用perfstat用户登录(必须使用该用户)

SQL>connect perfstat/perfstat;

SQL> @?/rdbms/admin/spreport;

Enter     beginning Snap Id: 1

Enter     ending   Snap Id: 2

Enter name of output file [st_1_2] :<press return or enter a new name>

输入起始和结束的快照ID,并定义输出文件名。生成的文件存放在Oracle用户的home目录下。

1.5.2  监控/维护脚本

运行系统的大多数信息可通过statspack反映,下面提供的脚本主要做为statspack的补充信息。

1.5.2.1系统日志监控

系统在运行过程中,smon后台进程会将出现的各类错误信息写入alert<sid>.log文件中。通过morealert<sid>.log |grep -i ora- 来检查出现的各类”ora-“错误。同时alert<sid>.log 文件还记录了数据库的开启和关闭的时间。从数据库的background_dump_dest 参数中找出alert_actdb.log的实际路径。

SQL>set linesize200

SQL> showparameter background_dump_dest

NAME               TYPE      VALUE

--------------------------------------------------------------

background_dump_deststring  /opt/app/oracle/admin/actdb/bdump

$ cd /opt/app/oracle/admin/actdb/bdump

$ morealert_acdb.log |grep –i ora-

                                   

 学到了吗?有收获吗?

 欢迎大家留言噢~


记得置顶公众号设为星标

 第一时间浏览精彩内容噢~



 

 

 

 



最后修改时间:2021-04-26 14:56:28
文章转载自数据库微课,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论