启动和停止数据库

启动数据库

数据库启动的阶段:很重要!

nomount:第一个台阶

shoutdown --> nomount:

startup nomount


1.读参数文件分配实例

2.产生警报日志文件


select instance_name,status from v$instance;


INSTANCE_NAME STATUS

---------------- ------------

orcl STARTED


nomount 状态下可以:

创建数据库

重建控制文件

修改初始化参数

能够查询于内存和进程相关的数据字典


mount:第二个台阶

加载控制文件的信息到内存

nomount --> mount:

alter database mount;


select instance_name,status from v$instance;


INSTANCE_NAME STATUS

---------------- ------------

orcl MOUNTED


备份

还原

恢复

修改数据库的归档模式

打开和关闭闪回数据库的功能

移动数据文件和联机日志文件

可以进行数据文件级别的offline但不能作表空间级别的offline

可以访问所有的v$xxx


open:第三个台阶

需要所有的数据文件和联机日志文件

mount --> open

alter database open;

alter database open read only;

只能查询不能修改数据

可以执行本地管理的表空间的磁盘排序!(没讲!)


select open_mode from v$database;


受限会话访问模式:(只有拥有RESTRICTED SESSION权限

的用户才可以创建会话)


select logins from v$instance;


alter system enable RESTRICTED SESSION;

alter system disable RESTRICTED SESSION;

grant RESTRICTED SESSION to scott;

revoke RESTRICTED SESSION from scott;

练习:启动空实例(demo)

创建参数文件(pfile):

vi $ORACLE_HOME/dbs/initdemo.ora

-----------------------------------------------

db_name=demo

shared_pool_size=100m


如果有多个参数文件存在,由$ORACLE_SID环境

变量的值决定使用哪一个参数文件!


问题:

如果想启动orcl实例怎么办?

echo $ORACLE_SID

export ORACLE_SID=orcl


如果想启动demo实例怎么办?

echo $ORACLE_SID

export ORACLE_SID=demo


sqlplus /nolog

conn / as sysdba

startup nomount --启动的实例是哪一个?

停止数据库

shutdown normal

不允许建立新的连接(普通用户)

等待查询结束

等待事务结束

产生检查点(完全检查点)

关闭数据文件

卸载控制文件

关闭实例


shutdown transactional

不允许建立新的连接(普通用户)

不等待查询结束(查询的会话被杀掉)

等待事务结束

产生检查点(完全检查点)

关闭数据文件

卸载控制文件

关闭实例


shutdown immediate

不允许建立新的连接(普通用户)

不等待查询结束(查询的会话被杀掉)

不等待事务结束(将事务rollback)

产生检查点(完全检查点)

关闭数据文件

卸载控制文件

关闭实例


shutdown abort

对oracle数据库相当于拔电源!

是脏库!重新启动数据库时需要实例的恢复!


startup force = shutdown abort + startup

startup force nomount | mount


--从控制文件读取信息:

select file#,checkpoint_change#,last_change# from v$datafile;


--从数据文件头直接读取信息:

select file#,CHECKPOINT_CHANGE#,fuzzy from v$datafile_header;


数据库必至少在mount状态才能查询!

练习

如何判断数据库是正常停止的?

dbca创建数据库

export ORACLE_SID=test

sqlplus /nolog

conn / as sysdba


export ORACLE_SID=orcl

sqlplus /nolog

conn / as sysdba


ps -ef | grep ora_

手工创建数据库(demo)

1.准备相关路径:

trace file (实例管理的目录):$ORACLE_BASE/admin//

mkdir -p /u01/app/oracle/admin/demo/adump

mkdir -p /u01/app/oracle/admin/demo/bdump

mkdir -p /u01/app/oracle/admin/demo/cdump

mkdir -p /u01/app/oracle/admin/demo/udump


存放数据库文件的目录:

mkdir /u01/app/oracle/oradata/demo


2.设置环境变量:

export ORACLE_SID=demo


3.创建口令文件:

cd $ORACLE_HOME/dbs

orapwd file=orapwdemo password=oracle


4.准备参数文件:

cd $ORACLE_HOME/dbs

--vi initdemo.ora-------------------------------------

compatible=10.2.0.1.0

db_name=demo

shared_pool_size=200m

audit_file_dest='/u01/app/oracle/admin/demo/adump'

background_dump_dest='/u01/app/oracle/admin/demo/bdump'

core_dump_dest='/u01/app/oracle/admin/demo/cdump'

user_dump_dest='/u01/app/oracle/admin/demo/udump'

control_files='/u01/app/oracle/oradata/demo/control01.ctl'

db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'

db_recovery_file_dest_size=1g

undo_management=auto

undo_tablespace=undotbs1


5.启动数据库到nomount

show parameter name --校验进入的实例是demo


6.创建数据库

create database demo

maxinstances 8

maxloghistory 1

maxlogfiles 16

maxlogmembers 3

maxdatafiles 100

datafile '/u01/app/oracle/oradata/demo/system01.dbf' size 300m autoextend on extent management local

sysaux datafile '/u01/app/oracle/oradata/demo/sysaux01.dbf' size 120m autoextend on

default temporary tablespace temp tempfile '/u01/app/oracle/oradata/demo/temp01.dbf' size 20m

undo tablespace undotbs1 datafile '/u01/app/oracle/oradata/demo/undotbs01.dbf' size 40m

character set we8iso8859p1

national character set al16utf16

logfile

group 1 '/u01/app/oracle/oradata/demo/redo01.log' size 50m,

group 2 '/u01/app/oracle/oradata/demo/redo02.log' size 50m;


创建数据字典:

@?/rdbms/admin/catalog

构造PL/SQL运行环境:

@?/rdbms/admin/catproc


创建用户安全审核表:

conn system/manager

@?/sqlplus/admin/pupbld


insert into PRODUCT_USER_PROFILE (PRODUCT,USERID,ATTRIBUTE,CHAR_VALUE)

values ('SQL*Plus','SCOTT','DROP','DISABLED');

commit;


创建scott用户:

@?/rdbms/admin/utlsampl

练习

手工创建一个数据库,db_name=madrid

数据字典

数据字典:

select count(table_name) from dict;


字典表:数据库必须open才能访问,数据相对是静态的

user_xxx :当前方案所拥有的对象的信息

all_xxx :当前方案所拥有的以及有有权力查看的对象的信息

dba_xxx :数据库所有对象的信息


动态性能视图:在mount状态都可以访问,是累加器模式,在实例生命周期时刻在变

select name from v$fixed_table;

v$xxx :的信息来源于gv$xxx

gv$xxx :包含所有实例的信息


select TEXT from dba_views where VIEW_NAME='DBA_TABLESPACES';


使用模糊匹配查找感兴趣的数据字典:

select table_name from dict where table_name like '%TABLESPACE%'; --open可用,记录所有数据字典的信息

select name from v$fixed_table where name like 'v$%XXX%'; --mount可用,记录所有动态性能视图的信息

SELECT VIEW_DEFINITION FROM V$FIXED_VIEW_DEFINITION WHERE VIEW_NAME='GV$TABLESPACE';


dict_columns记录数据字典中列的信息:

select table_name from dict_columns where COLUMN_NAME='SQL_HASH_VALUE';


用户表

select text

from dba_views

where view_name='DBA_TABLESPACES';

练习

什么是数据字典?


数据字典分几类?都是如何命名的?


mount状态下可以查询什么字典不可以查询什么字典?


字典信息的来源是什么?


怎样寻找你感兴趣的数据字典?


DICT记录的是什么信息?v$fixed_table记录的是什么信息?有了dict为什么还要v$fixed_table?

控制文件的管理

select TYPE,

RECORD_SIZE,

RECORDS_TOTAL,

RECORDS_USED

from v$controlfile_record_section;


select * from v$controlfile;


最少1个最多8个!所有的控制文件都是镜像关系!

数据库启动时使用几个控制文件由什么决定?

由初始化参数control_files决定!!


show parameter control_files


练习1.增加控制文件

1.修改参数control_files,增加一个新指针!

alter system set control_files='/u01/app/oracle/oradata/demo/control01.ctl','/u01/app/oracle/oradata/demo/control02.ctl' scope=spfile;


2.正常停止数据库:

shutdown immediate


3.使用现有的控制文件复制出新的控制文件

cp /u01/app/oracle/oradata/demo/control01.ctl /u01/app/oracle/oradata/demo/control02.ctl


4.启动数据库

startup


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ORA-00205: error in identifying control file, check alert log for more info

show parameter background_dump_dest

vi /u01/app/oracle/admin/demo/bdump/alert_demo.log


练习2.减少控制文件

练习3.移动控制文件

练习4.控制文件改名


创建控制文件:

create controlfile reuse database demo noresetlogs

maxinstances 8

maxloghistory 1

maxlogfiles 16

maxlogmembers 3

maxdatafiles 100

datafile

'/u01/app/oracle/oradata/demo/system01.dbf',

'/u01/app/oracle/oradata/demo/undotbs01.dbf',

'/u01/app/oracle/oradata/demo/sysaux01.dbf'

logfile

group 1 '/u01/app/oracle/oradata/demo/redo01.log' size 50m,

group 2 '/u01/app/oracle/oradata/demo/redo02.log' size 50m

character set we8iso8859p1;


--联机日志文件丢失

alter tablespace temp add tempfile '/u01/app/oracle/oradata/demo/temp01.dbf' reuse;

create controlfile reuse database demo resetlogs

maxinstances 8

maxloghistory 1

maxlogfiles 16

maxlogmembers 3

maxdatafiles 100

datafile

'/u01/app/oracle/oradata/demo/system01.dbf',

'/u01/app/oracle/oradata/demo/undotbs01.dbf',

'/u01/app/oracle/oradata/demo/sysaux01.dbf'

logfile

group 1 '/u01/app/oracle/oradata/demo/redo01.log' size 50m,

group 2 '/u01/app/oracle/oradata/demo/redo02.log' size 50m

character set we8iso8859p1;