实验一Oracle数据库的四种关闭方法实验

一、前情提示

Orcale数据库共有四种关闭方式,分别是:

方式

命令

immediate

shutdown immediate

TRANSACTIONAL

shutdown TRANSACTIONAL

normal

shutdown normal

abort

shutdown abort

接下来一一讨论

注:接下来所有操作均在oracle用户下执行

二、前提步骤

1.启动数据库

#1、启动实例

 startup nomount

#2、mout状态,打开控制文件

alter  database mount;

#3、打开数据库,即打开所有记录在控制文件里面的数据文件

alter database open;

#4、直接打开数据库

startup #(默认nomount->mount->open)

#5、关闭数据库
shutdown

#6、启动到只读状态

    #6.1、先启动到mount状态
    startup mount

    #6.2、只读方式打开数据库
    alter database open read only;

2.创建新用户

#创建一个新用户u1
grant connect,resource to u1 identified by u1;
#赋予用户u1创建表的权利
grant unlimited tablespace to u1;

docter关闭数据库镜像 关闭数据库方法_数据库


docter关闭数据库镜像 关闭数据库方法_学习_02

3.登录数据库

准备两个窗口,如下图

docter关闭数据库镜像 关闭数据库方法_数据库_03

分别在两个窗口用于等于用户sys和用户u1

窗口1sys用户登录

export ORACLE_SID=orcl
sqlplus / as sysdba

窗口2用户u1登录

export ORACLE_SID=orcl
sqlplus u1/u1

三、实验步骤

3.1测试immediate关闭模式

注:每次使用命令关闭数据库后,都需要重新startup重启数据库来实验

docter关闭数据库镜像 关闭数据库方法_oracle_04

3.1.1测试新会话连接

1.在一个窗口输入shutdown immediate命令

docter关闭数据库镜像 关闭数据库方法_oracle_05

2.在另外一个窗口尝试登录数据库:sqlplus u1/u1

docter关闭数据库镜像 关闭数据库方法_sql_06

3.结果:immediate关闭模式下不允许新会话连接

3.1.2测试等待会话结束

1.打开数据库、u1用户连接到数据库

docter关闭数据库镜像 关闭数据库方法_学习_07

2.sys用户下使用shutdown immediate命令

docter关闭数据库镜像 关闭数据库方法_docter关闭数据库镜像_08

3.u1用户下执行:select * from tab;

docter关闭数据库镜像 关闭数据库方法_数据库_09

4.测试结果:immediate关闭模式下不会等待会话结束

3.1.3 测试事务

1.打开数据库、u1用户连接到数据库

docter关闭数据库镜像 关闭数据库方法_oracle_10

2.u1用户进行一个事务

docter关闭数据库镜像 关闭数据库方法_oracle_11

3.sys用户下使用shutdown immediate命令

docter关闭数据库镜像 关闭数据库方法_学习_12

4.u1用户执行:select * from t1;

docter关闭数据库镜像 关闭数据库方法_数据库_13

5.测试结果:immediate关闭模式下不会等待事物结束

3.2测试TRANSACTIONAL关闭模式

注:每次使用命令关闭数据库后,都需要重新startup重启数据库来实验

docter关闭数据库镜像 关闭数据库方法_学习_14

3.2.1测试新会话连接

1.在一个窗口输入shutdown TRANSACTIONAL命令

docter关闭数据库镜像 关闭数据库方法_sql_15

2.在另外一个窗口尝试登录数据库:sqlplus u1/u1

docter关闭数据库镜像 关闭数据库方法_docter关闭数据库镜像_16

3.测试结果:TRANSACTIONAL关闭模式不允许新会话连接

3.2.2测试等待会话结束

1.打开数据库、u1用户连接到数据库

docter关闭数据库镜像 关闭数据库方法_docter关闭数据库镜像_17

2.sys用户下使用shutdown TRANSACTIONAL命令看是否能够关闭数据库

docter关闭数据库镜像 关闭数据库方法_学习_18

3.u1用户执行:select * from tab;

docter关闭数据库镜像 关闭数据库方法_sql_19

4.测试结果:TRANSACTIONAL关闭模式不会等待会话结束

3.2.3测试等待事物结束

1.打开数据库、u1用户连接到数据库

docter关闭数据库镜像 关闭数据库方法_sql_20

2.u1用户进行一个事务

docter关闭数据库镜像 关闭数据库方法_sql_21

3.sys用户下使用shutdown TRANSACTIONAL命令看是否能够关闭数据库

docter关闭数据库镜像 关闭数据库方法_学习_22

4.u1用户执行:commit;

docter关闭数据库镜像 关闭数据库方法_学习_23

5.提交后数据库关闭

docter关闭数据库镜像 关闭数据库方法_数据库_24

6.测试结果:TRANSACTIONAL关闭模式会等待实务结束

3.3测试normal关闭模式

注:每次使用命令关闭数据库后,都需要重新startup重启数据库来实验

3.3.1测试新会话连接

1.在一个窗口输入shutdown normal命令

docter关闭数据库镜像 关闭数据库方法_学习_25

2.在另外一个窗口尝试登录数据库:sqlplus u1/u1

docter关闭数据库镜像 关闭数据库方法_sql_26

3.测试结果:normal关闭模式下不允许新会话连接

3.3.2测试等待会话结束

1.打开数据库、u1用户连接到数据库

docter关闭数据库镜像 关闭数据库方法_数据库_27

2.使用shutdown normal命令看是否能够关闭数据库

docter关闭数据库镜像 关闭数据库方法_学习_28

3.u1用户执行:select * from tab;显示结果后u1执行:quit ;

docter关闭数据库镜像 关闭数据库方法_oracle_29


docter关闭数据库镜像 关闭数据库方法_docter关闭数据库镜像_30

4.数据库关闭成功

docter关闭数据库镜像 关闭数据库方法_oracle_31

5.测试结果:normal关闭模式下允许等待会话结束

3.3.3测试等待事务结束

1.打开数据库、u1用户连接到数据库

docter关闭数据库镜像 关闭数据库方法_docter关闭数据库镜像_32

2.u1用户进行一个事务

docter关闭数据库镜像 关闭数据库方法_sql_33

3.使用shutdown normal命令看是否能够关闭数据库

docter关闭数据库镜像 关闭数据库方法_oracle_34

4.u1用户执行:commit;结束事务:quit;此时数据库可以关闭

docter关闭数据库镜像 关闭数据库方法_数据库_35

5.查看数据库状态

docter关闭数据库镜像 关闭数据库方法_docter关闭数据库镜像_36

6.测试结果:normal关闭模式下会等待事物结束

3.4测试abort关闭模式

注:每次使用命令关闭数据库后,都需要重新startup重启数据库来实验

shutdown abort关闭模式属于异常关闭,他会立刻关闭数据库,不会等待任何的操作。因此这种模式关闭数据库速度是最快的

3.4.1不允许新会话连接

docter关闭数据库镜像 关闭数据库方法_docter关闭数据库镜像_37


docter关闭数据库镜像 关闭数据库方法_sql_38

3.4.2不会等待会话结束

docter关闭数据库镜像 关闭数据库方法_sql_39

3.4.3不会等待事务结束

docter关闭数据库镜像 关闭数据库方法_docter关闭数据库镜像_40

实验二 配置与连接

一、初始化参数文件

注:接下来的实验有些文件是用作者名字命名

1.进入实验目录

#进入dbs 目录
cd $ORACLE_HOME/dbs

2.创建一个实例

vi inittxp.ora #这里用的是作者本名  注:命名格式init实例名.ora

#.ora文件中添加以下参数
memory_target=1024M

db_name=txp

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

undo_tablespace=undotbs1

3.编辑数据库启动脚本

#创建一个启动脚本create_db.sql
vi create_db.sql

#脚本内容 注:这里用的是作者自己的名字
CREATE DATABASE txp 
USER SYS IDENTIFIED BY oracle USER SYSTEM IDENTIFIED BY oracle
LOGFILE GROUP 1 ('/u01/app/oracle/oradata/txp/redo1a.log') SIZE 50M,
        GROUP 2 ('/u01/app/oracle/oradata/txp/redo2a.log') SIZE 50M 
CHARACTER SET AL32UTF8 NATIONAL CHARACTER SET AL16UTF16 
EXTENT MANAGEMENT LOCAL DATAFILE 
                '/u01/app/oracle/oradata/txp/system01.dbf' SIZE 325M 
SYSAUX DATAFILE '/u01/app/oracle/oradata/txp/sysaux01.dbf' SIZE 325M 
DEFAULT TEMPORARY TABLESPACE tempts1 
        TEMPFILE '/u01/app/oracle/oradata/txp/temp01.dbf' SIZE 20M 
UNDO TABLESPACE undotbs1 
        DATAFILE '/u01/app/oracle/oradata/txp/undotbs01.dbf' SIZE 200M;

4.创建数据库存放的目录

mkdir /u01/app/oracle/oradata/txp
#注:这里是为了让数据有产生一系列配置文件,以用来防止接下来创建数据库不会报错

5.启动实例

#这里的实例名是第二步你所创建的
export ORACLE_SID=txp
#进入数据库
sqlplus / as sysdba

6.执行脚本

#SQL指令下执行以下指令

#启动数据库脚本
@create_db.sql

#启动脚本完成后,创建数据字典视图和内嵌的存储过程,这样数据库就完备并且可以使用
@?/rdbms/admin/catalog.sql

@?/rdbms/admin/catproc.sql

7.这样,一个完整的数据库就create完毕

二、连接

1.进入实验目录

cd $ORACLE_HOME/network/admin

2.编辑tnsnames.ora文件

vi tnsnames.ora

#在有orcl连接名的基础下,再添加txp和PROD1连接名
txp =     
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = pg-xc2)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = txp)
    ) 
  ) 
    
PROD1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = pg-xc2)(PORT = 1521))
    (CONNECT_DATA = 
      (SERVER = DEDICATED)
      (SERVICE_NAME = PROD1)
    )
  )

3.创建一个密码文件

#进入密码文件存放目录
cd $ORACLE_HOMEs
#创建密码文件
orapwd file=orapwtxp force=y password=oracle format=12
#注:orapw*** ***是实例名字

4.使用别名连接到数据库

使用别名连接前,需要以下步骤

#声明想别名连接的名字(区别大小写),
export ORACLE_SID=txp#txp这里可以替换其他你想别名的名字

#以数据库管理员身份登录
sqlplus / as sysdba

#进入数据库SQL>后
startup
#启动数据库后会启动你export名字的实例

#quit退出SQL>命令行,数据在后台运行,并不会退出
quit

使用lsnrctl status查看监听

docter关闭数据库镜像 关闭数据库方法_学习_41

txp实例已开启

#使用连接别名连接到数据库
sqlplus sys/oracle@txp as sysdba

4.分别添加orcl和prod1的别名,分别测试连接是否可以

注:在2.编辑tnsnames.ora文件步骤中已经添加过了,实验步骤跟步骤4类似,这里只给出实验结果图

orcl别名连接

docter关闭数据库镜像 关闭数据库方法_docter关闭数据库镜像_42

PROD1别名连接

docter关闭数据库镜像 关闭数据库方法_docter关闭数据库镜像_43