天地不仁,以万物为刍狗!

ORACLE**手册长篇连载--第二部分

上一篇 / 下一篇  2007-06-18 00:00:00 / 个人分类:oracle

2 创建
2D9fy8{A8Gnr;f6Mt0
}xe3b?,\8i0所有参见内容都在附件01_install_02_create_03_init/下。ITPUB个人空间suDG@1E$fd O0D

tpJsY(D0以oracle用户进行操作,设定数据库实例名为oradb(长度建议不要超过8个字符)。
g(Y'IDG3s!_0
4?h'Y#wjW02.1 Oracle 8 & 8iITPUB个人空间@t0t GB3^ex
ITPUB个人空间s)@%@*k0EB{
2.1.1 工具创建
2w1h%X9NG i#`0ITPUB个人空间y!O'\1d`!["A'Ng
Oracle 8ITPUB个人空间 da j {I
ITPUB个人空间2f fC"Bq
运行$ORACLE_HOME/bin/orainst(安装数据库时必须选中oracle installer),选择create database object,安装界面中选Oracle Enterprise Server(RDBMS)
(r b'T.|X$Z0ITPUB个人空间(CB%@4b&A
mount point暂为$ORACLE_BASE,字符集为ZHS16CGB231280或ZHS16GBK,调整system,tools,users,rbs,temp,redolog等尺寸。ITPUB个人空间g*y3T3xI

:EqRLcE}s+f?0创建过程中会提示输入osdba,osoper的UNIX组,这是向instance表明此组的成员享有角色sysdba或sysoper的权限,从而用connect / as sysdba替换掉connect internalITPUB个人空间!` MO:J W pCZ}@a X
ITPUB个人空间0G+T `CF5d(B0G
Oracle 8iITPUB个人空间b%H7\do

?GN] b!CD(j0进入X WINDOW,运行dbassistITPUB个人空间C;KKC}z:^|

l.h @(Ps{02.1.2 手工创建ITPUB个人空间L*]m.x_0n`

l7k-\h7m:I r0任何工具都有其局限性,熟练的数据库管理员可采用手工方法创建数据库,以增加对系统的灵活控制。
7B;K+myy G%]0
8C(p@N(s'D \B0对于手工建库Oracle 8与Oracle 8i的区别主要是建立的数据字典和存储过程有些不同,Oracle8i的dbassistant可以生成建库脚本供以后使用。ITPUB个人空间0{0U qyvu
ITPUB个人空间 b._*b}^
取得/8i/initoradb.ora,编辑如db_name,control_file,dump_dest等参数,以符合实际情况。如不需要生成remote_login_passwordfile,可在initoradb.ora中设remote_login_passwordfile=none;如需要,在initoradb.ora中设remote_login_passwordfile=exclusive,运行orapwd file= password=
Yu hb)CB0必须创建新生成文件所要用到的目录,如在配置文件中指定的bdump,cdump,udump等目录,以及数据文件存储目录。
[~rA*F0
BS8T3Y$U0将initoradb.ora转移到$ORACLE_BASE/admin/oradb/pfile/,并连接到$ORACLE_HOME/dbs/initoradb.ora。
1\?:jrPp-L0ITPUB个人空间H2S#O(mvSv!]
ln -s $ORACLE_BASE/admin/oradb/pfile/initoradb.ora $ORACLE_HOME/dbs/initoradb.oraITPUB个人空间2r0o/Niyg$co

VP xD!h1y0取得8i/createdb.sh,编辑如pfile,数据文件目录等参数,以符合实际情况,并转移到$ORACLE_BASE/admin/oradb/create/下,执行。ITPUB个人空间S9wdVP&Mi

`,t0z3XHO0相关系统表:ITPUB个人空间p9sy9B+C[*~

Iukc([0v$databaseITPUB个人空间0sI6D8l;l.HFM

6_xZ:d;d0v$datafile(file#,ts#,name)
@6py&Z:\0ITPUB个人空间_w:iN[n.UsE
v$tablespace(ts#,name)ITPUB个人空间8t@ i$P$?8LUo%_
ITPUB个人空间P1Si|fl
v$parameter(SQL>show parameter)
h-|Jzy"} @0ITPUB个人空间:b qjo X
v$sga(SQL>show sga)ITPUB个人空间y}\B8C1ghn

*fs z+x3\6b02.1.3 MTS(multi-threaded server)ITPUB个人空间8d_/ed-k4y'{ W K

9I%I"^5K3~F-n0Oracle8使用两种配置模式:dedicated server(专用模式)和shared server(即multi-threaded server共享模式),缺省使用专用模式。在连接数不很大且保持长期连接的情况下,专用模式为每个连接设立一个专用oracle服务进程,以保持较高的性能和稳定性。而当连接数上升到非常高的数目且不保持长期连接时,数据库管理开销增大,并且占用大量系统资源,给操作系统形成带来极大的压力。在这种情况下,共享模式更为有利,它通过缓冲池和预先设定数目的server提供服务,每个连接不再有专用的oracle服务进程,每次SQL操作由分配器(dispatcher)确定oracle服务进程。ITPUB个人空间~Z+Q'Sja#n

;i`wke+v+m6l5DS0multi-thread仅表示分配器展开的多个服务流程,并非操作系统意义上的多线程ITPUB个人空间&a ju p-F!Lgo

+b]%PY6n!F RC Ft0配置:ITPUB个人空间,P_)c Pb I

(Z tJ-v6?0¢ initoradb.oraITPUB个人空间3p5K^$@ Od

W x;I-[.e9E0加入
8J%Htc;H4L0
;[$L!aDZL,bV0mts_dispatchers = "(address=(protocol=TCP))(dispatchers=10)" #初始分配器数量
b&M5Z;Cj,m0ITPUB个人空间 Ww!qyI
mts_max_dispatchers = 15 #最大分配器数量ITPUB个人空间%k!r^-Y!w5kTJ7@.r+V
ITPUB个人空间j8I3Xpe!_
mts_servers = 50 #初始服务进程数量
5?'}Ik y m]0
*No:M%M~8K0mts_max_servers = 80 #最大服务进程数量
0}O8v8AE0ITPUB个人空间!J6F1sf!~H
mts_service = oradb3 #MTS方式下对外提供的数据库服务,非service_name
${$~g%y\C5J0ITPUB个人空间1w+r:`HY"j
表明instance能够提供MTS服务,不意味着取消dedicated方式
@@? j\J8ro0
b(}Z W|0¢ listener.ora
OMJw k}d0ITPUB个人空间Zdz}#h'ks Xf
应删除所有SID_LIST,SID_LIST的存在决定LISTENER以dedicated还是shared方式启动oracle连接。如SID_LIST存在,LISTENER不再接受instance的登记,以dedicated方式启动oracle连接; 如SID_LIST不存在,LISTENER启动时不为任何instance服务,由instance来登记MTS service,以shared方式启动oracle连接
'S6l#}'db0f2K5?a~Z0
3Jb8P(Eeoa&Z0¢ clientITPUB个人空间(K5H'V:N9m]:^

'J2s ?7]JeL0MTS在client端配置颇为怪诞,在tnsnames.ora中的host一定要写数据库server的名字,而且必须作全名解析,似乎server端接收到client端请求后会将主机字符串返回,应此client端必须能够解析,否则会报出诸如"database service not exist"的错误
2I+s koG.R0ITPUB个人空间}},k4t1W't
tnsnames.oraITPUB个人空间z6~,r RjYTQ:j

,s.[O iYz3?:^v0dbserver.soar.com =
^.n2N,a5gE3z}`,y0ITPUB个人空间7` N\u(? i#R7K
(DESCRIPTION =ITPUB个人空间)O,Y"d)SRQlV

mm!~%ws,UY0(ADDRESS_LIST =
5n Sy$zMX0ITPUB个人空间is n9[ FEa}Fm U
(ADDRESS=(PROTOCOL=TCP)(HOST= dbserver)(PORT = 1521))
-fwl KNX6aF0ITPUB个人空间G[%u9j"| H(S YP
)ITPUB个人空间/?3Dr}Q3C H3dr aj
ITPUB个人空间 ]"kxae X
(CONNECT_DATA =(SERVICE_NAME = oradb))
!Z7r'ah acA`0ITPUB个人空间0TK3F%D&P#j-|w4C
)ITPUB个人空间k/m5tF ~e4V

l|\!gYB0/etc/hosts
,P1MQ+Xlc0ITPUB个人空间8p bSu'zdi
10.0.0.1 dbserver.soar.com dbserverITPUB个人空间6r~ ?)~"G!`$?7Z
ITPUB个人空间"F$Q*l"b r%s'b m m
启动:先起LISTENER,后起instance
Z!W.yHo[~u0ITPUB个人空间2Ow3[E:N^ }e9f D
以下步骤均在数据库open状态下,由system用户完成
f'q~$G?7GCc0
+u R3QZke&Wd02.1.4 调整临时表空间
E o6s9N%BF}*l J0ITPUB个人空间~zO#vR6upz%D
alter tablespace temp temporary; #Oracle8的orainst没有将temp的缺省值permanent改为temporary,这样用户在temp上暂存的数据均为永久对象,很快将temp空间耗完。Oracle8i已修正。
Hc+P!hF9v0
W y(@-B'VHMt0SQL>alter tablespace temp default storage (initial 128k next 128k maxextents 5000 pctincrease 0);
L1ZvZU7} Zf$AI0
fC-|{9m"xi4H0SQL查询操作如group by,order by,distinct,join等需要在临时段上展开数据,须充分考虑临时段的大小。
.L^ E!w!^0ITPUB个人空间9u v9|yS"q8y
如果实例启动参数指定hash_join_enabled=true(缺省为true),当oracle选择以hash join方式进行表与表的联接,oracle根据查询操作的实际情况计算出hash_multiblock_io_count,此参数从属于session,平时显示为0,即hash join一次I/O读写需要的连续数据空间。这样当此参数大于临时段的next扩展块时,hash join操作会中断。如果预知联接表的规模比较巨大,可使用alter tablespace temp default storage(next …)将next值设为较大值,待全部操作完成后,再恢复正常。ITPUB个人空间o6{3A:^+^~C[I

!nxkb4xFB02.1.5 调整回滚表空间ITPUB个人空间6[~l6^ba3M
ITPUB个人空间3@B6Ow1|d
先将建库工具缺省设定的若干个回滚段删除
L3q%bu B O^0
1E1MT|h2E z XPF0SQL>alter rollback segment r01 offline;
gDBT/T E0xi#x*y0ITPUB个人空间(N7u };U+g@e
SQL>drop rollback segment r01;
Hh-JY;Or1o A%p T0ITPUB个人空间9K&@0h,x,QFU
根据实际需要创建回滚段(如r01-r10),供联机处理和批处理使用
.}+r&U4_)q5J\0ITPUB个人空间"Gy(T%Gv,mO
SQL>create rollback segment r01 storage(initial 128k next 128k maxextents 5000 optimal 5M) tablespace rbs;
K7B o o-|0ITPUB个人空间9sJ I3b!y@#Mg
SQL>alter rollback segment r01 online;ITPUB个人空间\y"L2cfz\
ITPUB个人空间+??b$Em!R^$H
注意修改$ORACLE_HOME/dbs/initoradb.ora中的激活回滚段段名
.x]B*r}mxX7w0ITPUB个人空间!i:mo"p(Kc
另创建一个尺寸无限制的回滚段(r99),供特殊用途ITPUB个人空间*Y"CgSg
ITPUB个人空间5Y2c}uy
SQL>create rollback segment r99 storage(initial 128k next 128k maxextents 5000) tablespace rbs;ITPUB个人空间 ~+k'M a&w~"iF9J [;v^A

#l.Q\+[x"w0如果在创建回滚段时使用create public rollback segment,则不需要在$ORACLE_HOME/dbs/initoradb.ora中用rollback_segment=(…)选项激活,推荐使用public方式ITPUB个人空间+C'K1bv:Ru![

&H4[&c7X9O~Q0相关系统表:
T'O B@,p%a-l0M`0
P RY2\4YR0SQL>select segment_name, initial_extent, next_extent, max_extents, extents,bytes from dba_segments where segment_type='ROLLBACK'; #回滚段占用空间状况ITPUB个人空间Nrf,J3~G8M}R
ITPUB个人空间/p[3jT n[ lG"@ u
SQL>select segment_name, status from dba_rollback_segs; #回滚段状态ITPUB个人空间Tg#H/N0I"gU1a

Z/e&U7n.I)N.m/I02.1.6 调整日志
dF7tbVz]`tY0ITPUB个人空间$]:jS1Tx,V+~
建立日志组ITPUB个人空间4l9I4?5u-u-G+Uw
ITPUB个人空间hyF9jEN
SQL>alter database add logfile group x('log1a','log1b') size 10M;ITPUB个人空间*~K j5m9U

3K]-|^e)H oic0增加日志组成员ITPUB个人空间H`vT s7S3[6l*W|
ITPUB个人空间(o2@ ja$q,{
SQL>alter database add logfile member 'log1c' to group x;ITPUB个人空间)g s~ XwX

5x4]J-J.{H0删除日志
o:]vq8}bF\*h0
M| k*B6K/^ ^F6{0数据库实例至少需要2个日志组,只有状态为inactive的日志组才能被删除,而当前日志组状态为current,上一个切换的日志组状态为active,这就意味着至少存在3个日志组才能删除其中的一个,如果要更新全部日志组,只能删除一个,再创建一个,直至全部被更新。ITPUB个人空间;f;},B2x1K(`!J i
ITPUB个人空间[ J`/Aw2I+a
SQL>alter database drop logfile group x;
&q%QMU][0ITPUB个人空间f:xe,]\:Q]/j
如果要删除的日志组是当前日志组,必须先将其切换至状态为inactive,再删除。
'KRF"P^0
$K-k(K(u7\#Z/|)tz{0SQL>alter system switch logfile;ITPUB个人空间+c#J!r'[!z }"Bg@

.O+t!Au L9@w0删除日志组成员ITPUB个人空间hw qNL8]
ITPUB个人空间v&n\A4O
SQL>alter database drop logfile member 'log1c';
O zlKV8`1y0
2}zB:?5n l[0相关系统表
"Ztuj]L0
1dG-yX?r_w0v$log #日志组状态、占用空间、顺序号等
P'S'kv1Qa0ITPUB个人空间&J;o2Rd7i
v$logfile #日志组文件
K#w[[mc v B R0
-u~#{5`Za02.1.7 调整用户表空间ITPUB个人空间0?9E@$@&hb&O$t
ITPUB个人空间U w Mv_Ot!g:k-R
创建表空间ITPUB个人空间L'm`7o#me
ITPUB个人空间8x\2h qy I
假定表数据在ts_data,索引在ts_index
k@@c(C7w0ITPUB个人空间t:Z ^D fb%s1V
SQL>create tablespace ts_data default storage(initial 10M next 10M maxextents 5000 pctincrease 0) datafile 'path/data_01.dbf' size 500M;
:H:Nh RFf0
!R0u;jPT!Mr6m0SQL>create tablespace ts_index default storage(initial 5M next 5M maxextents 5000 pctincrease 0) datafile 'path/index_01.dbf' size 500M;ITPUB个人空间#I W;P&ZW.r%~

nZt:F ?aj)x0参考命令:删除表空间ITPUB个人空间@4nz}{F o"t"K

q3x#b9C&c9CCP0SQL>drop tablespace data including contents; #删除表空间及其包含的所有数据对象
;A1c(UKS|Dp7r Sf0
)G&dfW`Y K:vBiR0相关系统表:ITPUB个人空间Nh m#p oz,I
ITPUB个人空间 | L$C0Z%s2ho,yXb gZ
user(dba)_tablespacesITPUB个人空间JoEa9xrpZ8N]
ITPUB个人空间%L~2L'Qi^{j
增加表空间尺寸ITPUB个人空间d,c%hI8Z

R e\"E)Km0L5F0假定表空间ts_data由path/data_01.dbf和path/data_02.dbf(500M)组成ITPUB个人空间/pT^7N1?f

lKu0d4}JOP0增加一个数据文件:ITPUB个人空间.d_$w?g.|
ITPUB个人空间5TH+U#|S JS4q}5TB
SQL>alter tablespace ts_data add datafile 'path/data_03.dbf' size 500M;ITPUB个人空间_Ju$F"I

;] Ad] wGEs0扩大原有文件大小:
O"~:`dI Q4TfM5g0
)N z^+J&W1kvUB0SQL>alter database datafile 'path/data_01.dbf' resize 1000M;ITPUB个人空间-b2eM(N z[%^#zf wl
ITPUB个人空间I Xv/W$_-Z0h
移动表空间数据文件
P!oKg4g5c `0ITPUB个人空间"Q#f;W`^W
假如要求为:将path1下data_01.dbf移至path2下,并把文件名改为data01.dbfITPUB个人空间!vA%X;Za} wyc$~!T

_0W;D }%?2b%e0实例处于关闭状态ITPUB个人空间'F;\*s{J/P:H IiY
ITPUB个人空间 f|] m*oi2g2{Qe b
sqlplus "/ as sysdba"
$zf!Ooa|p0
N+uG4q%Q+S0SQL>startup mountITPUB个人空间(zJ E%mNv
ITPUB个人空间3a$Wj+g%A9R m@
回到shell环境下ITPUB个人空间 f TB$b w2j2D
ITPUB个人空间\0b,Kg:m[
$ mv path1/data_01.dbf path2/data01.dbf
,tOUch-T;u0
k;gsi]3Vy0$ mv path1/data_02.dbf path2/data02.dbfITPUB个人空间5E _$^M]aTj

e{)Z)R{X0再到sqlplus环境中ITPUB个人空间+z:G2g$NW\%t U._,a
ITPUB个人空间K0YbA-YV8J)LR
SQL>alter database rename file 'path1/data_01.dbf' to 'path2/data01.dbf';ITPUB个人空间0j+D2MC2F+x
ITPUB个人空间nT:elrY:h
ITPUB个人空间*M(wl3`,u`-h
ITPUB个人空间)S3e]6rFH~p`
SQL>alter tablespace tbsdata rename datafile 'path/data_01.dbf' to 'path2/data01.dbf';ITPUB个人空间nZ,k-YC

V5l&|z5AW0SQL>alter database open;ITPUB个人空间:H_V X m2v

&f,}'oU7} B| lm.U0查看剩余空间
[%m,_!o,@h5h [0
ksQ]d5Sf1r7x0SQL>select tablespace_name,sum(bytes),max(bytes) from dba_free_space group by tablespace_name;
]-A/Wi z'j(\%Y"R\0ITPUB个人空间QOV*ny,Q(Aj%`
注意:空闲数据块总和sum(bytes)够用并不意味每个空闲块都满足分配需要,所以当表空间不够分配扩展块的时候,还要查看最大空闲数据块max(bytes)的大小。
t e&v8r]x%D9a%M0ITPUB个人空间 ]B ]%QO6[
合并空闲块ITPUB个人空间XC{fWe2Ix)x!|T

'KFx0aY}0如果表空间上的数据对象经常发生类似drop-create的变动,加之未采用统一的扩展块尺寸,使那些采用较大扩展块的数据对象不能利用较小的空间碎片,造成空间浪费。可通过将较小的空闲块合并成较大的空闲块的方法,减少空间浪费。ITPUB个人空间+v/v/aRUI.PJ

3?"Mc.@)B0SQL>alter tablespace tbsdata coalesce;
pltI8c0
"u}R.P'_S02.1.8 创建用户
2C3h7qAhoV xU0
Px[1]4](CDr0SQL>create user dbuser identified by oracle default tablespace data temporary tablespace temp quota unlimited on data quota 0 on system quota 0 on tools quota 0 on users;ITPUB个人空间^;hI,SYWQ mRhi
ITPUB个人空间[R5E(x|:Om,j
SQL>grant connect to dbuser;ITPUB个人空间8R1W"iX&g^7G
ITPUB个人空间'H"y X` q&?
SQL>grant create procedure to dbuser; #这些权限足够用于开发及生产环境ITPUB个人空间9Lk(]7p!t
ITPUB个人空间ix(r-` Z
SQL>grant select on dba_pending_transactions to dbuser; #二阶段提交过程中类似Tuxedo的软件需要检索挂起交易的状态,所以必须得到对此视图的select权限,以sys用户身份赋予
tc;y!R)[#M4@\0ITPUB个人空间b+b+kz_
修改用户可使用alter user dbuser ...
C i8u*a/eIH#mo0ITPUB个人空间R|W(}!a3fg
参考命令:ITPUB个人空间Fa_b2RE1p

\!R0b \#E-^0drop user dbuser cascade; #删除用户及其所有的数据对象
|e;M^*n$M0ITPUB个人空间[!l%Ac;h\u7I
revoke connect from dbuser; #取消用户角色权限ITPUB个人空间tm&~*J$M'cO-B4w&Zf
ITPUB个人空间0X Md4_4p"d
相关系统表:
(Kui Ng@0
%G an%H$[u+d0user(dba)_usersITPUB个人空间2Kg g8i,MrMN~.N
ITPUB个人空间w"g r8PbaP5Y9s
user(dba)_role_privs 角色权限ITPUB个人空间B2J G,_l

@k z,q0E0user(dba)_sys_privs 系统权限
1zp_Pkhj L0ITPUB个人空间4m!Q {+oHD&?}
user(dba)_tab_privs 对其他用户表操作的权限ITPUB个人空间3vHz5z;L3K |

}n~7XS*v(q0user_ts_quotas 表空间限额ITPUB个人空间p{Y#n2ty
ITPUB个人空间&g:f7VFqg Y @P&C*c
2.1.9 创建数据对象ITPUB个人空间$D__(gUZ4~R!\)[

']i2vA8L-t0相关系统表:ITPUB个人空间D^:l$E%duY^

aKM"?_uy0user_catalog(cat)
4c h$j.]3YA?/d k:_0ITPUB个人空间v@S/DaHK
user_objects(obj)ITPUB个人空间Df2F+mzfd.z

ZI/J#igQ,v:?/N9fd0表和索引建立在表空间上,如果不指定表空间,使用本用户的缺省表空间(default tablespace);如果不指定本对象的存储参数,使用建于其上的表空间的缺省存储参数(default storage)。ITPUB个人空间 F,`#S{cG\

n$@ o;jB'G)y0v0表(table)
@/[-o3W?JB0ITPUB个人空间D\'RC!T%_-w9W~&W
建表脚本通常是以下形式:ITPUB个人空间.R8h%[%u Yzet-f$S

P$O#yhI D0create table emp (no number(12), name char(20), …,constraint emp_x00 primary key(no)) storage(initial 100M next 100M pctincrease 0 maxextents 5000) pctused 70 pctfree 10 tablespace tbs_data enable primary key using index tablespace tbs_index;ITPUB个人空间 t:Ur]8u4[G4W/Q p*{

7T4PKZ*u'm:m/`0然而从简化数据对象配置、减少表空间碎片的角度考虑,不推荐为每张表单独指定storage选项,存储参数使用建于其上的表空间的缺省存储参数。不同表对扩展块大小的要求,可以通过分析归类,建立相应具有不同缺省存储参数的表空间的方法解决。这样数据库设计就能变得简洁明了。
LVN\Y*yK0ITPUB个人空间 ~Mt1MiH [
命令简化为:
Ty u NV u$rt3Nf0
tE*{+A^/p/r0create table emp (no number(12), name char(20), …, constraint emp_x00 primary key(no))pctused 70 pctfree 10 tablespace tbs_data enable primary key using index tablespace tbs_index;
#Quo9dc epe"@0ITPUB个人空间%G&f7?s%R{
primary key关键字建立同名的primary key constraint和unique index,表的每个域都有自身的constraint。ITPUB个人空间+K+\F0lP `1[

+b(jo+I'z&`6tvb}0相关系统表:
;a"hrh"ugL'^ N0
$KlI8d A"ixL0user_tables(tabs),dba_tables #表属性ITPUB个人空间z w!V3| Z?&{$]C1S
ITPUB个人空间W:g.K(? hI2g i
user_tab_columns(cols),dba_tab_columns #表各列属性ITPUB个人空间O$J*p&[J'R
ITPUB个人空间0n~a FN'z}
索引(index)
J ]|#kO7|bD M0
$j CDfP3Q9R0create index emp_x01 on emp(name) storage(initial 10M next 10M pctincrease 0 maxextents 5000) pctfree 10 tablespace tbs_index;ITPUB个人空间.[w0v6r/QZ/F1M

Q&V.?d;k&fJs0可参照表对storage的处理方式。ITPUB个人空间SfD3JL"[I/j

,g Wj'Gnb3][:iGA0create index emp_x01 on emp(name) pctfree 10 tablespace tbs_index;ITPUB个人空间u}Q"N]3N

P#Wqm9s| j"LR.L0相关系统表:ITPUB个人空间#XB}#CMe9b
ITPUB个人空间(ET9t%c-pN0@,^t
user_indexes(ind),dba_indexes #索引属性ITPUB个人空间N(zx U U9_0c

1K{:s;Z _!^&[-f0user_ind_columns,dba_ind_columns #索引各列属性,以index_position为顺序ITPUB个人空间S a KC%~U4y&q*jW+t5x
ITPUB个人空间t'ZVM `%Fr }g
序列(sequence)
Y"w*Z6Z#^]^&d0ITPUB个人空间 _Y-@!E3t4I a&Z\
create sequence emp_seq increment by 1 start with 1 nomaxvalue nocycle;
I pwK~ h ['U{)O*G D$r0
?MDr,f[Vh0相关系统表:
_$b8Nf;\@E` \0ITPUB个人空间%_'^ N$Z)b8f;W
user(dba)_sequences(seq) 序列属性ITPUB个人空间;vO/\P? m&f2W+t
ITPUB个人空间?|*e1Qs Y
视图(view)ITPUB个人空间6Ce ?O5Yq"Ir:Q
ITPUB个人空间0@ {(l)gz'MO1B
create emp_depart_view as select emp.name,emp_duty.name from emp,emp_duty where emp.duty=emp_duty.duty;
&S7f ZyrzLq:x5~ ?0
{.A@)l+T%T2K`0相关系统表:
dogqSR,`j6a? {P0
V yv$a\y^6@D{0user(dba)_views 视图属性
}!P\,Le5K |0ITPUB个人空间"F[;DH8`Zk8{
Oracle将view,sequence,用户参数等定义均存放于系统表空间,而用户创建的表空间仅存放table,index实体,因此可以大胆删除用户表空间,再用备份重新恢复,不必担心view,sequence等会被一并删去。
p zu%g6z c0ITPUB个人空间eA5?3x_}p-v,kn,P
2.1.10 创建只读用户ITPUB个人空间+[z-e3Z)t'jQ,P
ITPUB个人空间*[+BlowY!@1mH[
假定数据库用户dbbrsr需要对dbuser的表emp拥有select权力
B4Wr+y'@}+Q0
1llG4l%~ M g0connect dbuserITPUB个人空间(u;YM,H UJru:\$R
ITPUB个人空间j;GH9u3h$p w:z$I
grant select on emp to dbbrsr
@2kX#~8V)@0
/e,`'h NTC3G KYb0connect dbbrsrITPUB个人空间(b8jM` e9\+b#^
ITPUB个人空间9UG eH/f;w_].y
create synonym emp for dbuser.emp;ITPUB个人空间L |"~5h7JR QU s
ITPUB个人空间-sc n n5`O G}
这样,dbbrsr就能象使用自己的表一样对dbuser的表执行select操作
:|T5idvH0ITPUB个人空间R`/F {f Zo5g
2.1.11 启动及关闭数据库实例
z1u7zW;yC^;dr"MCg0ITPUB个人空间 L9uh"_r2N Yh
oracle用户,dbstart和dbshut启动及关闭/var/opt/oracle/oratab或/etc/oratab中设定的数据库实例,dbstart采用normal方式,dbshut采用immediate方式。
)K"Vf7\Z0
0F'onKF]kZ5g0或者使用手工方式ITPUB个人空间"v5_ I(Y |e2axG
ITPUB个人空间k/w h:?;H&]A^
sqlplus "/ as sysdba"ITPUB个人空间W xn$Fr9E2F
ITPUB个人空间._d(q"C {+D
启动ITPUB个人空间*OP3AA A-i
ITPUB个人空间$z|ZWH,l
normal
1O{4g,~/J~hMV:w0ITPUB个人空间Um-C$f'NJ
SQL>startup ITPUB个人空间B)](b"}FbxQVe nd
ITPUB个人空间jv.niJ e^8G
mountITPUB个人空间tcz5d2^al

7HNmb(?I+f0SQL>startup mount; #启动实例进程,载入数据库文件,允许DBA权限的某些操作,但禁止对数据库文件的一般性操作ITPUB个人空间4^~KnQIml8Y

K/ums7XEPtF~0SQL>完成某些操作ITPUB个人空间:mK;T[t,KH

Lnj` s1s:iyIa0SQL>alter database open;ITPUB个人空间*I#M |*kw&plp

z Tld7w1eH0nomount
$x6hP/fGl0
#?Q7Zz1H\~0SQL>startup nomount; #启动实例进程,但不允许访问数据库,常用于创建数据库、介质恢复或创建controlfile
s,z/a"k M$]0
0k8rM;T1yiF0SQL>完成某些操作
9CVB?]z*Fdbe0
5s6e'brpQ0SQL>alter database open;
4eS$e#i*H9y9tIL"Jr0ITPUB个人空间g:o6[u~:eL
关闭
L W/P#|eL0ITPUB个人空间WB]4\9^ R2i
normal
@9OXF\0
L:f$I.ac)N$g0SQL>shutdown或SQL>shutdown transactional; #等待每个连接交易完成后,切断连接,再关闭数据库ITPUB个人空间/wZtO BR

X7w k-b+EVJ3p Q I zc0immediateITPUB个人空间Y"G*J&eKr \

ID`\)w5}ei \Lx0SQL>shutdown immediate; #立刻中止每个连接,交易回滚
tAKP1t^!u0
,wO8}S i7qc.n0abort
0^V)}%_9qS0
O gmS&u.n|0SQL>shutdown abort; #立刻关闭数据库,不保证交易完整性,在下一次启动打开数据库文件时会进行介质恢复
E8gf*P$` F,[0
EP|6_p,p~}z,n8vm02.1.12 网络配置
:e dH#k+f+N5W$m.R x0ITPUB个人空间q7M-D[R?G*_ s6f']
假定某一台机器为client,ORACLE_SID为oraclient,数据库用户为dbclient;另一台机器为server,ORACLE_SID为oraserver,数据库用户为dbserver在server上$ORACLE_HOME/dbs/initoraserver.ora中有以下设定:
h:t'b.p|0ITPUB个人空间4`*wx1a2a8l ^`0{#X
db_name = oraserverITPUB个人空间8J2uo8X4X*k qJ

G$]bbAt0instance_name = oraserver
8A7cJJ Obv;U{C0V&C0ITPUB个人空间rIl^!A r ~r
Oracle 8iITPUB个人空间 _AOjqE ] O4L

5g)Os+|!Rs6`J2R p0service_names=oraserverITPUB个人空间%f VKf nf'N
ITPUB个人空间FB!t$]p
2.1.12.1 TNSITPUB个人空间rU6D-^FBBL S
ITPUB个人空间1] p4M!A*V[%Yh
Client端配置
4c X |8H6_m0
8Xk7h;VO `]0修改$ORACLE_HOME/network/admin/tnsnames.ora,增加一条PROTOCOL=TCP的记录。ITPUB个人空间:QN7?5^,^s*Q
ITPUB个人空间7G+~(DL5|
Oracle8
$~ FK8M*A6CK c M0
8Hs4L Hf(ntV$R0db_serverITPUB个人空间 u+^B8X{6g&B
ITPUB个人空间.]u+D z r#t
(DESCRIPTION =
+dEM.G:lW0
7\o5? D(U&e3E0(ADDRESS = (PROTOCOL= TCP)(Host= server)(Port= 1521))
]#z#zyI'[.`0
0Rx9YD#S.u0(CONNECT_DATA = (SID = oraserver))
%d5]!G!q2Z)iP.gE0
mH0hO9a*f0)
H(_3^5VX#r#Ras0
5ay6^"n_V{0Oracle8i
S_f)C(I7CD0
)e ez l;C FirY8Y0D0Z0db_serverITPUB个人空间7_$[/aL%xs8V\
ITPUB个人空间|7YX-j}N/NjS
(DESCRIPTION =ITPUB个人空间(izn{i)b3M'znoR+J

Ci)RM }f$P9z ~0(ADDRESS = (PROTOCOL= TCP)(HOST= server)(PORT= 1521))
u~'X"`o?l0ITPUB个人空间4kvz%ts|u3L
(CONNECT_DATA = (SERVICE_NAME=oraserverITPUB个人空间oy4ya"|U y
ITPUB个人空间 sg~0p5{
)ITPUB个人空间[ P x7I|@(c`
ITPUB个人空间/`&G{/T t6I
HOST可在/etc/hosts或DNS中配置,或直接写上IP地址
@DO;W:L2O0
6h;dff+DVH0sqlplus dbserver/passwd@db_serverITPUB个人空间)l]9f)tL;m$GNR
ITPUB个人空间DT({:mk_e6t+Y-l*Zd
Server端配置ITPUB个人空间!t"E;E u n[5ci6}4]
ITPUB个人空间!{Is ],d
修改$ORACLE_HOME/network/admin/listener.ora
opoyUi(FK0ITPUB个人空间qv@D;D#k&u I9qbt U
在LISTENER中增加ADDRESS的记录
X&]D.?fY&T0
-A"C/t(B u5Sb0LISTENER =
_&S;E?2H"^$iDr0ITPUB个人空间.mz'K+f``^B N3J
(DESCRIPTION_LIST =ITPUB个人空间^;x)M1O%@.q6g"T$F Q

Uc6W9AW!b'L$Pc0(DESCRIPTION =
$w&JO2d {0ITPUB个人空间"`.C)~Z%pMotYj;y
(ADDRESS_LIST =ITPUB个人空间!cxv` k
ITPUB个人空间 ^$XE#H0}dj[r#U"VG
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))ITPUB个人空间%QjPg&OY2\K
ITPUB个人空间^XS C.v:C(q/|]
(ADDRESS = (PROTOCOL = TCP)(HOST = server)(PORT = 1521))
#F)~4i$cA)af&cs {0ITPUB个人空间"[ B~,ZI{
)ITPUB个人空间^ e(Y2z T(R&H}8rf

~t%t3\~NF0)
;i%sh-E!Z$n0ITPUB个人空间8SFK+zK0Q1`9j8}/N+m
)ITPUB个人空间,V*R~s3S UB m9Wzk

1|t%~oWc B0在SID_LIST_LISTENER中增加SID_DESC记录ITPUB个人空间3q].gOkU3g'd vFf pU
ITPUB个人空间#^ k8G(}W pSJ8q
SID_LIST_LISTENER =ITPUB个人空间9bq8q6q&D&s O;Z

;O3f(R|1k0(SID_LIST =
Q^Fz@GH0ITPUB个人空间*EAe xG!|L
(SID_DESC =ITPUB个人空间t XR9x \[/]

[7w9o9g],k0(SID_NAME = PLSExtProc)
s [l!U%`o]0ITPUB个人空间 e@%V!Q E:~G
(ORACLE_HOME = /opt/oracle/app/oracle/product/8.1.5)
Mm)Ys;gYlS/d\.W0
1J n TV[J0^-Y0(PROGRAM = extproc)
%C8i PD*c2P+m"`0
,w5g.vYyIBR}0)
;d7Z T-T6ky3e8m0
"E(d!Im#b,Z0(SID_DESC =ITPUB个人空间F(BU Si1c.] lu
ITPUB个人空间%y5]b&cJ^
(GLOBAL_DBNAME = oraserver)
T%P$f)w\,j+\)u0ITPUB个人空间i/ub Q$S,L
(ORACLE_HOME = /opt/oracle/app/oracle/product/8.1.7)
0Rr\ JkBQ"K0ITPUB个人空间aob$S-J~n:c
(SID_NAME = oraserver)
\*w H9L5uxe%Tw0ITPUB个人空间&W{T,vV1km(@b{
)ITPUB个人空间4\$GX4i Qo4qEN |$Q

Tt.S'`FP-m;b&R$O,W#[0)ITPUB个人空间 qu.`ePh;k._C

\9@|%H/XO?0HOST可在/etc/hosts或DNS中配置,或直接写上IP地址ITPUB个人空间#E!I4|`wIS K2z!f#y#G:]
ITPUB个人空间.}%h,U!T-kael
注意:LISTENER和SID_LIST_LISTENER是成对出现的,可配置多个监听服务进程和相应的SID_LIST,如LISTENER_1和SID_LIST_LISTENER_1ITPUB个人空间`lD2wqpKG]_
ITPUB个人空间5oukFc,yy p bF(K
2.1.12.2 DB LinkITPUB个人空间CD1n!]@`e
ITPUB个人空间a^IC"O*Qj*j9u
如果client的instance需要在访问本地数据对象同时访问server中的数据对象,可在instance中创建对server的数据库连接,实现间接访问ITPUB个人空间7x tp^5y7@"I&[(PV

B[emmN2c0在tnsnames.ora中建立"db_server"配置ITPUB个人空间Ya _Up.G*H7KuD

2K"mwoD~p0sqlplus dbclient/passwd1ITPUB个人空间S:F(U+i[8cW

7UTn8fD+D*t0SQL>create database link server_link connect to dbserver identified by passwd using 'db_server';ITPUB个人空间9cr,hWu(cy
ITPUB个人空间(a/j#J+u~T6Y
使用emp@server_link访问server上的emp,如同访问本地instance中的数据对象一样。为了更方便的使用,可建立synonymITPUB个人空间 ^&R0~ t T"[KK/UaH

#\"rF:dH5Y\z]e#}(Pg5B02.2 Oracle 9iITPUB个人空间xk A7{,g BJL
ITPUB个人空间&h'w zBC*~&\l
Oracle 9i相较于Oracle 8&8i,在兼容Oracle 8&8i的基础上,回滚和临时表空间配置发生比较大的变化,导致建库操作出现一些不同。在数据库配置文件initoradb.ora中有关于回滚表空间的选项,详细情况在"数据库配置"中解释。而且Oracle 9i简化了表空间的创建。所以此小节主要描述Oracle 9i相对于Oracle 8i的差异,其它相同的操作可参考Oracle 8i。ITPUB个人空间5P`R({`%^ D5}4v{
ITPUB个人空间Ax Cm8tT&Q U
2.2.1 手工创建ITPUB个人空间;aL$Am bj;G"Q1K
ITPUB个人空间Sw~Jg
由于在Oracle 9i中工具dbassist的使用方法与在Oracle 8i中类似,因此工具建库过程省略,只记录手工建库过程
0R T_6lc;_fnc0
9Gs#]*V1|3[$h0Oracle 9i中的建库过程已经变得极为简洁,大致如下:
Yx.W)e|0_0ITPUB个人空间Tt2G(h ? yG
create database ${ORACLE_SID}ITPUB个人空间6v;P'j rR,jgL^ j y#S

F5feW M ?e0user sys identified by sys
m]HZh(k` i0ITPUB个人空间mTKdF(k OI
user system identified by systemITPUB个人空间k z$K N Z8X;Zi

X8wZ+w(LA0logfile group 1 ('${ORACLE_BASE}/oradata/${ORACLE_SID}/redo01.log') size 10M,
m"m pa,MQAr0
'FFo1K LTI M0group 2 ('${ORACLE_BASE}/oradata/${ORACLE_SID}/redo02.log') size 10M,
:Y|Aa6uqV0
z'c.hVjM z0group 3 ('${ORACLE_BASE}/oradata/${ORACLE_SID}/redo03.log') size 10M
]2R3~9BC G L0
~:L?mY2N+O5@.P0maxlogfiles 5
3r|I/Xo^g7{?3JP4q0ITPUB个人空间l8L7H;b1u1S{9\
maxlogmembers 5ITPUB个人空间XWRA*g6~6MO
ITPUB个人空间.X\4H5s!v?
maxloghistory 1
lD~Tjg_;d0
Q!fFf3[O/J0maxdatafiles 254 ITPUB个人空间o]0Fh*B*e.u*hNIz

T^{OL9DE:q0maxinstances 1ITPUB个人空间2r'wSiT\

2I4VCjiW/W0archivelogITPUB个人空间C f2M7S'olB.N

}XG&Bf x0v0character set ZHS32GB18030ITPUB个人空间_3l ix$e8m*fi

/dnv0@:_D"}s0national character set AL16UTF16
@Q i(v?N0ITPUB个人空间;ItmM\[xI
datafile '${ORACLE_BASE}/oradata/${ORACLE_SID}/system01.dbf' size 300MITPUB个人空间EhQ8o$C

+^b$d%L8{/M:Y@0default temporary tablespace tbstemp tempfile '${ORACLE_BASE}/oradata/${ORACLE_SID}/temp01.dbf' size 500MITPUB个人空间g*p*Km C
ITPUB个人空间0\ov8I6@
undo tablespace tbsundo datafile '${ORACLE_BASE}/oradata/${ORACLE_SID}/undo01.dbf' size 500M;ITPUB个人空间C-N/W#a)o0ND/^
ITPUB个人空间 } F#] C%x2]0l7U^
其特点为使用专用的回滚和临时表空间,而不象Oracle 8i中的那样,回滚和临时表空间与普通表空间没有差异,这样既简化了配置也有利于效能提高。要注意临时表空间的指定文件关键字是tempfile而不是通用的datafile,而且临时表空间的存储选项必须为uniform,由Oracle系统决定。同样回滚表空间也是由Oracle系统决定。不必人工干预。ITPUB个人空间rw5fij_ |+X&N

:|O~+u&Kk\F0Oracle 9i在$ORACLE_HOME/dbs下可使用二进制配置文件,缺省为spfile{实例名}.ora,如spfileoradb.ora,支持Oracle系统进程在不重启的情况下动态调整参数,这对要求不间断运行的系统是有利的。在建库阶段就可将此配置文件创建起来。
lY9q jp2BeQ0
u$U3A)nH:^ Z]0create spfile from pfile= '${ORACLE_BASE}/admin/${ORACLE_SID}/init${ORACLE_SID}.ora
~#kb(w.Cg:^t,F0J.fb5?0
A8|};v9pyoe3c0完整步骤见/9i/createdb.sh,编辑如pfile,数据文件目录等参数,以符合实际情况,并转移到$ORACLE_BASE/admin/oradb/create/下,执行。
:D2x-Kn$x~j8J+C*f0
F$kIz_"[ o(Y02.2.2 创建用户表空间ITPUB个人空间[A$g oOl$o
ITPUB个人空间)_*F+j? Fy&`] j5f
Oracle 9i对于表空间管理一个明显的变化是改数据字典管理(extent management dictionary)为表空间本地管理(extent management local),还可以根据建立的数据对象对空间的要求自动确定扩展块的大小(autoallocate),最小为64K,这两项都是创建表空间的缺省选项。ITPUB个人空间C1Vu,{"N5R] f

)wq+w,n2XRb*G(y0create tablespace tbsdata datafile '…' [ extent management local ] [ autoallocate ];
JN a;t0z\%R`0ITPUB个人空间7h GV%av
而对于指定每个扩展块大小的创建策略,设立了新选项:统一扩展块大小(uniform [size xxx[K|M]]),可覆盖autoallocate选项,如果不加上具体的size xxx[K|M],缺省为1M,这样就不必考虑Oracle 8i中的如initial,next,pctincrease,maxextents等default storage参数应如何组合,事实上Oracle 8i的这些设置原本就没有什么意义。ITPUB个人空间A3] T fnS\l
ITPUB个人空间Z7P[B5C4pNK \
不能够同时指定extent management local和default storage,换言之,default storage只能和extent management dictionary一起显式指定。
_/HQ)E3|c0ITPUB个人空间F!~ xa'|e~~
如果未指定extent management的类型,Oracle 9i缺省使用local方式,如果又同时使用default storage选项,就有以下的判断:
j-[!eGm1@#W0ITPUB个人空间/^],Q3og+G?2t
如果使用minimun extent,Oracle检查是否minumum extent=initial=next且pctincrease=0,如是,Oracle使用uniform选项,size=initial;如不是,Oracle忽略指定选项,使用autoallocate。
)r9D eP9g3SnXg8^%^0ITPUB个人空间D%Pb#\f2n
如果未指定minimum extent,Oracle检查是否initial=next且pctincrease=0,如是Oracle使用uniform选项,size=initial;如不是Oracle忽略指定选项,使用autoallocate。
"AP$o5y:WA'F!v+W%c6E*nY0ITPUB个人空间R#g[/c&]:vX @Vci
为了避免与Oracle 8i的习惯做法混淆,建议只使用Oracle 9i较简洁的方法。
Mpa\k0ITPUB个人空间&A#VH QQA
对于存储少量静态数据的表空间来说,如配置信息等,可简单地写为:ITPUB个人空间 p?4RQjzd
ITPUB个人空间+FZ1L)b'yj$P'IO
create tablespace tbsdata datafile '…';ITPUB个人空间rgZxd7DD3z
ITPUB个人空间|]WCxeA"Nk/|r
对于必须关心其扩展块大小的表空间,如大批量的记录或索引,可简单地写为:
.p(\+jtq T$L0ITPUB个人空间!LjhPe/O We#U!c2[
create tablespace tbsdata datafile '…' uniform size 10M;

r WH gn#h.@0

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-11-24  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 12228
  • 日志数: 273
  • 图片数: 1
  • 文件数: 2
  • 建立时间: 2007-12-01
  • 更新时间: 2008-11-19

RSS订阅

Open Toolbar