启动和停止数据库
启动数据库
数据库启动的阶段:很重要!
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;