Oracle系统管理.docx
《Oracle系统管理.docx》由会员分享,可在线阅读,更多相关《Oracle系统管理.docx(23页珍藏版)》请在冰豆网上搜索。
![Oracle系统管理.docx](https://file1.bdocx.com/fileroot1/2023-1/22/477ac099-7a7b-4cf5-9fe0-65d63020190b/477ac099-7a7b-4cf5-9fe0-65d63020190b1.gif)
Oracle系统管理
Oracle系统管理
(1)
常见的数据库维护过程
常见的数据库维护过程
一.数据备份
1,备份与恢复前的准备
(1)设定字符集
setNLS_LANG=.ZHS16CGB231280
exportNLS_LANG
(2)检查空间大小
df-k
(3)资源开销
联机备份资源开销较大,一般在2:
30分左右进行。
2,数据备份
以下是文件exp.file的内容:
expuserid=cinms3/cinms3full=Yinctype=completeconstraints=Yfile=cinms3_200804_1.dmplog=cinms3_200804_1.log
注意备份生成的数据文件的名称要有时间标识,留下备份成功与否的log,
备份的工作放在后台去执行,如下所示
$nohup/u03/oradata/exp.file&
3,数据恢复
(1)恢复前的检查
(a)磁盘空间的大小
df-k
(b)数据表空间的大小
以下scriptsql检查数据库中所有的表空间及数据文件的资源分配及目前的开销,剩余空间的大小,以便分析、决定是否需要扩展数据文件。
selecta.file_id"FileNo",a.tablespace_name"Tablespace_name",a.file_name"DataFile_name",
a.bytes"Bytes",a.bytes-sum(nvl(b.bytes,0))"Used",
sum(nvl(b.bytes,0))"Free",
sum(nvl(b.bytes,0))/a.bytes*100"%free"
fromdba_data_filesa,dba_free_spaceb
wherea.file_id=b.file_id(+)
groupbya.tablespace_name,a.file_name,
a.file_id,a.bytesorderbya.tablespace_name
(c)回滚段
检查目前所用的回滚段,及其开销。
selectn.name,s.extents,s.rssize,s.status
fromv$rollnamen,v$rollstatswheren.usn=s.usn;
由于在恢复数据时,事务交易是大事务集中处理,回滚段开销较大,应考虑扩展回滚表空间与回滚段,使某个回滚段的大小在260M以上,交易处理在此回滚段上进行。
CREATEROLLBACKSEGMENTr15
TABLESPACErbs
STORAGE(INITIAL1mNEXT1mMINEXTENTS10
MAXEXTENTS280mOPTIMAL20m);
使回滚段在线:
当回滚段创建后,回滚段是离线的,不能被数据库使用,为了使回滚段被事务利用,必须将回滚段在线。
可以用以下命令使回滚段在线:
ALTERROLLBACKSEGMENTr15ONLINE;
其他回滚段离线
ALTERROLLBACKSEGMENTrollback_segmentOFFLINE;
ALTERROLLBACKSEGMENTr01OFFLINE;
ALTERROLLBACKSEGMENTr02OFFLINE;
ALTERROLLBACKSEGMENTr03OFFLINE;
ALTERROLLBACKSEGMENTr04OFFLINE;
ALTERROLLBACKSEGMENTr05OFFLINE;
ALTERROLLBACKSEGMENTr06OFFLINE;
ALTERROLLBACKSEGMENTr07OFFLINE;
ALTERROLLBACKSEGMENTr08OFFLINE;
ALTERROLLBACKSEGMENTr09OFFLINE;
ALTERROLLBACKSEGMENTr10OFFLINE;
ALTERROLLBACKSEGMENTr11OFFLINE;
ALTERROLLBACKSEGMENTr12OFFLINE;
此时,在import恢复数据时,交易将只在r15上进行。
(d)扩展数据表空间
重新调整数据文件的大小,要均匀地分布在不同的磁盘上。
altertablespaceCINMS_USERadddatafile'/u02/oradata/unicom/cinms_user000.dbf'size500m;
(e)扩展系统表空间
扩展系统表空间的大小
altertablespaceSYSTEMadddatafile'/u02/oradata/unicom/system02.dbf'size300m;
(f)共享缓冲池
清除共享池数据:
altersystemflushshared_pool;
功能:
清除shared_pool中的碎片,解决连续的空间
(db_block_size*db_block_buffers决定了share_pool的大小)
(g)字符集
再次检查字符集
setNLS_LANG=.ZHS16CGB231280
exportNLS_LANG
(h)清除回滚段数据:
alterrollbacksegmenttestrollshrink;
功能:
把回滚段已提交地事务清空,使占有地资源释放出来。
(i)删除不需要的会话
查看后台进程,删除不需要的会话
selectspid,namefromv$process,v$bgprocesswhereaddr=paddr
altersystemkillsessionsession_id,process_id;
(j)
(2)恢复过程
恢复时,执行imp.file,并提交到后台执行。
Imp.file文件内容如下:
impuserid=cinms3/cinms3fromuser=cinms3ignore=ycommit=y
file=unicom_cinms3.dmplog=cinms3_200108021_1.log
恢复工作放在后台去执行,如下所示
$nohup/u03/oradata/imp.file&
(3)恢复后的检查
(a),检查数据库对象的个数
检查数据库中表地个数,Trigger,Procedure,Package,Funcation地个数,与原库中相应地数据库对象进行比较,如相等,说明对象及数据已恢复。
selectcount(*)fromuser_sourcewheretype='FUNCTION';
selectcount(*)fromuser_sourcewheretype='PROCEDURE';
selectcount(*)fromuser_sourcewherenamelike'RADIUS%';
selectcount(*)fromuser_sourcewheretype='PACKAGE';
selectcount(*)fromuser_tables;
(b)使回滚段在线
可以用以下命令使回滚段在线:
ALTERROLLBACKSEGMENTr15ONLINE;
ALTERROLLBACKSEGMENTrollback_segmentOFFLINE;
ALTERROLLBACKSEGMENTr01ONLINE;
ALTERROLLBACKSEGMENTr02ONLINE;
ALTERROLLBACKSEGMENTr03ONLINE;
ALTERROLLBACKSEGMENTr04ONLINE;
ALTERROLLBACKSEGMENTr05ONLINE;
ALTERROLLBACKSEGMENTr06ONLINE;
ALTERROLLBACKSEGMENTr07ONLINE;
清除回滚段数据:
alterrollbacksegmentr15shrink;
(c)重新编译数据库对象――TRIGGER
/*编译所有的触发器*/
setpages0feedoffechooff
spooltrgcomp.sql
promptspooltrgcom.lst
promptsetechoonfeedon
select'altertrigger'||trigger_name||'compile;'fromuser_triggers;
promptspooloff
spooloff
(d)重新编译数据库对象――PROCEDURE,FUNCATION,PACKAGE
/*编译所有的函数,过程,包*/
setpages0feedoffechooff
spoolppfcomp.sql
promptspoolppfcomp
promptsetechoonfeedon
selectdistinct'alter'||type||''||name||'compile;'fromuser_source
wheretype<>'PACKAGEBODY';
promptspooloff
spooloff
(e)快速编译所有视图
当在把数据库倒入到新的服务器上后(数据库重建),需要将视图重新编译一遍,因为该表空间视图到其它表空间的表的连接会出现问题,可以利用PL/SQL的语言特性,快速编译。
SQL>SPOOLcomp_view.sql
SQL>SELECT‘ALTERVIEW‘||TNAME||’COMPILE;’FROMUSER_TABLES;
SQL>SPOOLOFF
然后执行ON.sql即可。
SQL>@comp_view.SQL
当然,授权和创建同义词也可以快速进行,如:
SQL>SELECT‘GRANTSELECTON’||TNAME||’TOUSERNAME;’FROMUSER_TABLES;
SQL>SELECT‘CREATESYNONYM‘||TNAME||’FORUSERNAME.’||TNAME||’;’FROMTABLES;
(f)数据库重建应注意的问题
在利用import进行数据库重建过程中,有些视图可能会带来问题,因为结构输入的顺序可能造成视图的输入先于它低层次表的输入,这样建立视图就会失败.要解决这一问题,可采取分两步走的方法:
首先输入结构,然后输入数据.命令举例如下(uesrname:
cinms3,password:
cinms3,hoststing:
unicom,数据文件:
expdata.dmp):
impcinms3/cinms3@unicomfile=empdata.dmprows=N
impcinms3/cinms3@unicomfile=empdata.dmpfull=Ybuffer=64000commit=Yignore=Y
第一条命令输入所有数据库结构,但无记录.第二次输入结构和数据,64000字节提交一次,ignore=Y选项保证第二次输入既使对象存在的情况下也能成功.
(g)
4,阿若误认为
二.空间管理
1.检查目前表空间的大中小
数据文件的创建应以在磁盘上均匀分布为原则,创建时,在所有磁盘上要同时创建,使数据均匀地分布在各个磁盘上。
colFileNoformata3
colTablespace_nameformata22
colDataFile_nameformata30
colBytesformata15
colUsedformata15
colFreeformata15
col%freeformata15
selecta.file_id"FileNo",a.tablespace_name"Tablespace_name",a.file_name"DataFile_name",
a.bytes"Bytes",a.bytes-sum(nvl(b.bytes,0))"Used",sum(nvl(b.bytes,0))"Free",
sum(nvl(b.bytes,0))/a.bytes*100"%free"
fromdba_data_filesa,dba_free_spaceb
wherea.file_id=b.file_id(+)
groupbya.tablespace_name,a.file_name,
a.file_id,a.bytesorderbya.tablespace_name
2.检查某个数据文件上含有的数据库表
在数据文件/export/home/app/oracle/datafile/cinms3_user02.dbf'上有那些数据库表,将segment_type改为TRIGGER,PROCEDURE,FUNCATION,PACKAGE等可以查看其他数据库对象在数据文件上地分布情况。
colsegment_nameformata20
coltablespace_nameformata12
colfile_nameformata45
selecta.segment_name,a.tablespace_name,b.file_name
fromuser_segmentsa,dba_data_filesb
wherea.segment_type='TABLE'anda.tablespace_name=b.tablespace_name
andb.file_name='/export/home/app/oracle/datafile/cinms3_user02.dbf';
3.将数据文件从一个磁盘移到另一个
(1)使用SERVERMANAGER关闭实例
SVRMGR>connectinternal;
SVRMGR>shutdown;
SVRMGR>exit;
(2)移动数据库文件位置
使用操作系统命令来移动数据库文件位置(假设这里操作系统为SOLARIS2.7).在UNIX中用mv命令可以把文件移动到新的位置,
mv/export/home/oracle/u02/cinms_user81.dbf/export/home/oracle/oradata/cinms
mv/u02/oradata/unicom/cinms_user04.dbf/u03/oradata/unicom
(3)装载数据库
装载数据库并用alterdatabase命令来改变数据库中的文件名
SVRMGR>connectinternal;
SVRMGR>startupmount
SVRMGR>alterdatabaserenamefile
>‘/ora13/orarun/document.dbf’to
>‘/ora12/orarun/document.dbf’;
或者
alterdatabaserenamefile'/export/home/oracle/u02/cinms_user81.dbf'to'/export/home/oracle/oradata/cinms/cinms_user81.dbf';
或者
alterdatabaserenamefile'/u02/oradata/unicom/cinms_user04.dbf'to'/u03/oradata/unicom/cinms_user04.dbf';
(4).启动实例.
SVRMGR>alterdatabaseopen;
4.删掉某个数据文件
简单的方法是offline并删除该数据文件
svrmgrl>startupmount
svrmgrl>alterdatabasedatafile'/u02/oradata/unicom/cinms_user04.dbf'offlinedrop;
svrmgrl>alterdatabasedatafile'/u02/oradata/unicom/cinms_user00.dbf'offlinedrop;
svrmgrl>alterdatabasedatafile'/u02/oradata/unicom/cinms_user01.dbf'offlinedrop;
svrmgrl>alterdatabasedatafile'/u02/oradata/unicom/cinms_user02.dbf'offlinedrop;
svrmgrl>alterdatabasedatafile'/u02/oradata/unicom/cinms_user03.dbf'offlinedrop;
svrmgrl>alterdatabasedatafile'/u02/oradata/unicom/cinms_user05.dbf'offlinedrop;
svrmgrl>alterdatabaseopen;
此时,可将数据文件u02/oradata/unicom/cinms_user04.dbf从磁盘上物理删除。
5.删除某个表空间及其含有的所有数据文件
(a)altertablespaceCINMS_USERoffline;
(b)droptablespaceCINMS_USERincludingcontents;
(c)droptablespaceCINMS_USER;
随着表空间地删除,其上地数据文件随之删除。
6.检查回滚段地状态
对于电信业务而言,基本上联机事务处理OLTP,回滚段不要太大,个数要适当多,究竟多少要根据具体情况而定,但有一点,一定要联机ONLINE,
检查Scriptsql如下:
selectn.name,s.extents,s.rssize,s.optsize,s.hwmsize,s.xacts,s.status
fromv$rollnamen,v$rollstatswheren.usn=s.usn;
SQL>/
NAMEEXTENTSRSSIZEOPTSIZESTATUS
---------------------------------------------------------------------------
SYSTEM8407552ONLINE
R051011589632ONLINE
R0154572542208ONLINE
R0210334168832ONLINE
R033710606592ONLINE
R0417122759424ONLINE
R0656316032ONLINE
R0734206592ONLINE
R0845261312ONLINE
R096468544512ONLINE
R1056316032ONLINE
从上可以看到,R01占用了较多地区域,应作shrink处理。
同时系统在长期运行后,可能会发生rollbacksegmentoffline现象,此时,要做如下处理:
清除回滚段数据:
alterrollbacksegmenttestrollshrink;
ALTERROLLBACKSEGMENTr15ONLINE;
7.表空间的创建和扩建
(1)创建临时表空间
createtablespacetemp_userdatafile
'/u01/oradata/cinms/Billing_curcomdedial_1.dbf'size200m,
temporary;
(2)创建用户数据表空间
(a)方法1
CREATETABLESPACE"CINMS_USER"
DATAFILE'/u02/oradata/unicom/cinms_user000.dbf'
SIZE500mREUSE,'/u02/oradata/unicom/cinms_user001.dbf'
SIZE500mREUSEDEFAULT
STORAGE(INITIAL40KNEXT40KMINEXTENTS1MAXEXTENTS
2147483645PCTINCREASE0);
(b)方法2
CREATETABLESPACE"CINMS_USER33"
DATAFILE'/export/home/app/oracle/datafile/cinms_user000.dbf'SIZE1m
DEFAULTSTORAGE(INITIAL40KNEXT40KMINEXTENTS1MAXEXTENTS
2147483645PCTINCREASE0);
(4)创建索引表空间
CREATETABLESPACE"CINMS_INDEXES"
DATAFILE'/u03/oradata/unicom/cinms_index03.dbf'SIZE300M
DEFAULT
STORAGE(INITIAL128KNEXT128KMINEXTENTS1MAXEXTENTS4096
PCTINCREASE0);
(5)在给定的表空间上增加数据文件(扩展表空间)
altertablespaceCINMS_USERadddatafile'/u02/oradata/unicom/cinms_user002.dbf'size500m
altertablespaceCINMS_USERadddatafile'/u02/oradata/unicom/cinms_user003.dbf'size500m
(6)重建表空间及所有对象
删除某个用户,同时将此用户所具有的数据库对象全部删除,包括,table,index,procedure,funcation,package等,然后再创建表空间及其数据文件。
以system/manager用户登录数据库,执行如下scriptsql:
dropusercinms3cascade;
createusercinms3identifiedbycinms3defaulttablespacecinms_user;
grantresourcetocinms3;
grantdbatocinms3;