oracle笔记四DBA管理.docx
- 文档编号:9712579
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:37
- 大小:39.30KB
oracle笔记四DBA管理.docx
《oracle笔记四DBA管理.docx》由会员分享,可在线阅读,更多相关《oracle笔记四DBA管理.docx(37页珍藏版)》请在冰豆网上搜索。
oracle笔记四DBA管理
1、通常oracle需要启动OracleServiceORCL,OracleStartORCL,OracleTNSListener任务
在NT上至少要启动两个服务
oraclestartID和oracleserverID
每个数据库都有一个系统标识符(SID),典型安装的数据库使用的系统标识符是ORCL
2、启动关闭数据库
关闭:
svrmgr>connectinternal/oracle
>shutdown --正常关闭数据库
svrmgr>shutdown immediate --立即关闭数据库
svrmgr>shutdownabort --一种最直接的关闭数据库的方式,执行之后,重新启动需要花6-8小时
启动:
svrmgr>startup --正常启动
--等价于:
startupnomount;
alterdatabase mount;
alterdatabase open;
svrmgr>startupmount;--安装启动:
用于改变数据库的归档或执行恢复状态
svrmgr>startupnomount; --用于重建控制文件或重建数据库
svrmgr>startup restrict;--约束启动,能启动数据库,但只允许具有一定特权的用户访问
如果希望改变这种状态,连接成功后
altersystemdisablerestrictedsession;
svrmgr>startupforce;当不能关闭数据库时,可采用强制启动数据库来完成数据库的关闭操作。
svrmgr>startuppfile=d:
\orant\database\initorcl.ora --带初始化参数文件的启动
3、缺省用户和密码
<1>.Oracle安裝完成后的初始口令?
internal/oracle
sys/change_on_install
system/manager
scott/tiger
sysman/oem_temp
<2>.ORACLE9IASWEBCACHE的初始默认用户和密码?
administrator/administrator
4、让定义自己的回滚段生效
在initorcl.ora中加入rollback_segments=(rb0,rb1,...)
其中rb0,rb1为自己定义的回滚段,可使这些回滚段在启动时生效
5、查看修改数据库的字符集
<1>数据库服务器字符集
在表props$中
updateprops$setvalue$='ZHS16CGB231280'
wherename='NLS_CHARACTERSET'
然后重新启动数据库,而不需要重新安装
8i以上版本可以通过alterdatabase来修改字符集,但也只限于子集到超集,不建议修改props$表,将可能导致严重错误。
Startupnomount;
Alterdatabasemountexclusive;
Altersystemenablerestrictedsession;
Altersystemsetjob_queue_process=0;
Alterdatabaseopen;
Alterdatabasecharactersetzhs16gbk;
sql>showparameterNLS
查看数据库字符集:
SELECT* FROMNLS_DATABASE_PARAMETERS;
SELECT* FROMV$NLS_PARAMETERS;
<2>
客户端字符集环境select*fromnls_instance_parameters,其来源于v$parameter,
表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
会话字符集环境select*fromnls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是altersession完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。
客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。
如果多个设置存在的时候,altersession>环境变量>注册表>参数文件
字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。
如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。
<3>有时候用crontab发起的时候,由于执行的shell脚本的不同,导致很多的环境变量不同。
常常看到插入到数据库中的汉字变成乱码。
比如shell脚本cai.sh如下内容。
#!
/bin/ksh
exportORACLE_BASE=/u01/oracle/app/oracle
exportORACLE_HOME=${ORACLE_BASE}/product/9.2.0
exportORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
exportLD_LIBRARY_PATH=$ORACLE_HOME/lib:
$ORACLE_HOME/rdbms/lib:
$LD_LIBRARY_PATH
exportSHLIB_PATH=$ORACLE_HOME/lib32:
$ORACLE_HOME/rdbms/lib32:
/app/prepay/lib
/u01/oracle/app/oracle/product/9.2.0/bin/sqlplusaicbs/aicbs@busi_cs<
insertintookcaivalues('okcai是个大好人呀');
commit;
quit
!
在crontab中定时每天20:
19执行一次
1920***/bin/sh/app/prepay/cai.sh>/dev/null2>&1&
则可以看到数据库中数据变成了:
2LQSJY
当前数据库的字符集是
SELECT* FROMNLS_DATABASE_PARAMETERS
AMERICAN.ZHS16GBK
为了正常,必须保持客户端和数据库一致的字符集
改脚本如下即可
#!
/bin/ksh
exportORACLE_BASE=/u01/oracle/app/oracle
exportORACLE_HOME=${ORACLE_BASE}/product/9.2.0
exportORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
exportLD_LIBRARY_PATH=$ORACLE_HOME/lib:
$ORACLE_HOME/rdbms/lib:
$LD_LIBRARY_PATH
exportSHLIB_PATH=$ORACLE_HOME/lib32:
$ORACLE_HOME/rdbms/lib32:
/app/prepay/lib
####下面就是增加的
exportNLS_LANG=AMERICAN_AMERICA.ZHS16GBK
/u01/oracle/app/oracle/product/9.2.0/bin/sqlplusaicbs/aicbs@busi_cs<
insertintookcaivalues('okcai是个大好人呀');
commit;
quit
!
6、svgmgr>showsga
7、查询锁的原因
如果进程被死锁,可以按下面方式查询
<1>从v$session或者v$locked_object找到此session
<2>如果有lockwait,查询v$lock,
select*fromv$lockwherekaddr='C00000024AB87210'
如果没有,根据sid
select*fromv$lockwheresid=438
<3>查看v$lock
lmode>0,表示已经得到此锁
request>0表示正在请求此锁
根据id1和id2的值可以判断请求哪个锁的释放。
select*fromv$lockwhereid1=134132andid2=31431
8.查询锁的状况的对象
V$LOCK, V$LOCKED_OBJECT, V$SESSION, V$SQLAREA, V$PROCESS;
查询锁的表的方法:
SELECTS.SIDSESSION_ID,S.USERNAME,
DECODE(LMODE,0,'None',1,'Null',2,'Row-S(SS)',3,'Row-X(SX)',4,'Share',5,'S/Row-X(SSX)',6,'Exclusive',TO_CHAR(LMODE))MODE_HELD,
DECODE(REQUEST,0,'None',1,'Null',2,'Row-S(SS)',3,'Row-X(SX)',4,'Share',5,'S/Row-X(SSX)',6,'Exclusive',TO_CHAR(REQUEST))MODE_REQUESTED,
O.OWNER||'.'||O.OBJECT_NAME||'('||O.OBJECT_TYPE||')',S.TYPELOCK_TYPE,L.ID1LOCK_ID1,L.ID2LOCK_ID2
FROMV$LOCKL,SYS.DBA_OBJECTSO,V$SESSIONS
WHEREL.SID=S.SIDANDL.ID1=O.OBJECT_ID;
9.怎样查得数据库的SID?
selectnamefromv$database;
也可以直接查看init.ora文件
10、管理回滚段:
存放事务的恢复信息
建立回滚段
createpublic rollbacksegmentSEG_NAME tabelspaceTABLESPACE_NAME;
alter rollbacksegmentSEG_NAME online;
删除回滚段
首先改变为offline状态
直接使用回滚段
sql>settransaction use rollback segment SEG_NAME;
11.计算一个表占用的空间的大小
selectowner,table_name,
NUM_ROWS,
BLOCKS*AAA/1024/1024"SizeM",
EMPTY_BLOCKS,
LAST_ANALYZED
fromdba_tables
wheretable_name='XXX';
Here:
AAAisthevalueofdb_block_size;
XXXisthetablenameyouwanttocheck
12.表在表空间中的存储情况
selectsegment_name,sum(bytes),count(*)ext_quanfromdba_extentswhere
tablespace_name='&tablespace_name'andsegment_type='TABLE'groupby tablespace_name,segment_name;
13.索引在表空间中的存储情况
selectsegment_name,count(*)fromdba_extentswheresegment_type='INDEX'and owner='&owner'
groupbysegment_name;
14.查看某表/索引的大小
表
SQL>selectsum(bytes)/(1024*1024)as"size(M)"fromuser_segments
wheresegment_name=upper('&table_name');
索引
SQL>selectsum(bytes)/(1024*1024)as"size(M)"fromuser_segments
wheresegment_name=upper('&index_name');
15、确定可用空间
selecttablespace_name,sum(blocks),sum(bytes)fromsys.dba_free_spacegroupbytablespace_name;
16、程序中报错:
maxinumcursorexceed!
<1>查看当前的opencursor参数
sql>showparameteropen_cursors
<2>如果确实很小,应该调整数据库初始化文件
加如一项 open_cursors=200
<3>如果很大,则
selectsid,sql_text,count(*)fromv$open_cursor
groupbysid,sql_text
havingcount(*)>200
其中200是随便写一个比较大的值。
查询得到打开太多的cursor.
17、查看数据库的版本信息
SQL>select *fromv$version;
包含版本信息,核心版本信息,位数信息(32位或64位)等
至于位数信息,在linux/unix平台上,可以通过file查看,如
file$ORACLE_HOME/bin/oracle
18.查看最大会话数
SELECT*FROMV$PARAMETERWHERENAMELIKE'proc%';
SQL>
SQL>showparameterprocesses
NAMETYPEVALUE
-------------------------------------------------------------------------
aq_tm_processesinteger1
db_writer_processesinteger1
job_queue_processesinteger4
log_archive_max_processesinteger1
processesinteger200
这里为200个用户。
select*fromv$license;
其中sessions_highwater纪录曾经到达的最大会话数
19.以archivelog的方式运行oracle。
init.ora
log_archive_start=true
RESTARTDATABASE
20.unix下调整数据库的时间
su-root
date-u08010000
21.P4电脑的安裝方法
将SYMCJIT.DLL改为SYSMCJIT.OLD
22.如何查询SERVER是不是OPS?
SELECT* FROMV$OPTION;
如果PARALLELSERVER=TRUE则有OPS能
23.查询每个用户的权限
SELECT* FROMDBA_SYS_PRIVS;
24.将表/索引移动表空间
ALTERTABLETABLE_NAMEMOVETABLESPACE_NAME;
ALTERINDEXINDEX_NAMEREBUILDTABLESPACETABLESPACE_NAME;
25.在LINUX,UNIX下启动DBASTUDIO?
OEMAPP DBASTUDIO
26.LINUX下查询磁盘竞争状况命令?
Sar -d
27.LINUX下查询磁盘CPU竞争状况命令?
sar -r
28.查询表空间信息?
SELECT* FROM DBA_DATA_FILES;
29.看各个表空间占用磁盘情况:
SQL>coltablespaceformata20
SQL>select
b.file_id 文件ID号,
b.tablespace_name 表空间名,
b.bytes 字节数,
(b.bytes-sum(nvl(a.bytes,0))) 已使用,
sum(nvl(a.bytes,0)) 剩余空间,
sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比
fromdba_free_spacea,dba_data_filesb
wherea.file_id=b.file_id
groupbyb.tablespace_name,b.file_id,b.bytes
orderbyb.file_id
30.如把ORACLE设置为MTS或专用模式?
#dispatchers="(PROTOCOL=TCP)(SERVICE=SIDXDB)"
加上就是MTS,注释就是专用模式,SID是指你的实例名。
31.如何才能得知系统当前的SCN号?
selectmax(ktuxescnw*power(2,32)+ktuxescnb)fromx$ktuxe;
32.修改oracel数据库的默认日期
altersessionsetnls_date_format='yyyymmddhh24miss';
OR
可以在init.ora中加上一行
nls_date_format='yyyymmddhh24miss'
33.将小表放入keep池中
altertablexxxstorage(buffer_poolkeep);
34.如何检查是否安装了某个patch?
checkthat oraInventory
35.如何修改oracle数据库的用户连接数?
修改initSID.ora,将process加大,重启数据库.
36.如何创建SPFILE?
SQL>connect/assysdba
SQL>select*fromv$version;
SQL>createpfilefromspfile;
SQL>CREATESPFILEFROMPFILE='E:
\ora9i\admin\eygle\pfile\init.ora';
文件已创建。
SQL>CREATESPFILE='E:
\ora9i\database\SPFILEEYGLE.ORA'FROMPFILE='E:
\ora9i\admin\eygle\pfile\init.ora';
文件已创建。
37.內核参数的应用
shmmax
含义:
这个设置并不决定究竟Oracle数据库或者操作系统使用多少物理内存,只决定了最多可以使用的内存数目。
这个设置也不影响操作系统的内核资源。
设置方法:
0.5*物理内存
例子:
Setshmsys:
shminfo_shmmax=10485760
shmmin
含义:
共享内存的最小大小。
设置方法:
一般都设置成为1。
例子:
Setshmsys:
shminfo_shmmin=1:
shmmni
含义:
系统中共享内存段的最大个数。
例子:
Setshmsys:
shminfo_shmmni=100
shmseg
含义:
每个用户进程可以使用的最多的共享内存段的数目。
例子:
Setshmsys:
shminfo_shmseg=20:
semmni
含义:
系统中semaphoreidentifierer的最大个数。
设置方法:
把这个变量的值设置为这个系统上的所有Oracle的实例的init.ora中的最大的那个processes的那个值加10。
例子:
Setsemsys:
seminfo_semmni=100
semmns
含义:
系统中emaphores的最大个数。
设置方法:
这个值可以通过以下方式计算得到:
各个Oracle实例的initSID.ora里边的processes的值的总和(除去最大的Processes参数)+最大的那个Processes×2+10×Oracle实例的个数。
例子:
Setsemsys:
seminfo_semmns=200
semmsl:
含义:
一个set中semaphore的最大个数。
设置方法:
设置成为10+所有Oracle实例的InitSID.ora中最大的Processes的值。
例子:
Setsemsys:
seminfo_semmsl=-200
38.怎样查看哪些用户拥有SYSDBA、SYSOPER权限?
SQL>connsys/change_on_install
SQL>select*fromV_$PWFILE_USERS;
39.如何查看数据文件放置的路径?
colfile_nameformata50
SQL>selecttablespace_name,file_id,bytes/1024/1024,file_namefromdba_data_filesorderbyfile_id;
40.如何查看现有回滚段及其状态?
SQL>colsegmentformata30
SQL>SELECTSEGMENT_NAME,OWNER,TABLESPAC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 笔记 DBA 管理