手工创建数据库完整步骤

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>

你可能感兴趣的:(oracle,sql,Web,脚本,Office)