ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ORACLE的基本操作

ORACLE的基本操作

原创 Linux操作系统 作者:beifushengzq 时间:2011-03-24 11:40:07 0 删除 编辑
ORACLE的基本操作
===========================================================
a

5.1.1 启动监听服务
服务器端直接连接数据库可以不需要监听服务,但远程连接必需启动监听服务,win平台下可以直接在服务里启动即可,也可以通过命令行的方式启动:
lsnrctl start
. . . . . .
停止监听:
lsnrctl stop
查看监听状态:
lsnrctl status
5.2 打开数据库与关闭数据库
数据库的打开与关闭正常情况下可以无需人工干预,在OS系统里有自动执行的功能。但在某些情况下可能需要人工对数据库进行维护。
WIN平台可以在服务里进行启动与停止,也可以通过命令行方式进行!
Net start oracleserviceSID
Net stop oracleserviceISD
或远程通过sqlplus进行关闭与启动数据库(前提是服务端的服务已启动!)
打开数据库可以分三个阶段,一般我们使用startup命令即可,当要重新创建控制文件时,需要以startup nomount命令打开数据库,当需要改变数据库的运行模式时,需要以startup mount命令打开数据库。
5.2.1 STARTUP的使用说明

1.不装入数据库而启动实例(NOMOUNT)
Oracle数据库的启动如果是:
STARTUP NOMOUNT

则它的启动过程如下:
1) 读取数据库初始化参数文件 initsid.ora 中参数;
2) 根据参数文件的SGA参数进行SGA的设置;
3) 启动DBWR,LGWR,SMON等 主要进程;
4) 打开数据库所用的跟踪文件alert file和trace file。

完成实例启动后数据库处于NOMUNT状态。
可以不装入数据库而启动实例,一般是在数据库创建时才可以这样做。

2.启动实例并装入数据库 (MOUNT)
用户可以用:
STARTUP MOUNT

启动实例而并装入数据库,但不打开数据库,允许用户执行特定的维护操作。例如:
l 重命名数据文件;
l 添加、撤消或重命名重做日志文件;
l 启动和禁止重做日志归档;
l 执行全部的数据库恢复。

这样的操作除了完成上面NOMOUNT所完成的操作外,还完成下面的操作:
1) 读取参数文件以获得控制文件信息;
2) 读取控制文件以得到的数据文件和日志文件的信息;

3.启动实例、装入数据库、打开数据库 (OPEN)
正常情况是一个实例被启动,数据库装入并打开。这种模式允许任何有效用户连接到数据库并执行典型的数据库访问操作。
STARTUP 
或 STARTUP OPEN

这样的方式是完全打开数据库。它除了完成上面STARTUP MOUNT所完成的操作外,还完成:
1) 打开所有的数据文件和日志文件,并设置为 可读写;
2) 打开数据库的限制,让所有用户可联机。

4.限制在启动时对数据库的访问
用户可以在严格的模式下启动实例并装入数据库,这样的模式只允许DBA做以下的工作:

l 执行结构维护,如重建索引;
l 执行数据库文件的导入导出;
l 执行数据装载;
l 临时阻止典型用户使用数据。

STARTUP RESTRICT

5.强制实例启动
可以用下面命令来强行启动实例,如果一个实例正在启动,则STARTUP FORCE 重新启动。
STARTUP FORCE;

启动图例:


Startup Stages
Parameter file is read
Instance is started
(Memory/SGA is allocated,
Background Processes started)
------------------------NOMOUNT
Control file is read
Database configuration is loaded into SGA
------------------------MOUNT
Datafiles and redo log files are located
Verify all the datafiles and redo log files can be opened
Check the consistency of the database
Database opened ------------------------OPEN
Users can access the database

5.2.1.1 打开数据库
startup nomount
Starting an instance includes the following tasks:
• Reading the parameter file initsid.ora
• Allocating the SGA
• Starting the background processes
• Opening the ALERT file and the trace files
The database must be named with the DB_NAME parameter either in the init SID.ora file or in the STARTUP command.
Startup mount (alter database mount;)
Mounting the Database 
For example, the database must be mounted but not open during the following tasks:
• Renaming data files
• Enabling and disabling redo log archiving options
• Performing full database recovery
Mounting a database includes the following tasks:
• Associating a database with a previously started instance
• Locating and opening the control files specified in the parameter file
• Reading the control files to obtain the names and status of the data files and redo log files (However, no checks are performed to verify the existence of the data files and online redo log files at this time.)
startup (alter database open;)
Opening the Database 
• Opening the online data files
• Opening the online redo log files
If any of the data files or online redo log files are not present when you attempt to open the database, the Oracle server returns an error.
During this final stage, the Oracle server verifies that all the data files and online redo log files can be opened and checks the consistency of the database. If necessary, the System Monitor background process (SMON) initiates instance recovery.

Instance Recovery
Instance recovery consists of the following steps:
1 Rolling forward to recover data that has not been recorded in the data files but that has been recorded in the online redo log
2 Opening the database instead of waiting for all transactions to be rolled back before making the database available (Any data that is not locked by unrecovered transactions is immediately available.)
3 Rolling back uncommitted transactions by SMON and by the individual server processes as they access locked data



5.2.2 关闭数据库
Closing the Database 
Dismounting the Database 
Shutting Down the Instance 
SHUTDOWN的四个参数:NORMAL、TRANSACTIONAL、IMMEDIATE、ABORT。缺省不带任何参数时表示是NORMAL。 
SHUTDOWN NORMAL:不允许新的连接、等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。 
SHUTDOWN TRANSACTIONAL:不允许新的连接、不等待会话结束、等待事务结束、做一个检查点并关闭数据文件。启动时不需要实例恢复。 
SHUTDOWN IMMEDIATE:不允许新的连接、不等待会话结束、不等待事务结束、做一个检查点并关闭数据文件。没有结束的事务是自动rollback的。启动时不需要实例恢复。 
SHUTDOWN ABORT:不允许新的连接、不等待会话结束、不等待事务结束、不做检查点且没有关闭数据文件。启动时自动进行实例恢复。 
另外,对于NORMAL、TRANSACTIONAL、IMMEDIATE,DB Buffer Cache的内容写入了数据文件,没有提交的事务被回滚,所有的资源被释放,数据库被“干净”的关闭。 
对于ABORT,DB Buffer Cache的内容没有写入数据文件,没有提交的事务也没有回滚。数据库没有dismount和关闭,数据文件也没有关闭。当数据库启动时,需要通过redo log恢复数据,通过回滚段对事务回滚,对资源进行释放。

Shutdown Mode ABORT IMMEDIATE TRANSACTIONAL NORMAL
Allow new connections X X X X
Wait until current sessions end X X X ü
Wait until current transactions end X X ü ü
Force a checkpoint and close files X ü ü ü
Shutdown immediate 
Shutdown transactional
Shutdown 
Shutdown abort

How to terminate a user session
Example : To kill scott’s session
SELECT sid, serial# FROM v$session WHERE
username=‘SCOTT’;
SID SERIAL#
------ ---------
7 15
ALTER SYSTEM KILL SESSION ‘7,15’;

5.3 数据库归档模式与非归档模式的转换
在创建数据库时,作为创建数据库的一部分,就决定了数据库初始的存档方式。一般情况下为 NOARCHIVELOG 方式。当数据库创建好以后,根据我们的需要把需要运行在归档方式的数据库改成 ARCHIVELOG 方式。
从非归档模式转换为归档模式 
a. 关闭数据库:shutdown immediate 
b. startup mount 
c. alter database archivelog ;
d. alter database opne ;
e. (archive log start;)
注:如果开启归档模式,需保证初始化参数log_archive_start=true,否则只能进行手工归档。
从归档模式转换为非归档模式
a. 关闭数据库:shutdown immediate 
b. startup mount 
c. alter database noarchivelog ;
d. alter database open ;

注:改变数据库的运行模式是对数据库的重要改动,所以原则上要求在真正改动前要对数据库做备份(一般是冷备份),对可能出现的问题作出保护。 

5.4 创建表空间

Create tablespace hljdev 
datafile ‘c:oracleoradatauniplathljdev01.dbf'
size 50M autoextend on next 10M;
CREATE TABLESPACE tbs_aptsdev DATAFILE '&df_pt.tbs_aptsdev01.dbf'
SIZE 200m AUTOEXTEND ON NEXT 100m MAXSIZE 4096M ,
'&df_pt.tbs_aptsdev02.dbf'
SIZE 200m AUTOEXTEND ON NEXT 100m MAXSIZE 4096M SEGMENT SPACE MANAGEMENT auto ;
修改表空间的大小:
Method 1 : Adding Data Files to a Tablespace
ALTER TABLESPACE app_data ADD DATAFILE 
‘/DISK5/app03.dbf’ SIZE 200M;
Method 2 : Enabling Automatic Extension of new created Data Files
ALTER TABLESPACE app_data ADD DATAFILE 
‘/DISK6/app04.dbf’ SIZE 200M
AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
Method 3 : Changing the Size of Data Files Manually
ALTER DATABASE DATAFILE ‘/DISK5/app02.dbf’ 
RESIZE 200M;

5.5 创建用户
Create user hljdev identified by hljdev 
default tablespace hljdev 
temporary tablespace temp; 
grant connect,resource to hljdev;
尽量不要把DBA角色赋于普通用户,尤其产品环境下。
SQL>create user dbuser identified by oracle default tablespace data temporary tablespace temp quota unlimited on data quota 0 on system quota 0 on tools quota 0 on users;
revoke connect from dbuser;
drop user dbuser cascade;


相关系统表:
user(dba)_users
user(dba)_role_privs 角色权限
user(dba)_sys_privs 系统权限
user(dba)_tab_privs 对其他用户表操作的权限
user_ts_quotas 表空间限额

5.6 控制文件备份与恢复
控制文件是数据库的心脏,它包含以下信息:
属于数据库的数据文件和重做日志文件信息、数据库中的数据应该以何种字符集存储的信息、数据库中每个数据文件的状态和版本信息、以及其它的重要信息。包含在控制文件中的大部分参数是在数据库创建过程中设定的,并且相对来说是静态的;也就是说,它们不是经常改变的。控制文件采用二进制格式,并且是不可读或手工编辑的。
控制文件是在数据库创建时创建的。大多数数据库可以操作多个控制文件。特定控制文件的创建是在i n i t . o r a 参数C O N T R O L _ F I L E S 中指定的,在C R E ATE DATA B A S E 子句中指定的数据库创建参数存贮在这些文件中。
如果没有正确的控制文件,数据库不能被打开。如果由于某种原因,导致控制文件无效或毁坏,数据库将无法启动,并且存储在数据库中的数据信息将无法访问。正是由于这个原因,控制文件的镜像备份功能是被O r a c l e 服务器内部支持的,并且也是大力推荐的。
备份二进制的控制文件:
alter database backup controlfile to ‘d:controlfile_bak.ora’;
备份文本格式的控制文件:
alter database backup controlfile to trace;
(文本格式的控制文件备份在user_dump_dest参数指定的目录下,一般在oracleadminSIDudump)
CREATE CONTROLFILE REUSE(set) DATABASE "ORCL"(“orcl_new”) NORESETLOGS NOARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 2
MAXDATAFILES 254
MAXINSTANCES 1
MAXLOGHISTORY 452
LOGFILE
GROUP 1 'D:ORACLEORADATAORCLREDO01.LOG' SIZE 1M,
GROUP 2 'D:ORACLEORADATAORCLREDO02.LOG' SIZE 1M,
GROUP 3 'D:ORACLEORADATAORCLREDO03.LOG' SIZE 1M
DATAFILE
'D:ORACLEORADATAORCLSYSTEM011.DBF',
'D:ORACLEORADATAORCLRBS01.DBF',
'D:ORACLEORADATAORCLUSERS01.DBF',
'D:ORACLEORADATAORCLTEMP01.DBF',
'D:ORACLEORADATAORCLTOOLS01.DBF',
'D:ORACLEORADATAORCLINDX01.DBF'
CHARACTER SET ZHS16GBK;
ALTER DATABASE OPEN RESETLOGS;
ALTER TABLESPACE TEMP ADD TEMPFILE 'D:ORACLEORADATAUTEMP.DBF'
SIZE 10485760 REUSE AUTOEXTEND ON;
恢复控制文件:
(注:任何数据库的恢复操作必须在Orcle DBA的参与下进行,并务必首先做好数据库的冷备份!)

5.7 数据文件及联机日志文件的扩容与移动
修改表空间的大小:
l 方法1:给表空间增加一个数据文件
ALTER TABLESPACE app_data ADD DATAFILE ‘/DISK5/app03.dbf’ SIZE 200M;
l 方法2:允许数据文件自动扩展物理空间
ALTER TABLESPACE app_data ADD DATAFILE ‘/DISK6/app04.dbf’ SIZE 200M
AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
l 方法3:手工改变当前数据文件的物理尺寸
ALTER DATABASE DATAFILE ‘/DISK5/app02.dbf’ RESIZE 500M;

删除表空间(连同物理文件)
SQL>drop tablespace data including contents and datafiles;
数据文件移动
SQL>alter database rename file ‘path1/data_01.dbf’ to ‘path2/data01.dbf’;

SQL>alter tablespace tbsdata rename datafile ‘path/data_01.dbf’ to ‘path2/data01.dbf’;
查看剩余空间
SQL>select tablespace_name,sum(bytes),max(bytes) from dba_free_space group by tablespace_name;
注意:空闲数据块总和sum(bytes)够用并不意味每个空闲块都满足分配需要,所以当表空间不够分配扩展块的时候,还要查看最大空闲数据块max(bytes)的大小。
合并空闲块
如果表空间上的数据对象经常发生类似drop-create 的变动,加之未采用统一的扩展块尺寸,使那些采用较大扩展块的数据对象不能利用较小的空间碎片,造成空间浪费。可通过将较小的空闲块合并成较大的空闲块的方法,减少空间浪费。
SQL>alter tablespace tbsdata coalesce;

建立日志组
SQL>alter database add logfile group x(‘log1a’,’log1b’) size 10M;
增加日志组成员
SQL>alter database add logfile member ‘log1c’ to group x;
删除日志组
数据库实例至少需要2 个日志组,只有状态为inactive 的日志组才能被删除,而当前日志组状态为current,上一个切换的日志组状态为active,这就意味着至少存在3 个日志组才能删除其中的一个,如果要更新全部日志组,只能删除一个,再创建一个,直至全部被更新。
SQL>alter database drop logfile group x;
如果要删除的日志组是当前日志组,必须先将其切换至状态为inactive,再删除。
SQL>alter system switch logfile;
删除日志组成员
SQL>alter database drop logfile member ‘log1c’;
改变联机日志文件大小
l 增加日志组
SQL>alter database add logfile group 4(‘log4a’,’log4b’) size 100M;
SQL>alter database add logfile group 5(‘log5a’,’log5b’) size 100M;
SQL>alter database add logfile group 6(‘log6a’,’log6b’) size 100M;
l 切换日志组
SQL>alter system switch logfile; 
SQL>alter system switch logfile; 
SQL>alter system switch logfile; 
l 删除老日志组
ALTER DATABASE DROP LOGFILE GROUP 1;
ALTER DATABASE DROP LOGFILE GROUP 2;
ALTER DATABASE DROP LOGFILE GROUP 3;
l 到操作系统下删除原旧的日志文件组1,2,3中的文件。 

5.8 Others
Creating Tablespaces
Example
CREATE TABLESPACE app_data
DATAFILE ‘/DISK4/app01.dbf’ SIZE 100M,
‘/DISK5/app02.dbf’ SIZE 100M
MINIMUM EXTENT 500K
DEFAULT STORAGE ( INITIAL 500K
NEXT 500K
MINEXTENTS 3
MAXEXTENTS 500
PCTINCREASE 50);
INITIAL defines the size of the first extent. The minimum size of the first extent is two blocks,
that is (2*DB_BLOCK_SIZE). The default size is 5 blocks, that is (5* DB_BLOCK_SIZE).
NEXT refers to the size of the second extent. The minimum size of the next extent is one block.
The default size is 5 blocks, that is (5* DB_BLOCK_SIZE).
MINEXTENTS is the number of extents allocated when the segment is created. The minimum
and default is 1.
PCTINCREASE is the percent by which the extent size grows. The size of an extent is calculated using the following formula:
MAXEXTENTS determines the maximum number of extents that a segment can have. The
minimum value is 1. The default maximum value depends on the data block size. The maximum
size can also be specified by the keyword UNLIMITED, which is equivalent to a value of
2147483645.
Four Methods to increase the size of tablespaces
Method 1 : Adding Data Files to a Tablespace
ALTER TABLESPACE app_data ADD DATAFILE
‘/DISK5/app03.dbf’ SIZE 200M;
Method 2 : Enabling Automatic Extension of new created Data Files
ALTER TABLESPACE app_data ADD DATAFILE
‘/DISK6/app04.dbf’ SIZE 200M
AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
Method 3 : Enabling Automatic Extension of existing Data Files
ALTER DATABASE
DATAFILE ‘/DISK5/app03.dbf’
AUTOEXTEND ON NEXT 10M MAXSIZE 500M;
Method 4 : Changing the Size of Data Files Manually
ALTER DATABASE DATAFILE ‘/DISK5/app02.dbf’
RESIZE 200M;

删除表空间
SQL>drop tablespace data including contents and datafiles;
数据文件移动
SQL>alter database rename file ‘path1/data_01.dbf’ to ‘path2/data01.dbf’;

SQL>alter tablespace tbsdata rename datafile ‘path/data_01.dbf’ to ‘path2/data01.dbf’;
SQL>alter database open;
查看剩余空间
SQL>select tablespace_name,sum(bytes),max(bytes) from dba_free_space group by
tablespace_name;
注意:空闲数据块总和sum(bytes)够用并不意味每个空闲块都满足分配需要,所以当
表空间不够分配扩展块的时候,还要查看最大空闲数据块max(bytes)的大小。
合并空闲块
如果表空间上的数据对象经常发生类似drop-create 的变动,加之未采用统一的扩展块
尺寸,使那些采用较大扩展块的数据对象不能利用较小的空间碎片,造成空间浪费。可通
过将较小的空闲块合并成较大的空闲块的方法,减少空间浪费。
SQL>alter tablespace tbsdata coalesce;


建立日志组
SQL>alter database add logfile group x(‘log1a’,’log1b’) size 10M;
增加日志组成员
SQL>alter database add logfile member ‘log1c’ to group x;
删除日志
数据库实例至少需要2 个日志组,只有状态为inactive 的日志组才能被删除,而当前
日志组状态为current,上一个切换的日志组状态为active,这就意味着至少存在3 个日志
组才能删除其中的一个,如果要更新全部日志组,只能删除一个,再创建一个,直至全部
被更新。
SQL>alter database drop logfile group x;
如果要删除的日志组是当前日志组,必须先将其切换至状态为inactive,再删除。
SQL>alter system switch logfile;
删除日志组成员
SQL>alter database drop logfile member ‘log1c’;
相关系统表
v$log #日志组状态、占用空间、顺序号等
v$logfile #日志组文件
Maintenance Operations on Redo Log files
Example 1 : Adding Online Redo Log Groups
ALTER DATABASE ADD LOGFILE
(‘/DISK3/log3a.rdo’) size 1M;
Example 2 : Adding Online Redo Log Members
ALTER DATABASE ADD LOGFILE MEMBER
‘/DISK4/log1b.rdo’ TO GROUP 1,
‘/DISK4/log2b.rdo’ TO GROUP 2;
Example 3 : Dropping Online Redo Log Groups
ALTER DATABASE DROP LOGFILE GROUP 3;
Example 4 : Dropping Online Redo Log Members
ALTER DATABASE DROP LOGFILE MEMBER
‘/DISK4/log2b.dbf’;

5.8.1 表数据移动
alter table test move (tablespace hljdev);
5.8.2 重建索引
alter index test_ind rebuild tablespace indx nologging;
5.8.3 收集统计数据
exec dbms_stats.gather_schema_stats('OWNER_NAME',20);
exec dbms_stats.delete_schema_stats('OWNER_NAME');

(<8i) exec dbms_utility.analyze_schema('OWNER_NAME','compute');

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/804471/viewspace-690347/,如需转载,请注明出处,否则将追究法律责任。

上一篇: resetlogs
下一篇: 检查点相关知识
请登录后发表评论 登录
全部评论

注册时间:2011-03-21

  • 博文量
    12
  • 访问量
    11992