您的位置:首页 > 数据库 > Oracle

手工创建Oracle数据库

2013-09-07 12:36 253 查看
转载http://wenku.baidu.com/view/90a59569a98271fe910ef9b4.html

方少ORACLE DBA之路

1 作者:倪翔凤

如何创建Oracle数据库(手工创建)

在上一章里,方少演示了如何利用DBCA 来创建ORACLE 数据库,但是在这一章里方

少要告诉大家如何在命令行下通过执行CREATE DATABASE 命令来创建一个数据库,之所

以演示命令行手工创建数据库给大家是因为在OCM 的实验考试里面是不允许用DBCA 来

建库的。

要创建一个数据库,必须按照正确的顺序执行以下步骤:

(1) 创建一个参数文件和口令文件。

(2) 使用创建的参数文件在内存中构建一个实例。

(3) 执行CREATE DATABASE 命令。

(4) 运行一系列SQL 脚本生成数据字典视图和补充的PL/SQL 程序包。

(5) 运行相应SQL脚本生成Enterprise Manager Database Control 以及该数据库需要的任

何选项。

下面,我们就按照上面的步骤创建一个名为ORCL 的数据库。

在创建参数文件之前,我们得先创建一些orcl 数据库要用到的目录:

mkdir –p $ORACLE_BASE/admin/orcl/adump

mkdir –p $ORACLE_BASE/admin/orcl/bdump

mkdir –p $ORACLE_BASE/admin/orcl/cdump

mkdir –p $ORACLE_BASE/admin/orcl/dpdump

mkdir –p $ORACLE_BASE/admin/orcl/udump

mkdir –p $ORACLE_BASE/admin/orcl/pfile

mkdir –p $ORACLE_BASE/oradata/orcl

mkdir –p $ORACLE_BASE/flash_recovery_area

export ORACLE_SID=orcl

接下来,我们要在/etc/oratab 里加入如下所示的一条记录

orcl:/u01/app/oracle:Y

下面,我们要创建口令文件:

orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle entries=10 force=y

在Oracle 中,所有参数被分为“基本”参数和“高级”参数。通常,我们需要设置20

多个“基本”参数。

启动参数文件init.ora 应与下面给出的代码相似:

##########################################################################

####

# Copyright (c) 1991, 2001, 2002 by Oracle Corporation

##########################################################################

####

###########################################

# Cache and I/O

###########################################

db_block_size=8192

db_file_multiblock_read_count=16

###########################################

# Cursors and Library Cache

###########################################

open_cursors=300

###########################################

# Database Identification

###########################################

db_domain=""

db_name=orcl

###########################################

# Diagnostics and Statistics

###########################################

background_dump_dest=/u01/app/admin/orcl/bdump

core_dump_dest=/u01/app/admin/orcl/cdump

user_dump_dest=/u01/app/admin/orcl/udump

###########################################

# File Configuration

###########################################

control_files=("/u01/app/oradata/orcl/control01.ctl", "/u01/app/oradata/orcl/control02.ctl",

"/u01/app/oradata/orcl/control03.ctl")

db_recovery_file_dest=/u01/app/flash_recovery_area

db_recovery_file_dest_size=2147483648

###########################################

# Job Queues

###########################################

job_queue_processes=10

###########################################

# Miscellaneous

###########################################

compatible=10.2.0.1.0

###########################################

# NLS

###########################################

nls_territory="AMERICA"

###########################################

# Processes and Sessions

###########################################

processes=150

###########################################

# SGA Memory

###########################################

sga_target=205520896

###########################################

# Security and Auditing

###########################################

audit_file_dest=/u01/app/admin/orcl/adump

remote_login_passwordfile=EXCLUSIVE

###########################################

# Shared Server

###########################################

dispatchers="(PROTOCOL=TCP) (SERVICE=orclXDB)"

###########################################

# Sort, Hash Joins, Bitmap Indexes

###########################################

pga_aggregate_target=68157440

###########################################

# System Managed Undo and Rollback Segments

###########################################

undo_management=AUTO

undo_tablespace=UNDOTBS1

准备好init.ora 参数文件之后,我们就要用它在内存中构建一个实例

-bash-3.00$ export ORACLE_SID=orcl

-bash-3.00$ sqlplus /nolog

SQL> conn / as sysdba

Connected to an idle instance.

SQL> startup nomount pfile="/u01/app/oradata/orcl/dbs/initorcl.ora"

ORACLE instance started.

好了,实例已经启动成功,接下来要做的就是创建数据库啦。



至此,数据库已经成功创建,接下来要做的就是运行一系列SQL 脚本以生成数据字典

视图和PL/SQL 程序包。

在这之前,我们还要再做一件事,那就是为数据库创建一个默认的用户表空间USERS。



下面以SYS 用户连接数据库并执行以下SQL 文件中的代码:

$ORACLE_HOME/rdbms/admin/catalog.sql

$ORACLE_HOME/rdbms/admin/catblock.sql

$ORACLE_HOME/rdbms/admin/catproc.sql

$ORACLE_HOME/rdbms/admin/catoctk.sql

$ORACLE_HOME/rdbms/admin/owminst.plb

以SYSTEM 用户连接数据库并执行以下SQL 文件:

$ORACLE_HOME/sqlplus/admin/pupbld.sql

$ORACLE_HOME/sqlplus/admin/help/hlpbld.sql helpus.sql

以SYS 用户登录并执行以下SQL 脚本:

$ORACLE_HOME/javavm/install/initjvm.sql;

$ORACLE_HOME/xdk/admin/initxml.sql;

$ORACLE_HOME/xdk/admin/xmlja.sql;

$ORACLE_HOME/rdbms/admin/catjava.sql;

$ORACLE_HOME/rdbms/admin/catexf.sql;

以SYS 用户连接并执行以下:

$ORACLE_HOME/rdbms/admin/dminst.sql SYSAUX TEMP;

$ORACLE_HOME/ctx/admin/catctx change_on_install SYSAUX TEMP NOLOCK;

connect "CTXSYS"/"change_on_install"

$ORACLE_HOME/ctx/admin/defaults/dr0defin.sql "AMERICAN";

以SYS 用户连接并执行以下:

$ORACLE_HOME/rdbms/admin/catqm.sql change_on_install SYSAUX TEMP;

connect / as SYSDBA

$ORACLE_HOME/rdbms/admin/catxdbj.sql;

$ORACLE_HOME/rdbms/admin/catrul.sql;

以SYS 用户连接并执行以下:

$ORACLE_HOME/ord/admin/ordinst.sql SYSAUX SYSAUX;

以SYS 用户连接并执行以下:

$ORACLE_HOME/ord/im/admin/iminst.sql;

以SYS 用户连接并执行以下:

$ORACLE_HOME/olap/admin/olap.sql SYSAUX TEMP;

以SYS 用户连接并执行以下:

$ORACLE_HOME/md/admin/mdinst.sql;

以SYS 用户连接并执行以下:

$ORACLE_HOME/sysman/admin/emdrep/sql/emreposcre $ORACLE_HOME SYSMAN

&&sysmanPassword TEMP ON;

WHENEVER SQLERROR CONTINUE;

以SYS 用户连接并执行以下:

Create spfile='$ORACLE_HOME/dbs/spfileorcl.ora' FROM pfile='/u01/app/oracle/dbs/initorcl.ora';

shutdown immediate;

connect "SYS"/"&&sysPassword" as SYSDBA

startup ;

alter user SYSMAN identified by "&&sysmanPassword" account unlock;

alter user DBSNMP identified by "&&dbsnmpPassword" account unlock;

select 'utl_recomp_begin: ' || to_char(sysdate, 'HH:MI:SS') from dual;

execute utl_recomp.recomp_serial();

select 'utl_recomp_end: ' || to_char(sysdate, 'HH:MI:SS') from dual;

host $ORACLE_HOME/bin/emca -config dbcontrol db -silent -DB_UNIQUE_NAME orcl -

PORT 1521 -EM_HOME $ORACLE_HOME -LISTENER LISTENER -SERVICE_NAME

orcl.ocp10g -SYS_PWD &&sysPassword -SID orcl -ORACLE_HOME $ORACLE_HOME

-DBSNMP_PWD &&dbsnmpPassword -HOST OCP10g -LISTENER_OH

$ORACLE_HOME -LOG_FILE $ORACLE_BASE/adm
4000
in/orcl/scripts/emConfig.log -

SYSMAN_PWD &&sysmanPassword;

好了,至此我们已经成功创建了ORCL 数据库。

写得比较粗枝烂造,大家见谅。

 

Orapwd的前世今生 (转载http://bobjoy.blog.hexun.com/14854437_d.html

--by Goodmandqp 2006/09/15

Orapwd是oracle生成口令文件的命令。口令文件一般存放在dbs(unix/linux)或者database(win)目录下,叫做pwdsid.ora(10g) 或者orapwsid/orapw(9i及以下)

1、 为什么需要口令文件?

在数据库尚未启动的时候,负有启动数据库使命的sysdba/sysoper用户如何验证登录权限呢?

只能把sysdba/sysoper的用户名和密码记录在一个文件中,这个文件就是口令文件。

所有sysdba以及sysoper用户列表都存放在口令文件中,如果口令文件删除,也就意味着其中存放的sysdba/sysoper用户不再具有sysdba/sysoper权限。

所有希望用sysdba/sysoper身份登陆上数据库的用户,不管此时数据库启动没有,都必须经过口令文件这一关,只要其中有相关记录并且口令能对上,那么就可以放行,否则拒绝登入。当然用拥有dba权限的操作系统用户(linux/unix下一般是oracle用户,win下是隶属于ORA_DBA组的用户)登进来的除外。

如果在数据库open状态下,口令文件被删除又重建,那么只有重新启动数据库口令文件才能生效,此前任何sysdba/sysoper都无法连进来。

2、口令文件损坏或者丢失怎么办?

口令文件就是sysdba/sysoper用户的唯一花名册,丢了就进不来,不管数据库启动没有。只能用操作系统级权限验证登陆,即oracle/oracle登陆,然后orapwd重建花名册。Orapwd命令第二个参数是指定sys的密码,参数等于什么,sys密码以后就是什么。为什么要指定sys密码?因为花名册里面必须要有用户密码,否则怎么验证啊?但此时数据库如果没启动的话就根本取不到sys密码,所以只能强行指定了,启动后数据库里面sys的密码会被改成此时指定的。Entries参数基本没有用,本意是花名册中最大可以存放多少个用户条目,实际上限制不了,能够容纳的数目会比指定的数目多几条,原因是orapwd分配口令文件空间时是按照os的最小block来分配的,这个问题不需要太多关注,毕竟你的数据库需要几个sysdba呢?一个足矣!。另外重建花名册的工作只能由oracle/oracle用户完成,或者具有dba权限的用户也可以,其他用户执行orapwd命令都会失败。

3、如何把sysdba/sysoper用户加到花名册中去?

再执行一遍grant sysdba/sysoper to sb.即可,oracle会自动在口令文件中增加一个条目,并且把密码copy过来。察看口令文件内容的方法:select * from v$pwfile_users;

4、没有口令文件是否可以启动数据库?

可以,9i及以下mount过程中会报错,然后手动open就可以了。因为只要用oracle/oracle照样可以做sysdba的事情,没有理由让数据库启动不了。10g已经不会报错了。

5、没有口令文件为什么是mount阶段报错而不是momount阶段报错?

哈哈,因为只有到了alter mount阶段才验证各种文件,nomount只读spfile/pfile创建进程。

6、修改sysdba/sysoper用户密码时,能否同步到口令文件?

可以同步。Alter user xxx identified by yyy.

所有密码忘记都没关系,但至少要记住ORACLE用户密码。

7、spfile/pfile中remote_login_passwordfile是干嘛用的?

设定为EXCLUSIVE,则一个实例专用;SHARE则可以多个实例共享(用于OPS/RAC环境);NONE则不启用口令文件,此时任何sysdba/sysoper都无法连接进来。在用SPFILE的情况下,remote_login_passwordfile参数怎么改呢?SPFILE是不可以强行编辑的,否则数据库不认的。用alter system set remote_login_passwordfile=none scope=spfile.改成NONE以后怎么改回来呢?HOHO……用os级认证登陆,然后alter
system,或者直接create spfile from pfile;

remote_login_passwordfile=’none’意味着禁用口令文件,有也不能用。等于可以disable所有sysdba/sysoper,此时只能用oracle/oracle用户来启动和关闭数据库,也就是只有os认证,没有口令文件认证,这就是此参数的意义—口令文件验证的开关。

8、sqlnet.ora中SQLNET.AUTHENTICATION_SERVICES=(NTS/NONE)有什么用?

NTS=NT Security 即采用OS优先认证登陆,NONE为不可以,必须采用usr/pwd as sysdba/sysoper 登陆。这里是操作系统级验证的开关。

9、如果SQLNET.AUTHENTICATION_SERVICES=(NONE)并且remote_login_passwordfile=’none’,即两个开关都关闭,那么神仙也进不了数据库,hoho…我指的是sysdba/sysoper用户,普通用户可以照常使用的。当然,有物理权限的人也除外,即你可以物理地打开这台计算机操作。

总结一下,ORACLE有两种方式可以认证sysdba/sysoper用户:操作系统级认证—dba权限组(linux/unix)和ORA_DBA组(win);口令文件认证。

两种方式有各自的开关:sqlnet.ora中AUTHENTICATION_SERVICES参数;spfile/pfile中remote_login_passwordfile参数。并且这两个开关互不矛盾,可以同时打开同时关闭或者只开一个。

OS级认证是优先于口令文件认证的。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: