存档
今天下午用手工写create database命令的方式创建了一个测试库demo,执行了catalog.sql,catproc.sql,pupbld.sql这三个脚本后,也用orapwd工具创建了密码文件:
orapwd file=e:\oracle\db_1\database\orapwdemo.ora password=db entries=10
因为那台机器上原本有一个oracle实例在跑,所以就没有改listener.ora文件的内容。
在测试库demo的本机上连接实例demo的时候,没有问题。
set oracle_sid=demo
sqlplus /nolog
conn / as sysdba
能够连上!
C:\Documents and Settings\Administrator>set oracle_sid=demo
C:\Documents and Settings\Administrator>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 8月 10 17:28:21 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn / as sysdba
已连接。
SQL> show parameter db_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string demo
但是在远程电脑上,用system用户可以连接,用sys连接的时候报错:
SQL> conn sys/db@demo178 as sysdba
ERROR:
ORA-01031: insufficient privileges
解决办法:
下面的语法在oracle 10.2.0.1上面成功执行完成。在windows-xp和ubuntu上都成功创建了数据库实例。
CREATE DATABASE demo
MAXDATAFILES 500
MAXINSTANCES 10
MAXLOGFILES 32
NOARCHIVELOG
DATAFILE
'E:\ORACLE\ORADATA\DEMO\SYSTEM01.DBF'
SIZE 300M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL
SYSAUX DATAFILE 'E:\ORACLE\ORADATA\DEMO\SYSAUX01.DBF'
SIZE 300M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE 'E:\ORACLE\ORADATA\DEMO\TEMP01.DBF' SIZE 100M
AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
UNDO TABLESPACE "UNDOTBS1"
DATAFILE 'E:\ORACLE\ORADATA\DEMO\UNDOTBS01.DBF' SIZE 200M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
DEFAULT TABLESPACE USERS
DATAFILE 'E:\ORACLE\ORADATA\DEMO\USERS01.DBF' SIZE 100M
LOGFILE
GROUP 1 ('E:\ORACLE\ORADATA\DEMO\REDO01.LOG') SIZE 50M,
GROUP 2 ('E:\ORACLE\ORADATA\DEMO\REDO02.LOG') SIZE 50M,
GROUP 3 ('E:\ORACLE\ORADATA\DEMO\REDO03.LOG') SIZE 50M
CHARACTER SET ZHS16GBK
NATIONAL CHARACTER SET AL16UTF16;
手工创建完数据库后,要执行创建数据字典的sql文件。
在sqlplus中执行:
sql> @$ORACLE_HOME/rdbms/admin/catalog.sql;
sql> @$ORACLE_HOME/rdbms/admin/catproc.sql
sql> @$ORACLE_HOME/sqlplus/admin/pupbld.sql;
生成密码文件
在目录$ORACLE_HOME/dbs下面必须有密码文件,才能使得远程用户以sys连接数据库。oracle10g中的密码文件名称格式为:pwd$oracle_sid.ora
用命令工具生成:
orapwd file=$ORACLE_HOME/dbs/pwd$ORACLE_SID.ora password=test123 entries=10
这样就在目录$ORACLE_HOME/dbs下面生成了密码文件:pwd$ORACLE_SID.ora,密码为:test123,允许最多10个用户以sys连接。
————————————————————————————————————
——— 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
——— 转载务必注明原始出处 : http://www.dbainfo.net
——— 关键字: oracle10g create database command line 命令行创建数据库
no-gui windows linux
————————————————————————————————————
手动创建数据库的时候报ORA-02778错误。ORA-02778: Name given for the log directory is invalid
原因是 :$ORACLE_BASE/admin/$ORACLE_SID里面的一些目录没有创建好,比如:bdump,cdump,pfile,udump
另外:oracle 10G的log_archive_format 参数不能随便改,否则会启动不了数据库.
会报以下错误:ORA-32004: obsolete and/or deprecated parameter(s) specified
ORA-19905: log_archive_format must contain %s, %t and %r
解决办法 :修改后以pfile方式进去,创建spfile.
创建表空间
create tablespace dultest datafile 'e:\oracle\oradata\orcl\dultest.dbf'
size 100m autoextend on next 100m maxsize unlimited
default storage(
initial 20M
next 20M
minextents 1
maxextents unlimited
pctincrease 0
);
表空间仅有一个数据文件,数据文件初始大小为100m,以后增长幅度为100m,不限制上限。表空间dultest内的对象的默认的空间分配信息为:对象初始大小为20m,后续空间增长幅度为20m。
通过系统视图查看表空间的信息:
SQL> set linesize 2000
SQL> col tablespace_name format a16
SQL> col datafile_name format a40
SQL> select ts.ts#,ts.name tablespace_name,file#, df.name datafile_name,block_size,blocks,bytes,status,enabled
2 from v$tablespace ts,v$datafile df
3 where ts.ts# = df.ts# and ts.name='DULTEST';
TS# TABLESPACE_NAME FILE# DATAFILE_NAME BLOCK_SIZE BLOCKS BYTES STATUS ENABLED
---------- ---------------- ---------- ---------------------------------------- ---------- ---------- ---------- ------- ----------
8 DULTEST 6 E:\ORACLE\ORADATA\ORCL\DULTEST.DBF 8192 25600 209715200 ONLINE READ WRITE
SQL>
删除表空间及其表空间内所有的对象
drop tablespace dultest including contents and datafiles;
转自:http://space.itpub.net/?uid-7656893-action-viewspace-itemid-664954
第一步:计算整个Block Header的大小
数据块头部所需要的空间大小由以下公式计算:
Space after headers (hsize) = DB_BLOCK_SIZE - KCBH - UB4 - KTBBH - ((INITRANS - 1) * KTBIT) - KDBH
其中的一些参数说明如下:
DB_BLOCK_SIZE:数据库的block大小,可以查询V$PARAMETER视图中获得。
KCBH、UB4、KTBBH、KTBIT、KDBH都是常量,这些定义的大小可以从V$TYPE_SIZE视图中获得。
INITRANS是分配给表的初始化事务的数量,可以从USER_TABLES表中的INI_TRANS字段中获得。
第二步:计算每个数据块可用的数据空间
每个数据块为数据保留的空间是由PCTFREE参数所指定的,因此计算公式如下:
Available data space (availspace) = CEIL(hsize * (1 - PCTFREE/100))
– KDBT
其中的一些参数说明如下:
CEIL是取大于或者等于N的最小整数。
PCTFREE是在表中预留出来用于UPDATE操作的空间,可以从USER_TABLES表中的PCT_FREE字段中获得。
KDBT是常量,定义的大小可以从V$TYPE_SIZE视图中获得。如果你找不到KDBT的定义大小,用UB4定义的大小代替也可以。
第三步:计算每行所用的空间大小
计算每行所使用的空间大小是需要多步计算完成的。
首先计算列的大小,包括字节的长度:
Column size including byte length = column size + (1, if column size < 250, else 3)
对于列的大小,既可以利用经验来判断其大小,也可以使用语句来计算每列的大小:
Select avg(vsize(colname)) from table_name;
接着,计算行的大小:
Rowsize = row header (3 * UB1) + sum of column sizes including length bytes
最后,计算每行所用的空间大小:
Space used per row (rowspace) = MAX(UB1 * 3 + UB4 + SB2, rowsize) + SB2
UB1、UB4、SB2都是常量,定义的大小可以从V$TYPE_SIZE视图中获得。
当每行所占用的空间超过了一个数据块可用的空间的大小,但是仍然小于每个数据块保留给UPDATE操作的空间大小(例如,PCTFREE=0),每行记录将仍然被存储在它们自己的block块中。
当每行的空间大小超过了每个数据块可用的空间,并且没有任何保留给UPDATE操作的空间可用了,此时,这行记录将被链接到另外一个block或者更多,因此,这个时候的存储的负载会比较高。
第四步:计算在一个block中可以容纳最多的记录数量
可以使用下面的公式来计算一个数据block中可以容纳的记录的数量:
Number of rows in block = FLOOR(availspace / rowspace)
FLOOR是取小于N的最大整数。
这个过程只是提供一个大致的估算一个表的大小,而不是精确的去计算的。在大致的估算出一个表的大小之后,我们可以利用这个信息来判定在创建表的时候究竟使 用多大的INITIAL这个存储参数。当表被创建后开始使用了,空间的需求往往是大于我们通过计算得出的估计值。
在oracle中显示分页很简单, 利用两次rownum就实现了。
下面的语句用来返回DBA_OBJECTS表中类型为TABLE的所有记录中的第100行至第200行。
select * from
( select rownum rnm, a.* from ( select OBJECT_NAME from DBA_OBJECTS where object_type='TABLE' ) a
where rownum <= 200 )
where rnm > 100
执行结果为:
SQL> select * from
2 ( select rownum rnm, a.* from ( select OBJECT_NAME from DBA_OBJECTS where object_type='TABLE' ) a
3 where rownum <= 200 )
4 where rnm > 100
5 ;
RNM OBJECT_NAME
---------- --------------------------------------------------------------------------------------------------------------------
101 HISTGRM$
102 HIST_HEAD$
103 DUAL
104 PARTOBJ$
105 PARTCOL$
106 TABPART$
107 INDPART$
108 SUBPARTCOL$
109 TABSUBPART$
110 INDSUBPART$
111 TABCOMPART$
RNM OBJECT_NAME
---------- --------------------------------------------------------------------------------------------------------------------
112 INDCOMPART$
113 PARTLOB$
114 LOBFRAG$
115 LOBCOMPPART$
116 DEFSUBPART$
117 DEFSUBPARTLOB$
118 SYSTEM_PRIVILEGE_MAP
119 TABLE_PRIVILEGE_MAP
120 STMT_AUDIT_OPTION_MAP
121 RESOURCE_MAP
122 USER_ASTATUS_MAP
RNM OBJECT_NAME
---------- --------------------------------------------------------------------------------------------------------------------
123 EXPACT$
124 NOEXP$
125 PROCEDUREJAVA$
126 PROCEDUREC$
127 PROCEDUREPLSQL$
128 RESULT$
129 KOTTD$
130 KOTTB$
131 KOTAD$
132 KOTMD$
133 KOTTBX$
RNM OBJECT_NAME
---------- --------------------------------------------------------------------------------------------------------------------
134 KOTADX$
135 KOPM$
136 VTABLE$
137 ATEMPTAB$
138 LIBRARY$
139 USER_HISTORY$
140 MIGRATE$
141 ICOLDEP$
142 OPERATOR$
143 OPBINDING$
144 OPANCILLARY$
RNM OBJECT_NAME
---------- --------------------------------------------------------------------------------------------------------------------
145 OPARG$
146 INDTYPES$
147 INDOP$
148 INDARRAYTYPE$
149 SECOBJ$
150 ASSOCIATION$
151 USTATS$
152 JAVASNM$
153 SUM$
154 SUMDETAIL$
155 SUMINLINE$
RNM OBJECT_NAME
---------- --------------------------------------------------------------------------------------------------------------------
156 SUMKEY$
157 SUMAGG$
158 SUMJOIN$
159 SUMDEP$
160 SUMPRED$
161 SUMQB$
162 DIM$
163 DIMLEVEL$
164 DIMLEVELKEY$
165 DIMJOINKEY$
166 DIMATTR$
RNM OBJECT_NAME
---------- --------------------------------------------------------------------------------------------------------------------
167 HIER$
168 HIERLEVEL$
169 RLS$
170 RLS_SC$
171 RLS_GRP$
172 RLS_CTX$
173 CONTEXT$
174 RULESET$
175 INDPART_PARAM$
176 OL$
177 OL$HINTS
RNM OBJECT_NAME
---------- --------------------------------------------------------------------------------------------------------------------
178 OL$NODES
179 SQL$
180 SQL$TEXT
181 SQLPROF$
182 SQLPROF$DESC
183 SQLPROF$ATTR
184 EXPPKGOBJ$
185 EXPPKGACT$
186 EXPDEPOBJ$
187 EXPDEPACT$
188 MON_MODS$
RNM OBJECT_NAME
---------- --------------------------------------------------------------------------------------------------------------------
189 MON_MODS_ALL$
190 METAVIEW$
191 METAFILTER$
192 METAXSL$
193 METAXSLPARAM$
194 METASTYLESHEET
195 METASCRIPT$
196 METASCRIPTFILTER$
197 METANAMETRANS$
198 METAPATHMAP$
199 EXTERNAL_TAB$
RNM OBJECT_NAME
---------- --------------------------------------------------------------------------------------------------------------------
200 EXTERNAL_LOCATION$
已选择100行。
SQL>
总结:在oracle中利用rownum产生伪列真的是太方便了, 尤其利用派生表再加上伪列可以写出很复杂的sql语句来。
比ASE和IQ的实现方式强N倍。 哎,可叹的sybase啊。
————————————————————————————————-
—- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
—- 转载务必注明原始出处 : http://www.dbainfo.net
—- 关键字:oracle 分页 rownum
————————————————————————————————-