- 浏览: 109731 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
zjqzfyc:
项目开发文档——测试计划 -
kyng:
不能动 吖。。。 这程序 实现的正方形
一个Java3D 应用程序 -
kyng:
可以玩 。。试试了 下
swing做贪吃蛇游戏 -
tl_nicole:
小弟最近正在学习JAVA3D,求楼主源码学习~~不甚感激
Canvas3D -
peijunlin2008:
DECLARE H_SETTLE SCROLL CURSO ...
游标的实例
help index
column aa format a22
set pause on
select * from v$parameter
create spfile from pfile
create table space
datafile
' ' size 100k reuse
autoextend on next 100k maxsize 10m
spo aa.txt
select ====
spo off
手工创建数据库完整步骤
系统环境
操作系统:RedHat 9.2
数据库:Oracle 9i
安装路径:/home/oracle
1、手工创建相关目录
/home/oracle/admin/web
/home/oracle/admin/web/bdump
/home/oracle/admin/web/udump
/home/oracle/admin/web/cdump
/home/oracle/admin/web/pfile
/home/oracle/admin/web/create
/home/oracle/admin/web/web
/home/oracle/admin/web/archive
/home/oracle/oradata
/home/oracle/oradata/web
/home/oracle/oradata/web/archive
2、手工创建初始化参数文件/home/oracle/admin/web/pfile/initweb.ora,内容可以copy别的实例initsid.ora文件后修改。
3、手工创建/home/oracle/OraHome1/dbs/initweb.ora文件,
内容:ifile= /home/oracle/admin/web/pfile/initweb.ora
4、使用orapwd命令,创建口令文件orapwdsid,命令格式如下:
orapwd file=/home/oracle/OraHome1/dbs/orapwweb password=change_on_install entries=5
5、设置环境变量
export PATH LD_ASSUME_KERNEL=2.4.1
export ORACLE_BASE=/home/oracle
export ORACLE_HOME=/home/oracle/OraHome1
export ORACLE_SID=web
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export PATH=$PATH: $ORACLE_HOME/bin
6、创建数据库,执行createdb.sql脚本命令,
$ sqlplus /nolog
SQL>connect sys/change_on_install as sysdba
SQL>@Createdb.sql
Createdb.sql脚本内容如下:
set echo on
spool /home/oracle/admin/web/create/CreateDB.log
startup nomount pfile="/home/oracle/admin/web/pfile/initweb.ora";
CREATE DATABASE web
MAXINSTANCES 1
MAXLOGHISTORY 1
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXDATAFILES 100
DATAFILE '/home/oracle/oradata/web/system01.dbf' SIZE 325M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
UNDO TABLESPACE "UNDOSTB1" DATAFILE '/home/oracle/oradata/web/undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
CHARACTER SET ZHS16GBK
NATIONAL CHARACTER SET AL16UTF16
LOGFILE GROUP 1 ('/home/oracle/oradata/web/redo01.log') SIZE 100M,
GROUP 2 ('/home/oracle/oradata/web/redo02.log') SIZE 100M,
GROUP 3 ('/home/oracle/oradata/web/redo03.log') SIZE 100M;
spool off
注:创建数据库时,执行sql.bsqj脚本命令,此脚本命令创建如下内容:
创建控制文件和联机日志文件
创建数据库系统表空system
在system表空间上创建system系统回滚段
创建sys和system账号
创建基表和簇
创建数据字典表、索引和序列
创建相关角色权限
7、创建数据库数据文件,执行脚本createfiles.sql
$sqlplus /nolog
SQL> connect sys/change_on_install as sysdba
SQL>@createfiles.sql
Createfiles.sql脚本内容如下:
set echo on
spool /home/oracle/admin/web/create/CreateDBFiles.log
CREATE TABLESPACE "INDX" LOGGING DATAFILE '/home/oracle/oradata/web/indx01.dbf' SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
CREATE TEMPORARY TABLESPACE "TEMP" TEMPFILE '/home/oracle/oradata/web/temp01.dbf' SIZE 40M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE "TEMP";
CREATE TABLESPACE "TOOLS" LOGGING DATAFILE '/home/oracle/oradata/web/tools01.dbf' SIZE 10M REUSE AUTOEXTEND ON NEXT 320K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
CREATE TABLESPACE "USERS" LOGGING DATAFILE '/home/oracle/oradata/web/users01.dbf' SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
CREATE UNDO TABLESPACE "UNDOSTB1" DATAFILE '/home/oracle/oradata/web/undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K;
spool off
exit;
~8、创建数据字典,运行createdbcatalog.sql脚本命令
$sqlplus /nolog
SQL> connect sys/change_on_install as sysdba
SQL>@createdbcatalog.sql
Createdbcatalog.sql脚本内容如下:
set echo on
spool /home/oracle/admin/web/create/CreateDBCatalog.log
@/home/oracle/OraHome1/rdbms/admin/catalog.sql;
@/home/oracle/OraHome1/rdbms/admin/catexp7.sql;
@/home/oracle/OraHome1/rdbms/admin/catblock.sql;
@/home/oracle/OraHome1/rdbms/admin/catproc.sql;
@/home/oracle/OraHome1/rdbms/admin/catoctk.sql;
@/home/oracle/OraHome1/rdbms/admin/catobtk.sql;
@/home/oracle/OraHome1/rdbms/admin/caths.sql;
@/home/oracle/OraHome1/rdbms/admin/owminst.plb;
connect SYSTEM/manager
@/home/oracle/OraHome1/sqlplus/admin/pupbld.sql;
connect SYSTEM/manager
set echo on
spool /home/oracle/OraHome1/assistants/dbca/logs/sqlPlusHelp.log
@/home/oracle/OraHome1/sqlplus/admin/help/hlpbld.sql helpus.sql;
spool off
spool off
exit;9、完善数据库,创建spfile文件,将数据库实例启动服务设置成自动启动方式。
SQL>sqlplus /nolog
SQL> connect sys/change_on_install as sysdba
SQL> @postdbcreation.sql
Postdbcreation.sql脚本内容如下:
set echo on
spool /home/oracle/admin/web/create/postDBCreation.log
create spfile='/home/oracle/OraHome1/database/spfileweb.ora' FROM pfile='/home/oracle/admin/web/pfile/initweb.ora';
connect SYS/change_on_install as SYSDBA
set echo on
spool /home/oracle/OraHome1/assistants/dbca/logs/postDBCreation.log
shutdown;
startup;
注:1.如果create undo tablespace 出错,initweb.ora可能需要添加
undo_management=AUTO
undo_tablespace=UNDOSTB1
2.Create db 中的错误日志在/home/oracle/oradata/web/bdump
3. 密码文件可以多个库共享则文件名为orapw,同时需要在pfile文件指明为共享模式
否则密码文件为orapwsid.,找不到此文件,则找orapw文件
以前搜集的一个Oracle比较常见问题的列表,忘记了是从哪来的
关于 SELECT N 问题
有感于一些网友多次咨询和讨论选取某些指定行数据的问题, 我写了下面这样的简单说明, 请大家指正.
这里描述的 SELECT N 包括这样几种情况:
1. 选取TOP N行记录
2. 选取N1-N2行记录
3. 选取FOOT N行记录
当然需要考虑是否有ORDER BY子句的情况, 下面试以系统视图CAT为例分别说明.
注: A. 为没有ORDER BY的情况
B. 有ORDER BY的情况
1. 选取 TOP N 行记录
A. SELECT * FROM CAT WHERE ROWNUM<=N
B. SELECT * FROM
( SELECT * FROM CAT ORDER BY TABLE_TYPE )
WHERE ROWNUM<=N
2. 选取N1-N2行记录
A. SELECT TABLE_NAME,TABLE_TYPE FROM
( SELECT ROWNUM ROWSEQ,TABLE_NAME,TABLE_TYPE FROM CAT )
WHERE ROWSEQ BETWEEN N1 AND N2;
或:
SELECT * FROM CAT WHERE ROWNUM<=N2
MINUS
SELECT * FROM CAT WHERE ROWNUM<N1
B. SELECT TABLE_NAME,TABLE_TYPE FROM
( SELECT ROWNUM ROWSEQ,X.* FROM (SELECT * FROM CAT ORDER BY TABLE_TYPE) X)
WHERE ROWSEQ BETWEEN N1+1 AND N2;
3. 选取FOOT N行记录
这里是说明不知道记录集的记录个数的情况, 如果已知, 用上面2的方法即可
A. SELECT TABLE_NAME,TABLE_TYPE FROM
( SELECT ROWNUM ROWSEQ,TABLE_NAME,TABLE_TYPE FROM CAT )
WHERE ROWSEQ > ( SELECT COUNT(*)-N FROM CAT )
B. SELECT TABLE_NAME,TABLE_TYPE FROM
( SELECT ROWNUM ROWSEQ,TABLE_NAME,TABLE_TYPE FROM CAT ORDER BY TABLE_TYPE)
WHERE ROWSEQ > ( SELECT COUNT(*)-N FROM CAT )
或
SELECT * FROM
( SELECT TABLE_NAME,TABLE_TYPE FROM CAT ORDER BY TABLE_TYPE DESC)
WHERE ROWNUM<=N
以上在ORACLE8.1.5 for Windows2000pro 上测试通过
-- end --
oracle FAQ(1) from chao_ping
1.快速整理破碎的表(在Oracle8i里边才可以这样使用)
ALTER TABLE table_name MOVE ( TABLESPACE XXX);
如何移动一张表所在的表空间
方法一:
1. Export 这张表
2. Drop这张表
3. Create table xxx tablespace xxx;
4. Imp Ignore=y
还要注意的一点是,所有要读取这张表的PL/SQL储存过程都会失效。需要重新编译。
1. SELECT * FROM DBA_OBJECTS WHERE STATUS = 'INVALID';
2. 对这些包,函数,过程重新编译。
方法二:
仅对Oracle8i适用。
使用下面的语句:
ALTER TABLE table_name MOVE
TABLESPACE new_tablespace;
这样的话,所有的约束、索引、触发器都不会受到影响。
但是需要rebuild这个标上的所有索引。
2.怎样直接进入sql*plus而不用输入用户名,密码:
sqlplus /nolog;
sqlplus username/password@connect_string
3.怎样快速重建索引:
alter index xxx rebuild storage();
alter index xxx coalesce;
4. 为什么我看不到dbms_output的结果?
SET SERVEROUTPUT ON
5. 进行一次大的事务以后,已经COMMIT了,但为什么我的回滚段还是那样大?
因为没有设置OPTIMAL的值,所以不会自动收缩。
可以用alter rollback segment shrink to Xm;来手工进行收缩。
6. 为什么要使用VARCHAR2,而不用CHAR?
A.CHAR只支持2000字节长,而VARCHAR2支持4000字节的长度,适用性更好
B. CHAR 占用更多的存储空间,定义多长,它就占用多长的空间,插入字符后面自动加空格填充;而VARCHAR2不论定义多长,都只使用实际插入的长度。
7. 为什么从不同的数据字典看,表/索引所占用的空间不一样?
SQL> select blocks , empty_blocks from dba_tables where table_name=’表名';
BLOCKS EMPTY_BLOCKS
---------- ------------
1575 1524
SQL> select bytes,blocks,extents from dba_segments where segment_name='表名';
BYTES BLOCKS EXTENTS
---------- - --------- ----------
6348800 3100 1
这是因为第一个数据库视图DBA_TABLES的BLOCKS列是指实际上使用的BLOCK数目,还有一些BLOCK虽然被占用了,但是没有数据存在,不计入里边。而在DBA_SEGMENTS这个数据库视图里边,BLOCKS列是指这个表总共占用的BLOCK的数目,包括有数据和没有数据的BLOCK总量。如果把第一个视图里边的BLOCKS和EMPTY_BLOCKS地总和加起来,正好等于第二个视图的BLOCKS列的大小。
8. 怎样把数据库的一张,多张表存为一个普通的文本文件?
可以在SQL*Plus里边用SPOOL命令把选出来的数据保存在SPOOL指定的文件里边。
9. 怎样从一张表里删除重复的记录
SQL> SELECT * FROM EMP;
EMP_ID OFFICE_ID EMPNAME
305 12 ELLISON, GEORGE
305 12 MERCURIO, JASON
128 17 SIMPSON, LINDA
305 22 JACKSON, DREW
使用下面的SQL语句来识别那些重复的记录:
SQL> SELECT COUNT(*), EMP_ID, OFFICE_ID
FROM EMP
GROUP BY EMP_ID, OFFICE_ID
HAVING COUNT(*) > 1;
结果如下:
COUNT(*) EMP_ID OFFICE_ID
2 305 12
Table Example, with duplicate values:
SQL> SELECT * FROM EMP;
EMP_ID OFFICE_ID EMPNAME
305 12 ELLISON, GEORGE
305 12 MERCURIO, JASON
128 17 SIMPSON, LINDA
305 22 JACKSON, DREW
使用下面的语句来删除重复的记录:
SQL> DELETE FROM EMP A WHERE
(EMP_ID, OFFICE_ID, 2) IN
(SELECT EMP_ID, OFFICE_ID, decode(count(*),1,1,2)
FROM EMP B
WHERE A.EMP_ID=B.EMP_ID AND
A.OFFICE_ID = B.OFFICE_ID
GROUP BY EMP_ID, OFFICE_ID);
10. 怎样在SQL*PLUS里想数据库插入特殊字符?
可以使用CHR函数。
11. 怎样删除一个列?
在Oracle8i里边,可以直接Drop一个列。语法为alter table table_name drop column_name;
但是注意要在initsid.ora里边设定compatible=8.1.0以上。
12. 怎样重命名一个列?
1 alter table "table_name" add
(new_column_name data_type);
2 update table_name set new_column_name =
old_column_name where rowid=rowid;
3 alter table table_name drop column
old_column_name;
13. 怎样快速清空一张表?
Truncate table table_name;
14. 怎样为事务指定一个大的回滚段?
Set transaction use rollback segment rbs_name;
15. 怎样知道一张表上有那些权限赋予了哪些人,给他们了什么权限?
select * from dba_tab_privs where table_name='表名';
16. 怎么发现是谁锁住了你需要的一张表?
Select object_id from v$locked_object;
Select object_name, object_type from dba_objects where object_id=’’;
每次清空一张表的时候,(使用truncate),这张表的存储参数NEXT自动复位到最后被删除的那个extent的大小。同样,如果显式地从一张表里边释放空间,NEXT参数也会自动被设置成最后被释放的那个extent的大小。
在SQL*Plus里边可以为一个事务指定一个回滚段:这在有大的事务将要发生的话时候还是很有用的。使用下面的语句可以为这个事务指定一个回滚段:
SQL>SET TRANSACTION USE ROLLABCK SEGMENT 回滚段名称;
还可以在PL/SQL里边为一个事务指定一个回滚段(不使用动态sql语句)。这个需要使用Oracle提供的包:DBMS_TRANSACTION.USE_ROLLBACK_SEGMENT(‘回滚段名称’);
在有些平台上的Oracle,在启动的时候会自动生成一个sgadefSID.dbf,用这个文件是否存在就可以判断一个实例是否在运行。这个文件包含了SGA在内存中的地址。在数据库关闭的时候,Oracle会自动删除这个文件。但是在Oracle8i里边,这个文件不再存在了。需要使用新的判断方式来断定究竟某个实例是否在运行。比如PS命令。
在Oracle7里边,想要知道数据文件是否可以自动扩展,必须从sys.filext$这张表里边查取,但是在Oracle8里边,从dba_data_files里边就可以知道数据文件是否可以自动扩展了。
从Oracle8i开始,可以创建另一类数据库一级的触发器,比如数据库启动、关闭,用户登录、注销等事务,都可以触发这个事件的发生,从而作某些记录。在数据库一级定义的触发器会在所有用户相应事件发生的时候触发,而在Schema一级定义的触发器只有在某个特定用户的相应事件发生的时候才会触发。
从Oracle8i开始,多了一种关闭数据库的方式:SHUTDOWN TRANSACTIONAL。这种方式允许所有的用户提交它们的工作。但是一旦提交之后就马上被切断联接,等所有用户都完成了各自的事务,shutdown就开始了。
从Oracle8开始,可以创建临时表,这些表的定义对于所有该用户的会话都是可以看到的,但是每个会话查询、插入、删除的数据和别的会话查询、插入、删除的数据都是不相关的。就像每个会话都分别有这样一份表一样。
从Oracle8i开始,对于那些没有进行分区的表,可以不用IMP/EXP就可以快速重组。
查看当前用户每个表占用空间的大小:
Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name
查看每个表空间占用空间的大小:
Select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name
<PIXTEL_MMI_EBOOK_2005>11 </PIXTEL_MMI_EBOOK_2005>
column aa format a22
set pause on
select * from v$parameter
create spfile from pfile
create table space
datafile
' ' size 100k reuse
autoextend on next 100k maxsize 10m
spo aa.txt
select ====
spo off
手工创建数据库完整步骤
系统环境
操作系统:RedHat 9.2
数据库:Oracle 9i
安装路径:/home/oracle
1、手工创建相关目录
/home/oracle/admin/web
/home/oracle/admin/web/bdump
/home/oracle/admin/web/udump
/home/oracle/admin/web/cdump
/home/oracle/admin/web/pfile
/home/oracle/admin/web/create
/home/oracle/admin/web/web
/home/oracle/admin/web/archive
/home/oracle/oradata
/home/oracle/oradata/web
/home/oracle/oradata/web/archive
2、手工创建初始化参数文件/home/oracle/admin/web/pfile/initweb.ora,内容可以copy别的实例initsid.ora文件后修改。
3、手工创建/home/oracle/OraHome1/dbs/initweb.ora文件,
内容:ifile= /home/oracle/admin/web/pfile/initweb.ora
4、使用orapwd命令,创建口令文件orapwdsid,命令格式如下:
orapwd file=/home/oracle/OraHome1/dbs/orapwweb password=change_on_install entries=5
5、设置环境变量
export PATH LD_ASSUME_KERNEL=2.4.1
export ORACLE_BASE=/home/oracle
export ORACLE_HOME=/home/oracle/OraHome1
export ORACLE_SID=web
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export PATH=$PATH: $ORACLE_HOME/bin
6、创建数据库,执行createdb.sql脚本命令,
$ sqlplus /nolog
SQL>connect sys/change_on_install as sysdba
SQL>@Createdb.sql
Createdb.sql脚本内容如下:
set echo on
spool /home/oracle/admin/web/create/CreateDB.log
startup nomount pfile="/home/oracle/admin/web/pfile/initweb.ora";
CREATE DATABASE web
MAXINSTANCES 1
MAXLOGHISTORY 1
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXDATAFILES 100
DATAFILE '/home/oracle/oradata/web/system01.dbf' SIZE 325M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
UNDO TABLESPACE "UNDOSTB1" DATAFILE '/home/oracle/oradata/web/undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
CHARACTER SET ZHS16GBK
NATIONAL CHARACTER SET AL16UTF16
LOGFILE GROUP 1 ('/home/oracle/oradata/web/redo01.log') SIZE 100M,
GROUP 2 ('/home/oracle/oradata/web/redo02.log') SIZE 100M,
GROUP 3 ('/home/oracle/oradata/web/redo03.log') SIZE 100M;
spool off
注:创建数据库时,执行sql.bsqj脚本命令,此脚本命令创建如下内容:
创建控制文件和联机日志文件
创建数据库系统表空system
在system表空间上创建system系统回滚段
创建sys和system账号
创建基表和簇
创建数据字典表、索引和序列
创建相关角色权限
7、创建数据库数据文件,执行脚本createfiles.sql
$sqlplus /nolog
SQL> connect sys/change_on_install as sysdba
SQL>@createfiles.sql
Createfiles.sql脚本内容如下:
set echo on
spool /home/oracle/admin/web/create/CreateDBFiles.log
CREATE TABLESPACE "INDX" LOGGING DATAFILE '/home/oracle/oradata/web/indx01.dbf' SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
CREATE TEMPORARY TABLESPACE "TEMP" TEMPFILE '/home/oracle/oradata/web/temp01.dbf' SIZE 40M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE "TEMP";
CREATE TABLESPACE "TOOLS" LOGGING DATAFILE '/home/oracle/oradata/web/tools01.dbf' SIZE 10M REUSE AUTOEXTEND ON NEXT 320K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
CREATE TABLESPACE "USERS" LOGGING DATAFILE '/home/oracle/oradata/web/users01.dbf' SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
CREATE UNDO TABLESPACE "UNDOSTB1" DATAFILE '/home/oracle/oradata/web/undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K;
spool off
exit;
~8、创建数据字典,运行createdbcatalog.sql脚本命令
$sqlplus /nolog
SQL> connect sys/change_on_install as sysdba
SQL>@createdbcatalog.sql
Createdbcatalog.sql脚本内容如下:
set echo on
spool /home/oracle/admin/web/create/CreateDBCatalog.log
@/home/oracle/OraHome1/rdbms/admin/catalog.sql;
@/home/oracle/OraHome1/rdbms/admin/catexp7.sql;
@/home/oracle/OraHome1/rdbms/admin/catblock.sql;
@/home/oracle/OraHome1/rdbms/admin/catproc.sql;
@/home/oracle/OraHome1/rdbms/admin/catoctk.sql;
@/home/oracle/OraHome1/rdbms/admin/catobtk.sql;
@/home/oracle/OraHome1/rdbms/admin/caths.sql;
@/home/oracle/OraHome1/rdbms/admin/owminst.plb;
connect SYSTEM/manager
@/home/oracle/OraHome1/sqlplus/admin/pupbld.sql;
connect SYSTEM/manager
set echo on
spool /home/oracle/OraHome1/assistants/dbca/logs/sqlPlusHelp.log
@/home/oracle/OraHome1/sqlplus/admin/help/hlpbld.sql helpus.sql;
spool off
spool off
exit;9、完善数据库,创建spfile文件,将数据库实例启动服务设置成自动启动方式。
SQL>sqlplus /nolog
SQL> connect sys/change_on_install as sysdba
SQL> @postdbcreation.sql
Postdbcreation.sql脚本内容如下:
set echo on
spool /home/oracle/admin/web/create/postDBCreation.log
create spfile='/home/oracle/OraHome1/database/spfileweb.ora' FROM pfile='/home/oracle/admin/web/pfile/initweb.ora';
connect SYS/change_on_install as SYSDBA
set echo on
spool /home/oracle/OraHome1/assistants/dbca/logs/postDBCreation.log
shutdown;
startup;
注:1.如果create undo tablespace 出错,initweb.ora可能需要添加
undo_management=AUTO
undo_tablespace=UNDOSTB1
2.Create db 中的错误日志在/home/oracle/oradata/web/bdump
3. 密码文件可以多个库共享则文件名为orapw,同时需要在pfile文件指明为共享模式
否则密码文件为orapwsid.,找不到此文件,则找orapw文件
以前搜集的一个Oracle比较常见问题的列表,忘记了是从哪来的
关于 SELECT N 问题
有感于一些网友多次咨询和讨论选取某些指定行数据的问题, 我写了下面这样的简单说明, 请大家指正.
这里描述的 SELECT N 包括这样几种情况:
1. 选取TOP N行记录
2. 选取N1-N2行记录
3. 选取FOOT N行记录
当然需要考虑是否有ORDER BY子句的情况, 下面试以系统视图CAT为例分别说明.
注: A. 为没有ORDER BY的情况
B. 有ORDER BY的情况
1. 选取 TOP N 行记录
A. SELECT * FROM CAT WHERE ROWNUM<=N
B. SELECT * FROM
( SELECT * FROM CAT ORDER BY TABLE_TYPE )
WHERE ROWNUM<=N
2. 选取N1-N2行记录
A. SELECT TABLE_NAME,TABLE_TYPE FROM
( SELECT ROWNUM ROWSEQ,TABLE_NAME,TABLE_TYPE FROM CAT )
WHERE ROWSEQ BETWEEN N1 AND N2;
或:
SELECT * FROM CAT WHERE ROWNUM<=N2
MINUS
SELECT * FROM CAT WHERE ROWNUM<N1
B. SELECT TABLE_NAME,TABLE_TYPE FROM
( SELECT ROWNUM ROWSEQ,X.* FROM (SELECT * FROM CAT ORDER BY TABLE_TYPE) X)
WHERE ROWSEQ BETWEEN N1+1 AND N2;
3. 选取FOOT N行记录
这里是说明不知道记录集的记录个数的情况, 如果已知, 用上面2的方法即可
A. SELECT TABLE_NAME,TABLE_TYPE FROM
( SELECT ROWNUM ROWSEQ,TABLE_NAME,TABLE_TYPE FROM CAT )
WHERE ROWSEQ > ( SELECT COUNT(*)-N FROM CAT )
B. SELECT TABLE_NAME,TABLE_TYPE FROM
( SELECT ROWNUM ROWSEQ,TABLE_NAME,TABLE_TYPE FROM CAT ORDER BY TABLE_TYPE)
WHERE ROWSEQ > ( SELECT COUNT(*)-N FROM CAT )
或
SELECT * FROM
( SELECT TABLE_NAME,TABLE_TYPE FROM CAT ORDER BY TABLE_TYPE DESC)
WHERE ROWNUM<=N
以上在ORACLE8.1.5 for Windows2000pro 上测试通过
-- end --
oracle FAQ(1) from chao_ping
1.快速整理破碎的表(在Oracle8i里边才可以这样使用)
ALTER TABLE table_name MOVE ( TABLESPACE XXX);
如何移动一张表所在的表空间
方法一:
1. Export 这张表
2. Drop这张表
3. Create table xxx tablespace xxx;
4. Imp Ignore=y
还要注意的一点是,所有要读取这张表的PL/SQL储存过程都会失效。需要重新编译。
1. SELECT * FROM DBA_OBJECTS WHERE STATUS = 'INVALID';
2. 对这些包,函数,过程重新编译。
方法二:
仅对Oracle8i适用。
使用下面的语句:
ALTER TABLE table_name MOVE
TABLESPACE new_tablespace;
这样的话,所有的约束、索引、触发器都不会受到影响。
但是需要rebuild这个标上的所有索引。
2.怎样直接进入sql*plus而不用输入用户名,密码:
sqlplus /nolog;
sqlplus username/password@connect_string
3.怎样快速重建索引:
alter index xxx rebuild storage();
alter index xxx coalesce;
4. 为什么我看不到dbms_output的结果?
SET SERVEROUTPUT ON
5. 进行一次大的事务以后,已经COMMIT了,但为什么我的回滚段还是那样大?
因为没有设置OPTIMAL的值,所以不会自动收缩。
可以用alter rollback segment shrink to Xm;来手工进行收缩。
6. 为什么要使用VARCHAR2,而不用CHAR?
A.CHAR只支持2000字节长,而VARCHAR2支持4000字节的长度,适用性更好
B. CHAR 占用更多的存储空间,定义多长,它就占用多长的空间,插入字符后面自动加空格填充;而VARCHAR2不论定义多长,都只使用实际插入的长度。
7. 为什么从不同的数据字典看,表/索引所占用的空间不一样?
SQL> select blocks , empty_blocks from dba_tables where table_name=’表名';
BLOCKS EMPTY_BLOCKS
---------- ------------
1575 1524
SQL> select bytes,blocks,extents from dba_segments where segment_name='表名';
BYTES BLOCKS EXTENTS
---------- - --------- ----------
6348800 3100 1
这是因为第一个数据库视图DBA_TABLES的BLOCKS列是指实际上使用的BLOCK数目,还有一些BLOCK虽然被占用了,但是没有数据存在,不计入里边。而在DBA_SEGMENTS这个数据库视图里边,BLOCKS列是指这个表总共占用的BLOCK的数目,包括有数据和没有数据的BLOCK总量。如果把第一个视图里边的BLOCKS和EMPTY_BLOCKS地总和加起来,正好等于第二个视图的BLOCKS列的大小。
8. 怎样把数据库的一张,多张表存为一个普通的文本文件?
可以在SQL*Plus里边用SPOOL命令把选出来的数据保存在SPOOL指定的文件里边。
9. 怎样从一张表里删除重复的记录
SQL> SELECT * FROM EMP;
EMP_ID OFFICE_ID EMPNAME
305 12 ELLISON, GEORGE
305 12 MERCURIO, JASON
128 17 SIMPSON, LINDA
305 22 JACKSON, DREW
使用下面的SQL语句来识别那些重复的记录:
SQL> SELECT COUNT(*), EMP_ID, OFFICE_ID
FROM EMP
GROUP BY EMP_ID, OFFICE_ID
HAVING COUNT(*) > 1;
结果如下:
COUNT(*) EMP_ID OFFICE_ID
2 305 12
Table Example, with duplicate values:
SQL> SELECT * FROM EMP;
EMP_ID OFFICE_ID EMPNAME
305 12 ELLISON, GEORGE
305 12 MERCURIO, JASON
128 17 SIMPSON, LINDA
305 22 JACKSON, DREW
使用下面的语句来删除重复的记录:
SQL> DELETE FROM EMP A WHERE
(EMP_ID, OFFICE_ID, 2) IN
(SELECT EMP_ID, OFFICE_ID, decode(count(*),1,1,2)
FROM EMP B
WHERE A.EMP_ID=B.EMP_ID AND
A.OFFICE_ID = B.OFFICE_ID
GROUP BY EMP_ID, OFFICE_ID);
10. 怎样在SQL*PLUS里想数据库插入特殊字符?
可以使用CHR函数。
11. 怎样删除一个列?
在Oracle8i里边,可以直接Drop一个列。语法为alter table table_name drop column_name;
但是注意要在initsid.ora里边设定compatible=8.1.0以上。
12. 怎样重命名一个列?
1 alter table "table_name" add
(new_column_name data_type);
2 update table_name set new_column_name =
old_column_name where rowid=rowid;
3 alter table table_name drop column
old_column_name;
13. 怎样快速清空一张表?
Truncate table table_name;
14. 怎样为事务指定一个大的回滚段?
Set transaction use rollback segment rbs_name;
15. 怎样知道一张表上有那些权限赋予了哪些人,给他们了什么权限?
select * from dba_tab_privs where table_name='表名';
16. 怎么发现是谁锁住了你需要的一张表?
Select object_id from v$locked_object;
Select object_name, object_type from dba_objects where object_id=’’;
每次清空一张表的时候,(使用truncate),这张表的存储参数NEXT自动复位到最后被删除的那个extent的大小。同样,如果显式地从一张表里边释放空间,NEXT参数也会自动被设置成最后被释放的那个extent的大小。
在SQL*Plus里边可以为一个事务指定一个回滚段:这在有大的事务将要发生的话时候还是很有用的。使用下面的语句可以为这个事务指定一个回滚段:
SQL>SET TRANSACTION USE ROLLABCK SEGMENT 回滚段名称;
还可以在PL/SQL里边为一个事务指定一个回滚段(不使用动态sql语句)。这个需要使用Oracle提供的包:DBMS_TRANSACTION.USE_ROLLBACK_SEGMENT(‘回滚段名称’);
在有些平台上的Oracle,在启动的时候会自动生成一个sgadefSID.dbf,用这个文件是否存在就可以判断一个实例是否在运行。这个文件包含了SGA在内存中的地址。在数据库关闭的时候,Oracle会自动删除这个文件。但是在Oracle8i里边,这个文件不再存在了。需要使用新的判断方式来断定究竟某个实例是否在运行。比如PS命令。
在Oracle7里边,想要知道数据文件是否可以自动扩展,必须从sys.filext$这张表里边查取,但是在Oracle8里边,从dba_data_files里边就可以知道数据文件是否可以自动扩展了。
从Oracle8i开始,可以创建另一类数据库一级的触发器,比如数据库启动、关闭,用户登录、注销等事务,都可以触发这个事件的发生,从而作某些记录。在数据库一级定义的触发器会在所有用户相应事件发生的时候触发,而在Schema一级定义的触发器只有在某个特定用户的相应事件发生的时候才会触发。
从Oracle8i开始,多了一种关闭数据库的方式:SHUTDOWN TRANSACTIONAL。这种方式允许所有的用户提交它们的工作。但是一旦提交之后就马上被切断联接,等所有用户都完成了各自的事务,shutdown就开始了。
从Oracle8开始,可以创建临时表,这些表的定义对于所有该用户的会话都是可以看到的,但是每个会话查询、插入、删除的数据和别的会话查询、插入、删除的数据都是不相关的。就像每个会话都分别有这样一份表一样。
从Oracle8i开始,对于那些没有进行分区的表,可以不用IMP/EXP就可以快速重组。
查看当前用户每个表占用空间的大小:
Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name
查看每个表空间占用空间的大小:
Select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name
<PIXTEL_MMI_EBOOK_2005>11 </PIXTEL_MMI_EBOOK_2005>
发表评论
-
学习动态性能表 第一篇--v$sysstat
2011-12-23 19:50 605学习动态性能表 第一篇--v$sysstat -
Oracle10g DG
2011-11-17 00:42 841RHEL4.5中安装Oracle10g DG物理备库 原文 ... -
win 2003 和oracle 10g
2009-10-15 00:11 921今天朋友打来电话说自己的操作系统是 win2003R2 ... -
oracle 一些总结
2009-09-09 12:56 922全局临时表:插入数据可以查询到,一但commit数据将消失 2 ... -
oracle如何解除死锁[进程互相锁死]
2009-09-09 12:53 2834oracle如何解除死锁[进程互相锁死] data direc ... -
Orcale 数据服务启动是的出错异常
2009-03-31 23:35 949不知道为什么最近在使用Orcale数据库的时 ... -
使用游标操作数据
2008-08-12 15:58 792下面的示例用@@FETCH_STATUS控制在一个WHILE循 ... -
声明游标
2008-08-12 15:53 773DECLARE CURSOR语句SQL-92标准语法格式: ... -
SQL高级查询
2008-08-12 15:52 2278SQL高级查询 找出某一列里最大或最小的前几个,或是大于 ... -
游标的实例
2008-08-12 15:51 855ECLARE H_SETTLE SCROLL CURSOR F ...
相关推荐
### Oracle手工创建数据库完整步骤详解 #### 系统环境配置 在进行Oracle数据库的手工创建之前,确保系统环境已正确设置。本示例基于以下环境: - **操作系统**:Windows 2000 Server - **数据库版本**:Oracle 9i...
### Oracle手工创建数据库完整步骤详解 #### 环境配置 在进行Oracle数据库的手工创建之前,需要确保系统环境已正确设置。根据题目中的描述,我们的操作系统为**Windows 2000 Server**,数据库版本为**Oracle 9i**,...
手工创建Oracle数据库完整步骤
### Oracle 10g 手工创建数据库的步骤详解 #### 一、引言 在Oracle 10g中创建数据库有两种主要方式:一种是使用DBCA(Database Configuration Assistant)工具,这种方式直观便捷;另一种则是手工创建数据库,虽然...
在Oracle数据库管理系统中,手工创建数据库是一个复杂而细致的过程,涉及到多个步骤和脚本的执行。这个过程通常由经验丰富的DBA(数据库管理员)来完成,以确保数据的安全性和系统的稳定性。以下是对“手工创建...
### 手工创建数据库:ORACLE10G的创建与管理 #### 一、概述 在企业级应用中,Oracle数据库因其稳定性和高效性而被广泛采用。对于Oracle 10g版本而言,掌握手工创建数据库的方法对于DBA(数据库管理员)来说至关...
### Windows XP 上手工创建Oracle 9i数据库的详细步骤 #### 一、系统环境与准备工作 在进行数据库创建之前,我们需要确保系统环境符合要求,并完成必要的准备工作。 **系统环境** - **操作系统**: Windows XP - **...
本文档旨在提供详细的步骤指导,帮助读者手工创建Oracle 11g数据库。通过这些步骤,用户可以自行完成数据库的构建过程,这对于理解Oracle数据库的工作原理及进行日常维护工作至关重要。 #### 二、准备工作 在开始...
通过上述步骤,您可以从零开始手工创建一个完整的Oracle数据库,覆盖了环境准备、系统配置、用户管理、数据文件设置、数据库启动与维护等核心环节,为实际项目部署提供了坚实的理论基础和技术支持。
首先,你需要手工创建一系列与Oracle数据库相关的目录。这些目录包括了数据库管理、归档日志、后台进程输出、数据文件等不同用途的存储位置。例如: 1. `/data/ora816/admin/web`: 这是数据库的管理目录,用于存放...
### Linux下手工创建数据库知识点详解 #### 一、概述 在Linux环境下手动创建Oracle数据库是一项高级的系统管理任务。为了确保数据库的顺利搭建与运行,需要遵循一系列详细的步骤,并且确保环境配置正确无误。 ####...
如何手工创建Oracle数据库是一个涉及多个步骤的技术过程,尤其对于数据库管理员(DBA)来说,了解这些步骤至关重要。在本文中,我们将详细讨论如何在Red Hat Enterprise 3操作系统上手动创建一个Oracle 10g Release 2...
在博文链接中,作者可能分享了如何通过源码或者特定工具手工创建数据库的具体步骤和实践经验,这对于我们理解和掌握数据库创建技能非常有帮助。而《手工创建数据库.doc》文档则可能提供了更详细的操作指南或案例分析...