Oracle笔记(八)

[第三章 Oracle在Unix下安装]

一、创建数据库安装用户

*1、Oracle在Unix下运行平台:
 。Sun Solaris(Sun SPARC)(Solaris是Oracle目前运行最多的平台)
 。HP-UX
 。IBM-AIX
 。COMPAQ Tru64-Unix(ALPHA)
 。SCO UNIX(PC)
 。Linux(PC)
 。SGI
 // 前三种平台上运行的最多

*2、用户组名:dba(Oracle7, Oracle8)
  oinstall(Oracle8i, Oracle9i)

*3、在Unix下,与用户所在组有关的文件:/etc/group
如果要加新组就在此文件中新加一行,如:
oinstall::20:oracle,oraweb
// gid < 1024,组号越大,权限越小。

*4、与用户有关的文件:/etc/passwd
oracle8i:x:30:20:Oracle8i for Unix:/u01/app/oracle/product/8.1.7:/bin/sh
用户名:x:用户号:组号:描述(可省略):文件系统名称:shell

//# admintool  Sun的图形管理工具
//# sam   HP-UX
//# scoadmin  SCO UNIX

二、创建Oracle数据库安装目录
在Unix下安装数据库,最好使用Oracle建议设置的标准目录:
OFA(Optimal Flexible Architecture):将Oracle的系统文件与数据库文件分别存储。

OFA要求创建两个目录:
$ORACLE_BASE
$ORACLE_HOME

假设目录为:/u01/app/oracle/product/8.1.7
则:$ORACLE_BASE = /u01/app/oracle    // 这个目录下的各个子目录存放数据库文件
$ORACLE_HOME = /u01/app/oracle/product/8.1.7  // 这个目录存储系统文件

例如:$ORACLE_BASE/oradata存储数据文件

$df -k // 查看文件系统的使用率,如果超过80%,就不要再继续添加文件,否则文件系统将十分慢

#mkdir app
# cd app
# mkdir oracle
...
# mkdir 8.1.7

# chgrp -R oinstall oracle //-R包括子目录,将oracle目录的属组改为oinstall组
# chown -R oracle oracle  // 将oracle(第二个)目录的属主改为oracle用户

# ls -al

三、编辑安装用户的.profile文件,定义操作系统环境变量

NLS_LANG,Oracle用户在安装时默认安装为与操作系统一致的字符集,因此要想在英文版本的操作系统上安装支持中文的Oracle时,务必要设置这个环境变量。

#vi .profile // 内容如下:
ORACLE_BASE=/u01/app/oracle
export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/8.1.7
export ORACLE_HOME
ORACLE_SID=ora8i  // 数据库实例名
export ORACLE_SID
ORACLE_TERM=sun  //终端类型,SCO为vt100,防止字符混乱
export ORACLE_TERM
NLS_LANG="simplified chinese"_china.zhs16gbk (oracle8.0以后)
       .zhs16cgb231280(oracle 8以前,为保持数据兼容,如要导入oracle7的数据,建议选择这一个)
export NLS_LANG
LD_LIBRARY_PATH=/usr/lib:$ORACLE_HOME/lib
export LD_LIBRARY_PATH
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export ORA_NLS33
TMPDIR=/var/tmp
export TMPDIR
PATH=/bin:$ORACLE_HOME/BIN:/usr/sbin;/opt/bin
export PATH

// .profile文件应该放在$ORACLE_HOME目录下。

四、配置操作系统核心

五、安装过程:
在安装光盘下运行:$./runInstall


[第四章 创建Oracle数据库、表空间管理、回退段管理]

一、创建数据库
1、确定数据库名、实例名、服务名
数据库名参数:db_name = prod
数据库实例名参数:instance_name = prod
域名:db_domain
数据库服务名参数:service_names = prod[.域名] //服务名等于:数据库名.域名,为了省事,一般不要域名。

2、创建新数据库的参数文件:init.ora

需要修改的参数:
db_name
instance_name
service_names
control_files : d:/oracle/oradata/prod/... 01 02 03
background_dump_dest: 后台信息跟踪文件的存储位置d:/oracle/oradata/prod/bdump
user_dump_dest: 用户信息跟踪文件的存储位置d:/Oracle/oradata/prod/udump
sql_trace = true


3、设置操作系统参数:主要是设置ORACLE_SID选择数据库实例
在Unix下设置实例的方法:
$ORACLE_SID=ora8i
$export ORACLE_SID

换成另外一个:
$ORACLE_SID=prod
$export ORACLE_SID


在Windows NT/2000下,有一个实例写在注册表中,如果要进入第二个数据库,设置方法如下:
C:/> set ORACLE_SID=ora8i
C:/> set ORACLE_SID=prod

// 为了不致发生混乱,每次在使用数据库之前,进行上述设置。

4、创建数据库实例
语法:C:/>oradim -new -sid [实例名] -intpwd [口令] -startmode auto -pfile [数据库参数文件名称及路径]

 。红色部分需要用户确定
 。startmode: auto, manual
 。参数文件名称及路径:
 Unix:
  /u01/app/oracle/admin/db_name/pfile/initSID.ora
  /u01/app/oracle/product/8.1.7/dbs/initSID.ora // 这是oracle直接读取的参数文件
 // 在Unix中上面的dbs目录是pfile目录的symbol link,即两上文件是同一个文件。
 Windows:
  d:/oracle/admin/db_name/pfile/init.ora
  d:/oracle/ora81/database/initSID.ora   // 这是oracle直接读取的参数文件
 /*第二个文件指向第一个文件,上面这个文件可以随便放到什么位置,只要在第二个文件中通过IFILE指明了其位置,也可以直接用第一个文件的内容替换第二个文件的内容。*/
 
[*] 删除数据库实例方法:
D:/> oradim -delete -sid [实例名]
 
最后的命令格式为:
D:/> oradim -new -sid prod -intpwd prod -startmode auto -pfile d:/oracle/ora81/database/initprod.ora

[如果执行了set oracle_sid=prod后,仍然不能通过svrmgrl连接到internal用户,请检查是否在注册表中设置了local串。]

5、创建数据库:
SVRMGR> startup nomount
SVRMGR> create database prod
  logfile group 1('d:/oracle/oradata/prod/log1a.log',
     'd:/oracle/oradata/prod/log1b.log') size 2m,
      group 2('d:/oracle/oradata/prod/log2a.log',
     'd:/oracle/oradata/prod/log2b.log') size 2m
  datafile 'd:/oracle/oradata/prod system01.dbf' size 200m
   autoextend on next 10m maxsize 1000m
  character set zhs16gbk;

[2002.05.15]
//=====================================================================================================================
 
6、加载数据字典:
(1) 加载常用的数据字典:
SVRMGR>@d:/Oracle/ora81/rdbms/admin/catalog
SVRMGR>@/u01/app/oracle/product/8.1.7/rdbms/admin/catalog

(2) 加载PL/SQL程序包:
SVRMGR>@d:/Oracle/ora81/rdbms/admin/catproc

(3) 加载Java程序包:
SVRMGR> @d:/oracle/ora8i/javavm/install/initjvm

7、网络配置:
配置tnsnames.ora文件
d:/oracle]ora81/network/admin/tnsnames.ora

8、以system登录数据库,加载资源文件profile:
SQL> @d:/oracle/ora81/sqlplus/admin/pupbld.sql

//如果不运行这个sql程序,普通用户登录时会提示错误。

[C*] 对于新数据库,监听程序不用配置,如果运行中出现没有监听,则运行:
D:/> lsnrctl status
查看相应的数据库是否已启动监听。如果没有启动监听,运行:
D:/> lsnrctl stop
D:/> lsnrctl start
重启监听程序。

如果在SQL*Plus中登录数据库时,提示service_name丢失,则重启数据库。

SQL> select name from v$database; //查询当前数据库

[C*]在Unix下:$dbassist

在Windows NT/2000下(oracle8i):
程序组-> Database administration-> Database Configration Assistant

可以删除已创建的数据库(服务、文件)。

通过提示符下命令:oradim -delete -sid prod -srvc oracleserviceprod


SVRMGR> show parameter license   // 查看最大会话数,0表示没有限制

共享服务器连接模式:
最大  缺省    说明
65534 254    最大数据库文件数
254  32    最大日志文件数
5  2    最大日志成员数


二、表空间管理

SQL> select * from dba_free_space;  // 查询表空间是否存在碎片

1、创建表空间
(1)语法:SQL> Create Tablespace tablespacename
   Datafile 'filespec' Attributes
   Default Storage
   Online/offline;


(2)实例:
SQL> Create tablespace sales_2002
 datafile
 'D:/oracle/oradata/ora8i/sales_2002_01.dbf' size 100m,
 'D:/Oracle/oradata/ora8i/sales_2002_02.dbf' size 100m
 autoextend on next 100m maxsize unlimited,   // 每个文件都可以加上这一行,表空间的扩展属性
 'D:/oracle/oradata/ora8i/sales_2002_03.dbf' size 100m
 default storage(initial 100k
     next 100k
     minextents 1
     maxextents unlimited
     pctincrease 0);
    
    
(3)查询表空间与数据文件对应关系:
SQL> select tablespace_name, bytes, blocks, autoextensible, file_name from dba_data_files;

(4)创建临时表空间:在创建表空间时增加临时表空间关键字:temporary

SQL> Create tablespace temp_data datafile 'd:/oracle/oradata/ora8i/acc01.dbf' reuse
default storage(initial 100k next 100k minextents 1 maxextents unlimited pctincrease 0)
TEMPORARY;

说明:A.上例中的reuse指在相应的目录已经存在一个acc01.dbf(大小已经确定,例如一个被删除的表空间,但物理文件未被删除),则按这个文件的大小新建文件,内容将被覆盖。如果文件不存在,需要使用size来确定大小。

B. 临时表空间用于排序,在创建用户时可以为用户指定专用的临时表空间。临时表空间不得用于创建永久性实体(例如表)。
SQL> create table aa(c1 number(10)) tablespace sales_2002;
SQL> create table bb(c1 number(10)) tablespace temp_data;


C. 查询表空间类型:SQL> select tablespace_name, contents from dba_tablespaces;

2、改变表空间:

(1)为表空间增加数据文件:
SQL> Alter tablespace sales_2002 ADD
 datafile
 'd:/oracle/oradata/ora8i/sales_2002_04.dbf' size 10m,
 'd:/oracle/oradata/ora8i/sales_2002_05.dbf' size 10m
 autoextend on next 50m maxsize 1000m;

(2) 将数据文件从一个磁盘移动到另一个磁盘
 。将表空间脱机offline
  SQL> Alter tablespace sales_2002 offline;
 。物理移动:将要移动的表空间文件复制或移动到目的磁盘
 。逻辑移动
  SQL> alter tablespace sales_2002
   rename datafile
   'd:/oracle/oradata/ora8i/sales_2002_04.dbf',
   'd:/oracle/oradata/ora8i/sales_2002_05.dbf'
   to
   'c:/sales_2002_04.dbf',
   'c:/sales_2002.05.dbf';
 。将表空间联机online
  SQL> alter tablespace sales_2002 online;
 
其中,system表空间数据文件不得移动。

(3) 修改表空间的缺省存储参数

SQL> alter tablespace sales_2002
 default storage(
 initial 1m
 next 1m
 minextents 2
 maxextents 200
 pctincrease 50);
 
3、删除表空间
SQL> Drop tablespace 表空间名;  // 空的表空间。
SQL> Drop tablespace 表空间名 INCLUDING CONTENTS;  // 如果表空间中已经建表,必须加Including contents参数。

删除表空间后,再物理删除相应的表空间文件,一定要确认是否删除了正确的物理文件,在UNIX下,任何文件对root用户来说都没有保护措施,可以随便删除。

三、Oracle8i启用本地化管理(Locally Managed Tablespaces):
表空间类型:数据字典管理表空间,本地化管理表空间

本地化管理表空间自动消除磁盘碎片

SQL> create tablespace account datafile 'd:/oracle/oradata/ora8i/acc01.dbf' 10m
 default storage(initial 40k next 40k minextents 1 maxextents 121 pctincrease 0);
 
SQL> Alter database datafile 'd:/oracle/oradata/ora8i/acc01.dbf' resize 50m;

SQL> Alter tablespace account coalesce;  // 磁盘碎片合并命令。

1、区大小相同
SQL> Create tablespace account
 datafile 'd:/oracle/oradata/ora8i/acc01.dbf' size 10m,
 'd:/oracle/oradata/ora8i/acc02.dbf' size 10m
  extent management local uniform size 50k;
// extent management local: 区本地化管理;uniform:每个区大小相同,如果不指定size,size默认是1m

对于实行本地化管理的数据文件仍然可以使用autoextend on next, maxsize等参数。

查询表空间类型及区管理方式:
SQL> select tablespace_name, extent_management, allocation_type from dba_tablespaces;

2、区大小由系统自动分配相同(系统缺省方式)
SQL> Create tablespace finance
 datafile
 'd:/oracle/oradata/ora8i/fina01.dbf' size 10m
 extent management local autoallocate;   // 缺省状况是autoallocate,如果只写extent management local。

<=等价=>
SQL> Create tablespace finance
 datafile
 'd:/oracle/oradata/ora8i/fina01.dbf' size 10m
 extent management local;
 
表大小  区大小
64K   64K
1m   1m
64m   8m
1000m  64m

3、创建本地化管理临时表空间
SQL> Create temporary tablespace temp1
 tempfile
 'd:/oracle/oradata/ora8i/temp1_01.dbf' size 10m
 extent management local uniform size 10k;
 
[临时表空间不得使用AutoAllocate选项,就算不写uniform,默认也是uniform]
 
SQL> select tablespace_name, extent_management, allocation_type from dba_tablespaces;

[2002.05.16]
//=====================================================================================================================
四、回退段管理
1、创建回退段:rbs

[*]手动创建数据库后,必须先创建回退段表空间:
SQL> create tablespace rbs
 datafile 'd:/oracle/oradata/ora8i/rbs01.dbf' size 50m;

[*]创建回退段:
SQL> Create rollback segment rs01
 tablespace rbs
 storage(initial 40k next 40k
 minextents 2      // 最少是2,不能是1
 maxextents 121
 optimal 120k);  // optimal值的大小至少比2个区的大小要大才有意义,在本例中要大于80K。
 
回退段的工作过程:(80K不够用了)扩张->(使用结束)回缩到Optimal值 ->(120K不够用了)再扩张。

新建回退段的缺省状态是offline.

SQL> Create rollback segment rs02 tablespace rbs; // 如果不加storage参数,则各参数取缺省值(即表空间的相关值)

[*]查询回退段信息:
SQL> select segment_name, tablespace_name, status from dba_rollback_segs;

[*]回退段的设计方法:
A. 使用create rollback segment 创建多个回退段,至少四个事务平均一个回退段
B. 修改参数文件,将创建的回退段写入下列参数:rollback_segments=(rs01,rs02,...)
C. 重新启动数据库

[*]创建公共回退段:
SQL> create public rollback segment rs10 tablespace rbs;


修改公共回退段,使公共回退段online:
SQL> alter rollback segment rs10 online;

公共回退段不需要修改参数文件即可online。

查询:SQL> select segment_name, tablespace_name, status, owner from dba_rollback_segs;


2、修改回退段

SQL> Alter rollback segment 回退段名 online/offline; //对于私有回退段来说,只是临时修改,下次数据库启动时,只有参数文件中的回退段是online


3、删除回退段
A. offline
B. SQL> drop rollback segment 段名;
C. 如果是私有回退段,需要将其从参数文件中去掉。

// 无论是公共回退段还是私有回退段,都是系统共用的回退段。即作用相同。

[第五章 Oracle 数据库用户管理]

// PowerPoint讲义:DBA_用户.PPT

一、创建用户的Profile文件
SQL> create profile student limit  // student为资源文件名
 FAILED_LOGIN_ATTEMPTS  3  //指定锁定用户的登录失败次数
 PASSWORD_LOCK_TIME 5  //指定用户被锁定天数
 PASSWORD_LIFE_TIME 30  //指定口令可用天数
 ...
 [参考讲义:P6-P7]

二、创建用户
SQL> Create User username
 Identified by password
 Default Tablespace tablespace
 Temporary Tablespace tablespace
 Profile profile
 Quota integer/unlimited on tablespace;

例:
SQL> Create user acc01
 identified by acc01   // 如果密码是数字,请用双引号括起来
 default tablespace account
 temporary tablespace temp
 profile default
 quota 50m on account;
SQL> grant connect, resource to acc01;

[*] 查询用户缺省表空间、临时表空间
SQL> select username, default_tablespace, temporary_tablespace from dba_users;

[*] 查询系统资源文件名:
SQL> select * from dba_profiles;
资源文件类似表,一旦创建就会保存在数据库中。

/********************************************************************************************
SQL> select username, profile, default_tablespace, temporary_tablespace from dba_users;

SQL> create profile common limit
 failed_login_attempts 5
 idle_time 5;
 
SQL> Alter user acc01 profile common;

**********************************************************************************************/

三、修改用户:
SQL> Alter User 用户名
 Identified 口令
 Default Tablespace tablespace
 Temporary Tablespace tablespace
 Profile profile
 Quota integer/unlimited on tablespace;
 
1、修改口令字:
SQL>Alter user acc01 identified by "12345";

2、修改用户缺省表空间:
SQL> Alter user acc01 default tablespace users;

3、修改用户临时表空间
SQL> Alter user acc01 temporary tablespace temp_data;

4、强制用户修改口令字:
SQL> Alter user acc01 password expire;

5、将用户加锁
SQL> Alter user acc01 account lock;  // 加锁
SQL> Alter user acc01 account unlock;  // 解锁

四、删除用户
SQL>drop user 用户名;  //用户没有建任何实体
SQL> drop user 用户名 CASCADE;  // 将用户及其所建实体全部删除

*1. 当前正连接的用户不得删除。


五、监视用户:
1、查询用户会话信息:
SQL> select username, sid, serial#, machine from v$session;

2、删除用户会话信息:
SQL> Alter system kill session 'sid, serial#';

3、查询用户SQL语句:
SQL> select user_name, sql_text from v$open_cursor;


/***************************************************************************************************************************
SQL> ALTER SESSION SET
 NLS_LANGUAGE= 'SIMPLIFIED CHINESE'
 NLS_TERRITORY= 'CHINA'
 NLS_CURRENCY= 'RMB'
 NLS_ISO_CURRENCY= 'CHINA'
 NLS_NUMERIC_CHARACTERS= '.,'
 NLS_CALENDAR= 'GREGORIAN'
 NLS_DATE_FORMAT= 'yyyy-mm-dd dy'
 NLS_DATE_LANGUAGE= 'SIMPLIFIED CHINESE' 
 NLS_SORT= 'BINARY'
 TIME_ZONE= '+08:00'
 NLS_DUAL_CURRENCY = 'RMB'
 NLS_TIME_FORMAT = 'HH.MI.SSXFF AM'
 NLS_TIMESTAMP_FORMAT = 'DD-MON-RR HH.MI.SSXFF AM'
 NLS_TIME_TZ_FORMAT = 'HH.MI.SSXFF AM TZH:TZM'
 NLS_TIMESTAMP_TZ_FORMAT = 'DD-MON-RR HH.MI.SSXFF AM TZH:TZM'
***************************************************************************************************************************/

你可能感兴趣的:(oracle,linux,unix,职场,休闲)