首页 > 代码库 > 10_Oracle_Admin_手动创建一个比较实用的数据库

10_Oracle_Admin_手动创建一个比较实用的数据库

上一节中手动创建数据库由于参数太过简单,且没有安装数据字典,是无法实际应用的,本章节是对上节内容的深入,增加了很多细节和参数配置,按照以下步骤,可以成功安装一个能实际使用的数据库。

 

======清理现有数据库文件======

[oracle@localhost dbs]$ ll

total 240396
-rw-r-----. 1 oracle oinstall  7847936 Aug 28 11:43 cntrlwly.dbf
-rw-r-----. 1 oracle oinstall 81928192 Aug 28 11:40dbs1wly.dbf
-rw-r-----. 1 oracle oinstall 10493952 Aug 28 11:40 dbu1wly.dbf
...
-rw-r-----. 1 oracle oinstall     2560 Aug 28 04:17 spfileorcl.ora
-rw-r-----. 1 oracle oinstall     1536 Aug 28 10:25 spfilewly.ora
-rwxr-xr-x. 1 oracle oinstall      254 Aug 28 07:40 wly.env

 

[oracle@localhost dbs]$ rm -f*dbf

 

[oracle@localhost dbs]$ rm -fspfilewly.ora

[oracle@localhost dbs]$ ls

hc_orcl.dat initorcl.ora  lkWLY      peshm_orcl_0  spfileorcl.ora  hc_wly.dat  initwly.ora   old     peshm_ORCL_0  wly.env init.ora     lkORCL        orapworcl  peshm_wly_0

 

=======准备初始化参数文件=========

可以通过联机文档reference参考各参数的含义和用法。对于初学者,可以直接拷贝有经验的DBA创建的参数文件,也可以对安装ORACLE时默认创建的数据库中的PFILE进行修改。

 

[oracle@localhost dbs]$ env |grep ORA

ORACLE_SID=orcl
ORACLE_BASE=/oracle
ORACLE_HOME=/oracle/11g
# 当前使用的是orcl这个数据库

 

[oracle@localhost dbs]$ stringsspfileorcl.ora > initsmn.ora

# 提取orclSPFILEinitsmn.ora

 

[oracle@localhost dbs]$ viminitsmn.ora

*.open_cursors=300
*.processes=150
*.remote_login_passwordfile=‘EXCLUSIVE‘
*.undo_tablespace=‘UNDOTBS1‘
…
~                                                                                
:%s/orcl/smn
# 在vim中使用 %s/原字符串/要替换的字符串将orcl 换成smn
# 这里有很多目录也被替换了,需要提前将他们创建出来,否则运行时会报错
 
:%s/*\.//g
# 去掉SPFILE中带上的*号


========根据参数文件逐一创建目录=========

[oracle@localhost dbs]$ catinitsmn.ora

smn.__db_cache_size=96468992
smn.__java_pool_size=4194304
smn.__large_pool_size=4194304
smn.__oracle_base=‘/oracle‘#ORACLE_BASE set from environment
smn.__pga_aggregate_target=146800640
smn.__sga_target=276824064
smn.__shared_io_pool_size=0
smn.__shared_pool_size=159383552
smn.__streams_pool_size=4194304
audit_file_dest=‘/oracle/admin/smn/adump‘
audit_trail=‘db‘
compatible=‘11.2.0.0.0‘
control_files=‘/oracle/oradata/smn/control01.ctl‘,‘/oracle/flash_recovery_area/smn/control02.ctl‘
db_block_size=8192
db_domain=‘‘
db_name=‘smn‘
db_recovery_file_dest=‘/oracle/flash_recovery_area‘
db_recovery_file_dest_size=4039114752
diagnostic_dest=‘/oracle‘
dispatchers=‘(PROTOCOL=TCP) (SERVICE=smnXDB)‘
LOG_ARCHIVE_DEST_1=‘LOCATION=/oracle/oradata/smn/archive‘
LOG_ARCHIVE_FORMAT =‘%t_%s_%r.dbf‘
memory_target=421527552
open_cursors=300
processes=150
remote_login_passwordfile=‘EXCLUSIVE‘
undo_tablespace=‘UNDOTBS1‘

 

[oracle@localhost dbs]$ cd/oracle/oradata

 [oracle@localhost oradata]$ mkdir smn

 [oracle@localhost oradata]$ ll

total 8
drwxr-x---. 2 oracle oinstall 4096 Aug 27 09:21 orcl
drwxr-xr-x. 2 oracle oinstall 4096 Aug 28 12:13 smn

 

[oracle@localhost dbs]$ mkdir/oracle/flash_recovery_area/smn/

[oracle@localhost ~]$ mkdir/oracle/oradata/smn/archive

# 创建archive目录

 

 [oracle@localhost oradata]$ mkdir/oracle/admin/smn/

[oracle@localhost ~]$ cd/oracle/admin/

[oracle@localhost admin]$ ll

total 8
drwxr-x---. 5 oracle oinstall 4096 Aug  5 18:24 orcl
drwxr-xr-x. 2 oracle oinstall 4096 Aug 28 12:33 smn

 

[oracle@localhost admin]$ cp -Rorcl/* smn

# orcl目录下的子目录都复制到smn


[oracle@localhost admin]$ cdsmn

[oracle@localhost smn]$ ll

total 20
drwxr-x---. 2 oracle oinstall 12288 Aug 28 12:41 adump
drwxr-x---. 2 oracle oinstall  4096 Aug 28 12:41 dpdump
drwxr-x---. 2 oracle oinstall  4096 Aug 28 12:41 pfile

 

 

[oracle@localhost smn]$ rm -fadump/*

[oracle@localhost smn]$ rm -fdpdump/*


[oracle@localhost smn]$ rm -fpfile/*

# 删除上述三个子目录中原有的文件

 

wKioL1QcUy_TTrxVAAI5wZBDT5U947.jpg

 

======准备创建数据库用的脚本======

由于真正使用的创建数据库命令很长,如果直接在命令行中输入,很容易出错,因此建议先将这个命令编写成一个脚本,然后执行:

[oracle@localhost dbs]$ vimcrdb01.sql

spool dbcreate.log
 -- 将以下执行的语句输出到dbcreate.log这个文件中
CREATE DATABASE "smn"
        MAXDATAFILES500
        MAXINSTANCES 8
       MAXLOGFILES  32
        CHARACTER SET"UTF8"
        NATIONALCHARACTER SET AL16UTF16
        ARCHIVELOG
        SYSAUX
        DATAFILE
               ‘/oracle/oradata/smn/system01.dbf‘ SIZE 300M
        EXTENTMANAGEMENT LOCAL
        DEFAULTTEMPORARY TABLESPACE temp TEMPFILE ‘/oracle/oradata/smn/tempts01.dbf‘ SIZE 100M
        EXTENTMANAGEMENT LOCAL
        UNDOTABLESPACE "UNDOTBS1"
        DATAFILE‘/oracle/oradata/smn/undotbs01.dbf‘ SIZE 200M
        LOGFILE
GROUP 1 (
        ‘/oracle/oradata/smn/redo01a.rdo‘,
       ‘/oracle/oradata/smn/redo01b.rdo‘
        ) SIZE 100M,
GROUP 2 (
       ‘/oracle/oradata/smn/redo02a.rdo‘,
       ‘/oracle/oradata/smn/redo02b.rdo‘
        ) SIZE 100M,
GROUP 3 (
   ‘/oracle/oradata/smn/redo03a.rdo‘,
   ‘/oracle/oradata/smn/redo03b.rdo‘
    ) SIZE 100M
        ;
Spool off;

 

上述脚本需要和数据库的初始化参数文件中列出的数值一一对应,比如在PFILEundo_tablespace=‘UNDOTBS1‘,那么,在CREATEDATABASE的脚本中,就需要指明UNDO TABLESPACE"UNDOTBS1"。这些细节需要十分小心,否则数据库创建会失败。

CREATE DATABASE语句的更多用法细节,可以查询联机文档中SQLReference相关章节的内容。

wKiom1QcU0aQnNCEAADXafjOqxM395.jpg

wKioL1QcU3CAL_fiAAFkNFFAiB4838.jpg

 

========创建环境变量========

[oracle@localhost dbs]$ vimsmn.env

ORACLE_BASE=/oracle
ORACLE_HOME=$ORACLE_BASE/11g
ORACLE_SID=smn
ORACLE_NLS33=$ORACLE_HOME/nls/data
PATH=$ORACLE_HOME/bin:$PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
 
export ORACLE_BASE ORACLE_HOME ORACLE_SID ORACLE_NLS33 PATHLD_LIBRARY_PATH

[oracle@localhost dbs]$ chmod+x smn.env

[oracle@localhost dbs]$ ../smn.env

[oracle@localhost dbs]$ env |grep ORAC

ORACLE_NLS33=/oracle/11g/nls/data
ORACLE_SID=smn
ORACLE_BASE=/oracle
ORACLE_HOME=/oracle/11g

 

======执行创建数据库用的脚本======

[oracle@localhost dbs]$ sqlplus/nolog

SQL*Plus: Release 11.2.0.1.0 Production on Tue Sep 915:34:09 2014
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

 

SQL> conn / as sysdba

Connected to an idle instance.

 

SQL> create spfile frompfile;

File created.

 

SQL> startup nomount

ORACLE instance started.
 
Total System Global Area 422670336 bytes
Fixed Size                 1336960 bytes
Variable Size            318769536 bytes
Database Buffers          96468992 bytes
Redo Buffers               6094848 bytes

 

SQL>@$ORACLE_HOME/dbs/crdb01.sql;

-- 使用@加上路径和脚本的名字,就可以执行sql脚本了
Database created.

 

[oracle@localhost ~]$ cd/oracle/admin/smn

[oracle@localhost smn]$ ls

adump  dpdump  pfile

[oracle@localhost smn]$ lsadump

smn_ora_14093_1.aud smn_ora_14201_2.aud smn_ora_14430_1.aud smn_ora_14513_1.aud
smn_ora_14201_1.aud smn_ora_14303_1.aud smn_ora_14430_2.aud

[oracle@localhost ~]$ cd/oracle/oradata/smn

[oracle@localhost smn]$ ls

archive        redo01a.rdo  redo02a.rdo redo03a.rdo  system01.dbf  undotbs01.dbf
control01.ctl redo01b.rdo  redo02b.rdo  redo03b.rdo tempts01.dbf
# 已经创建了很多文件


 

=======创建额外的表空间=======

wKioL1QcU_SgFPyYAAIYaFc_iR0914.jpg

出于安全性和实用性考虑,用户可以创建额外的表空间,只需要执行CREATETABLESPACE 语句就可以了:

SQL> CREATE TABLESPACEmytbs

  2 DATAFILE ‘/oracle/oradata/smn/mytbs01.dbf‘ SIZE 100M

  3 EXTENT MANAGEMENT LOCAL;

Tablespace created.
-- 创建了此表空间以后,可以将数据存放在该空间里


 

[oracle@localhost dbs]$ cd/oracle/oradata/smn


[oracle@localhost smn]$ ls

archive       mytbs01.dbf  redo01b.rdo  redo02b.rdo redo03b.rdo   tempts01.dbf
# 可以看到刚刚创建的表空间mytbs01.dbf 
control01.ctl redo01a.rdo  redo02a.rdo  redo03a.rdo system01.dbf  undotbs01.dbf

 

 

=======创建数据字典=========

wKioL1QcVRyTbO7IAAKiHz8i9wI901.jpg

没有数据字典的数据库是无法使用的,因此这一步是必须的:

[oracle@localhost ~]$ cd/oracle/11g/rdbms/admin

[oracle@localhost admin]$ ls

a0902000.sql                         dbmshtdb.sql           owmricb.plb        prvtmetd.plb
...
catalog.sql  catproc.sql

[oracle@localhost ~]$ cd/oracle/11g/sqlplus

[oracle@localhost admin]$ ls

afiedt.buf glogin.sql  help  libsqlplus.def  plustrce.sql pupbld.sql

 

SQL> spool log1.1

-- 用来记录执行过程


SQL>@?/rdbms/admin/catalog.sql

-- 执行第一个脚本

...
PL/SQL procedure successfully completed.
 
TIMESTAMP
--------------------------------------------------------------------------------
COMP_TIMESTAMP CATALOG   2014-09-09 17:01:14

 

SQL> spool log2.log


SQL>@?/rdbms/admin/catproc.sql

...
PL/SQL procedure successfully completed.

 

SQL> spool log3.log

SQL> @?/sqlplus/admin/pupbld.sql;

SQL> -- End of pupbld.sql

 

创建过程中会出现一些ERROR,这通常是因为脚本中会先删除某个表再创建一个表,而第一次运行时表并不存在,所以那些ERROR是正常的。

[oracle@localhost dbs]$ vimlog2.log

DROP TYPE kupc$_mastererror FORCE
*
ERROR at line 1:
ORA-04043: object KUPC$_MASTERERROR does not exist

 

======检验数据库是否可以正常工作=======

[oracle@localhost dbs]$ env |grep ORA

ORACLE_NLS33=/oracle/11g/nls/data
ORACLE_SID=smn
ORACLE_BASE=/oracle
ORACLE_HOME=/oracle/11g

[oracle@localhost dbs]$ sqlplus/nolog

 
SQL*Plus: Release 11.2.0.1.0 Production on Tue Sep 917:23:07 2014
 
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

 

SQL> conn / as sysdba

Connected to an idle instance.

SQL> startup

ORACLE instance started.
 
Total System Global Area 422670336 bytes
Fixed Size                 1336960 bytes
Variable Size            322963840 bytes
Database Buffers          92274688 bytes
Redo Buffers               6094848 bytes
Database mounted.
Database opened.
-- 正常启动数据库

 

SQL> select * from dual;

D
-
X
-- 能够执行查询语句

 

SQL> desc dba_objects;

 Name                                     Null?    Type
 ------------------------------------------------- --------------------
 OWNER                                             VARCHAR2(30)
 OBJECT_NAME                                       VARCHAR2(128)
 SUBOBJECT_NAME                                    VARCHAR2(30)
 OBJECT_ID                                          NUMBER
 DATA_OBJECT_ID                                     NUMBER
 OBJECT_TYPE                                       VARCHAR2(19)
 CREATED                                           DATE
 LAST_DDL_TIME                                      DATE
 TIMESTAMP                                         VARCHAR2(19)
 STATUS                                            VARCHAR2(7)
 TEMPORARY                                         VARCHAR2(1)
 GENERATED                                          VARCHAR2(1)
 SECONDARY                                         VARCHAR2(1)
 NAMESPACE                                         NUMBER
 EDITION_NAME                                      VARCHAR2(30)
-- 能够查询表结构


 

SQL> Create tabletestb1(id integer, name char(10));

Table created.
--能够创建表


 SQL> insert into testb1values(0, ‘smn‘);

1 row created.
-- 能够插入数据


 

SQL> select * from testb1; 

        ID NAME
---------- ----------
         0 smn

到这里,一个完整的并可以正常工作的数据库就创建好了

 

wKiom1QcVSThYOQrAAJDBvRdEtU357.jpg

根据具体的需求,还可以安装一些额外的包。

 

wKiom1QcVTWSE4ATAAIdKC6TFkA299.jpg

wKioL1QcVWbz1fe2AAIwBpgxNuA733.jpg

由于创建数据库的过程非常繁琐,且有大量的初始化参数需要设置,为了简化操作,ORACLE提供了OMF特性,预设了很多参数帮助安装。

wKiom1QcVV2z4kaHAAFfgUTCWOo341.jpg

在创建数据库过程中可能会出现很多问题,需要自行查询联机文档和日志文件,来排查错误。

 

wKioL1QcVYnChaORAAGISph4bgQ094.jpg

 

当数据库建立好以后,需要修改初始化密码,其中SYS用户的缺省密码是change_on_install

SYSTEM用户的缺省密码是manager


本文出自 “重剑无锋 大巧不工” 博客,请务必保留此出处http://wuyelan.blog.51cto.com/6118147/1555388

10_Oracle_Admin_手动创建一个比较实用的数据库