oracle(一)

第一天 ORACLE基础

 

今日学习任务

Oracle介绍及体系结构(了解)

Oracle数据库的安装与卸载(掌握)

Oracle客户端工具(掌握)

项目案例:《收费系统》(了解)

表的创建、修改与删除(掌握)

数据的增删改(掌握)

JDBC连接Oracle(重点)

数据的导出与导入(掌握)


第一章  Oracle的简介

1.  什么是Oracle

 

Oracle数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品。 

Oracle通常应用于大型系统的数据库产品。Oracle在海量存储、高性能、高并发、安全性方面都相当不错。

Oracle数据库具有以下特点:

1)支持多用户、大事务量的事务处理(支持大并发、大访问量)

2)数据安全性和完整性控制(金融行业对安全性要求比高,通常使用ORACLE)

3)支持分布式数据处理

4)可移植性

 

MySQL和ORACLE的区别:

1、MySQL属于轻量级数据库(中小型数据库);Oracle属于重量级数据库(大型数据库)

2、MySQL是免费开源;Oracle是商业级的数据库(收费、提供技术支持)

个人观点:MySQL是实用很好用,oracle就是很好很强大

 

2.  Oracle体系结构

1、数据库

        Oracle数据库是数据的物理存储集合(各种物理文件的集合)。包括数据库文件ORA或DBF、控制文件、联机日志、参数文件。其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是Oracle就只有一个大数据库。

2、实例

实例:数据库启动时初始化的一组进程和内存结构。

在启动数据库并使用数据库的时候,实际上是连接到该数据库的实例,通过实例来连接、使用数据库。

在启动数据库时,Oracle首先要在内存中获取、划分、保留各种用途的区域,运行各种用途的后台进程,即创建一个实例(instance),然后由该实例装载、打开数据库,最后由这个实例来访问和控制数据库的各种物理结构。一个数据库可以有n个实例。

结论:实例是由操作系统的内存结构和一系列进程所组成。

 

3、数据文件(dbf)

    数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,当然真正的数据是存储是在某一个或者多个数据文件中。而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。


4、表空间

    表空间是Oracle对物理数据库上相关数据文件的逻辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在逻辑上 。

每个数据库至少有一个表空间(默认的表空间是:system表空间)。


 

5、用户

由于oracle的数据库不是普通的概念,oracle是有用户和表空间对数据进行管理和存放的。数据表不是有表空间去查询的,而是由用户去查的。因为不同用户可以在同一个表空间建立同一个名字的表(通过用户来区分)



注意:表的数据,是有用户放入某一个表空间的,而这个表空间会随机把这些表数据放到一个或者多个数据文件中。


第二章  Oracle安装与卸载

1.  Oracle版本与下载

Oracle的版本发展8、9i,10g,11g,12c。

Oracle分免费简化版本(Oracle Database Express)和完整版本(Oracle Database)

l Express版本你可以免费用于商业用途,但这个版本对cpu/内存/数据量的有限制。

完整版本可以免费用于学习、教学等;如果商用则需要收费,但可以享受Oracle公司提供的服务。

Oracle可以在大部分主流的操作系统上安装,比如Linux和Windows。

Oracle官方的网站是:https://www.oracle.com/index.html


完整版本Oracle的windows版本(32位)是从官方直接下载的参考网址:

http://download.oracle.com/otn/nt/oracle11g/112010/win32_11gR2_database_1of2.zip

http://download.oracle.com/otn/nt/oracle11g/112010/win32_11gR2_database_2of2.zip

关于ORACLE完整版的安装流程,请参考 “文档资料” --> “Oracle安装图解.doc”

 

2.  安装Oracle数据库

 

安装Oracle10g简装版:

 

 

OracleExpress10g版本安装过程:


安装准备过程结束后,进入:


点击“下一步”后:



继续点击“下一步”后:



设置Oracle安装路径(如磁盘空间足够,则默认C盘即可),并点击“下一步”后:


输入完数据库口令后,点击“下一步”:



Oracle的服务端口,默认是1521

提醒:简化版安装完成之后,你的8080端口会被占用。修改Oracle8080端口可以参考:“常见问题文档” –> “Oracle XE http端口8080的修改.docx”

点击“安装”后进入到程序安装状态:

 

数据库安装完成后:

 

 

ORACLE数据库预定义帐号:

1、SYS:Oracle数据库中权限最大的系统管理员用户

2、SYSTEM:Oracle数据库中权限仅次于SYS的系统管理员用户

SYS和SYSTEM的区别:

此时可以命令提示符下进行测试安装结果

输入:sqlplus  system/itcast     (普通登陆方式)

itcast为你安装时输入的密码

为什么可以直接在DOS窗口中输入sqlplus命令符?

因为ORACLE在安装完后,会把sqlplus命令所在的目录配置到环境变量中



使用SYS免密登录:


注意:免密码登录必须在安装有Oracle的服务器上才有效


免密码登录的原因是:oradcle安装时自动创建了一个ora_dba的组,并将当前用户放入改组。如果你连接oracle的时候,会优先使用来查找当前用户是否在组中。如果在组中,则不需要密码就可以登录。

 

3.  Oracle的相关服务

在ORACLE安装完成后,会在Windows操作系统中注册并开启相关服务。

Windows操作系统中的“控制面板”à“管理工具”à“服务”中可以查看相关Oracle服务

简化版的ORACLE数据库服务:

 

OracleServiceXE:数据库服务,这个服务会自动的启动和停止数据库。XE是简化版Oracle的默认实例标识。此服务被默认的设置为开机启动。 数据库服务进程,对应整个数据库实例

OracleXETNSListener: 监听器服务,服务只有在数据库需要远程访问的时候才需要,此服务被默认的设置为开机启动。负责服务器主机与客户端机器的连接,如果此服务停止,客户端机器连不了服务器。

OracleJobSchedulerXE: 作业调度服务,XE是Oracle实例标识。此服务被默认设置为禁用状态。该服务项默认是关闭,因为启动该服务会占用很大资源

OracleMTSRecoveryService: Oracle为微软提供的服务。该服务允许数据库充当一个微软事务服务器MTS、COM/COM+对象和分布式环境下的事务的资源管理器

OracleXEClrAgent: Oracle数据库.NET扩展服务的一部分

完整版的ORACLE数据库服务:

 

OracleServiceORCL:数据库服务,这个服务会自动的启动和停止数据库。ORCL是完整版Oracle的默认实例标识。此服务被默认的设置为开机启动。 数据库服务进程,对应整个数据库实例

OracleOraDb10g_home1TNSListener: 监听器服务,服务只有在数据库需要远程访问的时候才需要,此服务被默认的设置为开机启动。负责服务器主机与客户端机器的连接,如果此服务停止,客户端机器连不了服务器。

OracleDBConsoleorcl: 数据库控制台服务,orcl是Oracle的实例标识,默认的实例为orcl。需要运行Enterprise Manager 的时候,需要启动这个服务。此服务被默认设置为自动开机启动的,是启动em的,如果OracleDBConsoleorcl不能启动,oracle的em将无法使用。

OracleJobSchedulerORCL: 作业调度服务,ORCL是Oracle实例标识。此服务被默认设置为禁用状态。该服务项默认是关闭,因为启动该服务会占用很大资源

OracleOraDb10g_home1iSQL*Plus :isql*plus的服务进程,关闭此服务,不能够通过web页面访问数据库,需要注意此服务项与sqlplus服务无关

建议:在启动Oralce服务时,先启动数据库服务(OracleServiceXE),再启动监听服务(OracleXETNSListener)。

设置Windows系统中ORACLE服务为手动(不影响系统开机速度;在不使用ORACLE时减轻系统资源浪费)

在弹出的窗体中,设置“启动类型”为手动,然后点击“确定”



4.  卸载Oracle数据库

Oracle简化版本的卸载比较简单,仅需要再次运行简化版安装程序:


准备安装过程加载完后,会出现如下界面:

点击“下一步”后:



点击错误提示窗中的“确定”后,再去C盘把ORACLE的安装文件夹删除即可。


第三章  Oracle客户端工具

1.  使用ORACLE客户端连接数据库

“资源”文件夹中的instantclient_12_1 拷贝到D盘根目录

连接本地(本机)的Oracle:

进入命令提示符,进入该目录,输入如下命令连接ORACLE

 

如果要远程连接Oracle服务器,只需要修改IP地址、端口号(一般默认)、实例名即可

2.  PLSQL Developer安装

1、解压PLSQL Developer绿色版程序

2、在解压后的PLSQL Developer文件夹中,找到“plsqldev.ect”程序并打开


 3、在客户端登录并连接Oracle

  方式一:直接输入地址(IP)和实例名(开发中推荐此方式


方式二:通过配置文件连接


3.  PLSQL客户端连接配置文件介绍

在之前使用PLSQL Developer工具连接ORACLE时,是可以通过配置文件方式进行连接

 

为什么在选择数据库时,有一个下拉列表呢?列表中的值是从哪里获取的?

在Oracle的安装目录中存在一种ORA文件

使用记事本打开“tnsnames.ora”文件



补充知识点:用户登录角色


1、normal :普通用户

2、sysdba:拥有数据库管理员最高的权限(超级管理员)

           SYSDBA权限,即数据库管理员权限,权限包括:

打开数据库服务器   关闭数据库服务器

备份数据库       恢复数据库

日志归档       会话限制

管理功能       创建数据库实例

3、sysoper:拥有数据库操作的权限。主要用来启动、关闭数据库

SYSOPER权限,即数据库操作员权限,权限包括:
打开数据库服务器   关闭数据库服务器

备份数据库       恢复数据库
日志归档         会话限制

 

四章  项目案例:《收费系统》

1.  项目介绍与需求分析

XXX市自来水公司为更好地对自来水收费进行规范化管理,决定委托传智播客.黑马程序员开发《自来水公司收费系统》。考虑到自来水业务数量庞大,数据并发量高,决定数据库采用ORACLE数据库。主要功能包括:

1、基础信息管理:

(1)业主类型设置

(2)价格设置

(3)区域设置

(4)收费员设置

(5)地址设置

2、业主信息管理:

1)业主信息维护

2)业主信息查询

3、收费管理:

1)抄表登记

2)收费登记

3)收费记录查询

4)欠费用户清单

4、统计分析:

1)收费日报单

2)收费月报表

.......

 

2.  表结构设计

1、业主类型表(T_OWNERTYPE

字段名

类型(位数)

是否必填

说明

ID

NUMBER

主键

NAME

VARCHAR2(30)

类型名称

2、价格表(T_PRICETABLE

字段名

类型(位数)

是否必填

说明

ID

NUMBER

主键

PRICE

NUMBER(10,2)

价格

OWNERTYPEID

NUMBER

业主类型ID

MINNUM

NUMBER(10,2)

区间数开始值

MAXNUM

NUMBER(10,2)

区间数截止值

 

3、区域表(T_AREA

字段名

类型(位数)

是否必填

说明

ID

NUMBER

主键

NAME

VARCHAR2(30)

区域名称

 

4、收费员表(T_OPERATOR

字段名

类型(位数)

是否必填

说明

ID

NUMBER

主键

NAME

VARCHAR2(30)

操作员名称

 

5、地址表(T_ADDRESS

字段名

类型(位数)

是否必填

说明

ID

NUMBER

主键

NAME

VARCHAR2(30)

地址名称

AREAID

NUMBER

区域ID

OPERATORID

NUMBER

操作员ID

 

6、业主表(T_OWNERS

字段名

类型(位数)

是否必填

说明

ID

NUMBER

主键

NAME

VARCHAR2(30)

业主名称

ADDRESSID

NUMBER

地址ID

HOUSENUMBER

VARCHAR2(30)

门牌号

WATERMETER

VARCHAR2(30)

水表编号

ADDDATE

DATE

登记日期

OWNERTYPEID

NUMBER

业主类型ID

 

 

7、收费账单(T_ACCOUNT

字段名

类型(位数)

是否必填

说明

ID

NUMBER

主键

OWNERID

NUMBER

业主编号

OWNERTYPEID

NUMBER

业主类型

AREAID

NUMBER

所在区域

YEAR

CHAR(4)

账务年份

MONTH

CHAR(2)

账务月份

NUM0

NUMBER

 

上月累计数

NUM1

NUMBER

 

本月累计数

USENUM

NUMBER

 

本月使用数

METERUSERID

NUMBER

 

抄表员

METERDATE

DATE

 

抄表日期

MONEY

NUMBER(10,2)

 

应缴金额

ISFEE

CHAR(1)

是否缴费

FEEDATE

DATE

 

缴费日期

FEEUSERID

NUMBER

 

收费员

 

上述7张表的物理模型如下:

3.  创建表空间

创建表空间语法:  tablespace是表空间关键字

 

解释:

waterboss为表空间名称

datafile 用于设置物理文件名称

size 用于设置表空间的初始大小

autoextend on  用于设置自动增长,如果存储量超过初始大小,则开始自动扩容

next 用于设置扩容的空间大小

 

 

 

4.  创建用户

创建用户的语法:    create user是创建用户的关键字

 

wateruser为创建的用户名

identified by 用于设置用户的密码

default tablesapce  用于指定默认表空间名称

 

创建完ORACLE用户后,使用PL/SQL登录时发现:无法登录,权限不足。

5.  用户授权

ORACLE在创建用户后,新创建的用户不具备操作数据库的权限(例:登录权限),需要给用户授权。

 

给用户wateruser赋予DBA权限后即可登陆

 

补充知识:

ORACLE中将权限分为两类:

系统权限:系统规定用户使用数据库的权限(系统权限是对用户而言)

系统权限提供了用户在整个DBMS中执行操作的能力,会影响到整个数据库系统的安全

对象权限:是指赋予用户在特定数据库对象执行特定操作的能力(是针对表或视图而言的)

          数据库对象包括:数据表、视图、字段、序列等

语法:GRANT 对象权限[,对象权限,…] ON 用户名.对象 TO 用户;


小结:

ORACLE中,创建表之前需要先创建表空间,再创建用户,并把创建的表空间给用户(如果未给指定表空间,默认使用系统的SYSTEM表空间)


第五章  表的创建、修改与删除

1.  创建表

语法:

CREATE TABLE 表名称 (

  字段名   类型(长度)   primary key ,

  字段名   类型(长度) ,

  .......

);

   数据类型:

1. 字符型

1)CHAR :  固定长度的字符类型,最多存储2000个字节

2)VARCHAR2  :可变长度的字符类型,最多存储4000个字节

3)LONG : 大文本类型。最大可以存储2个G

2.数值型

NUMBER : 数值类型  

例如:NUMBER(5)   最大可以存的数为99999    

    NUMBER(5,2)  最大可以存的数为999.99   

3.日期型

1)DATE:日期时间型,精确到秒    类似于MYSQL中:datetime

2)TIMESTAMP:精确到秒的小数点后9位

4.二进制型(大数据类型)

1)CLOB : 存储字符,最大可以存4个G

2)BLOB:存储图像、声音、视频等二进制数据,最多可以存4个G

现在开发中的作法:把图像、声音、视频文件存储到文件服务器中(例:七牛云文件服务器)。数据表中的字段存储的是文件的URL

实例:创建业主表

 

其它表的创建参见 “自来水收费系统建表语句.txt”

 

2.  修改表

1. 增加字段语法:

ALTER TABLE 表名称 ADD(列名1 类型 [DEFAULT 默认值],列名1 类型 [DEFAULT 默认值]...)

 

为业主表增加两个字段,语句:

--追加字段

ALTER TABLE T_OWNERS ADD 

(

  REMARK VARCHAR2(20),

  OUTDATE DATE

)

 

2. 修改字段类型语法:

ALTER TABLE 表名称 MODIFY(列名1 类型 [DEFAULT 默认值],列名1 类型 [DEFAULT 默认值]...)

 

修改两个字段的类型,语句:

--修改字段

ALTER TABLE T_OWNERS MODIFY 

(

REMARK CHAR(20),

OUTDATE TIMESTAMP

)

 

3. 修改字段名语法:

ALTER TABLE 表名称 RENAME COLUMN 原列名 TO 新列名

 

语句:

ALTER TABLE T_OWNERS RENAME COLUMN OUTDATE TO EXITDATE

 

4. 删除字段名

--删除一个字段

ALTER TABLE 表名称 DROP COLUMN 列名

--删除多个字段

ALTER TABLE 表名称 DROP (列名1,列名2...)

语句:

--删除字段

ALTER TABLE T_OWNERS DROP COLUMN REMARK

 

3.  删除表

语法:

DROP TABLE 表名称

 

第六章  数据增删改

1.  插入数据

语法:

INSERT  INTO表名[(列名1,列名2,...)]VALUES(值1,值2,...)

实例:向业主表插入数据

 

 

在执行了以上insert语句后,使用ORACLE客户端连接数据库并查询T_OWNERS表时发现:

原因:PLSQL Developer工具中,执行了INSERT语句后,并没有提交事务。

 

注意:INSERT后一定要再执行commit提交事务

在PLSQLDeveloper中点击齿轮的图标后,再点击下图的绿色图标(图标为commit)

我们再次录入一条数据,语句如下:

insert into T_OWNERS VALUES (2,'赵大侃',1,'2-3','9876',sysdate,1);

commit;

以上INSERT语句的后面添加了commit命令,表示在执行完INSERT后又提交了事务。

 

2.  修改数据

语法:

UPDATE 表名 SET 列名1=值1,列名2=值2,....WHERE 修改条件;

执行UPDATE后一定要再执行commit提交事务

需求:将ID为1的业主的登记日期更改为三天前的日期

update T_OWNERS set adddate=adddate-3 where id=1;

commit;

 

3.  删除数据

语法1:

DELETE FROM 表名 WHERE 删除条件;

执行DELETE后一定要再执行commit提交事务

需求:删除业主ID为2的业主信息

delete from T_OWNERS where id=2;

commit;

 

语法2:

TRUNCATE  TABLE  表名称

 

比较truncat与delete实现数据删除?

1) delete删除的数据可以rollback;truncate是不可回滚

2) delete删除可能产生碎片,并且不释放空间;truncate不会产生碎片,会释放空间

3) delete是逐条删除;truncate是先摧毁表,再重构表

 

 

。第七章  JDBC连接ORACLE

1.  创建工程,引入驱动包

第一步:创建java工程

创建waterboss工程,并在工程下建立lib文件夹

第二步:找到ORACLE的JDBC驱动包

ORACLE数据库的安装目录中可以找到当前ORACLE版本的JDBC驱动包

第三步:拷贝JDBC驱动包java工程

ojdbc14.jar拷贝到waterboss工程lib文件,然后 add to build path


2.  BaseDao

我们通常编写BaseDao负责加载驱动,获取数据库连接,关闭资源,代码如下:

package  cn.itcast.waterboss.dao;
import  java.sql.SQLException;
/**
 * 基本数据访问类
 * @author Jackie
 *
 */
public class BaseDao {

	//加载驱动
	static{
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}		
	}
	/**
	 * 获取数据库连接
	 * @return
	 * @throws SQLException
	 */
	public static java.sql.Connection getConnection() throws SQLException{
		
		return java.sql.DriverManager.getConnection(
             "jdbc:oracle:thin:@192.168.80.10:1521:XE",
             "wateruser", "itcast");
		
	}
	 
	/**
	 * 关闭资源
	 * @param rs
	 * @param stmt
	 * @param conn
	 */
	public static void closeAll(java.sql.ResultSet rs,
java.sql.Statement stmt,java.sql.Connection conn)
	{
		//关闭结果集
		if(rs!=null){
			try {
				rs.close();
			} catch (SQLException e) {				
				e.printStackTrace();
			}
		}
		//关闭执行对象
		if(stmt!=null){
			try {
				stmt.close();
			} catch (SQLException e) {				
				e.printStackTrace();
			}
		}
		//关闭执行对象
		if(conn!=null){
			try {
				conn.close();
			} catch (SQLException e) {				
				e.printStackTrace();
			}
		}
	}
}

JDBC驱动为:  oracle.jdbc.driver.OracleDriver

连接字符串( 瘦连接 ):jdbc:oracle:thin:@服务器IP:1521:XE

3.  增删改代码编写

1.创建实体类

package cn.itcast.waterboss.entity;
import java.util.Date;

/**
 * 业主实体类
 * @author Jackie
 *
 */
public class Owners {

	private Long id;//编号
	private String name;//业主名称
	private Long addressid;//地址编号
	private String housenumber;//门牌号
	private String watermeter;//水表编号
	private Date adddate;//登记日期
	private Long ownertypeid;//业主类型ID
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Long getAddressid() {
		return addressid;
	}
	public void setAddressid(Long addressid) {
		this.addressid = addressid;
	}
	public String getHousenumber() {
		return housenumber;
	}
	public void setHousenumber(String housenumber) {
		this.housenumber = housenumber;
	}
	public String getWatermeter() {
		return watermeter;
	}
	public void setWatermeter(String watermeter) {
		this.watermeter = watermeter;
	}
	public Date getAdddate() {
		return adddate;
	}
	public void setAdddate(Date adddate) {
		this.adddate = adddate;
	}
	public Long getOwnertypeid() {
		return ownertypeid;
	}
	public void setOwnertypeid(Long ownertypeid) {
		this.ownertypeid = ownertypeid;
	}
}

2.创建Dao类实现增删改

package  cn.itcast.waterboss.dao;
import  java.sql.SQLException;
import  cn.itcast.waterboss.entity.Owners;

/**
 * 业主数据访问类
 * @author Jackie
 *
 */
public class OwnersDao {

	/**
	 * 新增业主
	 * @param owners
	 */
	public static void add(Owners owners){
		
		java.sql.Connection conn=null;
		java.sql.PreparedStatement stmt=null;
		
		try {
			conn=BaseDao.getConnection();
			stmt=conn.prepareStatement("insert into T_OWNERS values(?,?,?,?,?,?,?)");
			stmt.setLong(1, owners.getId());
			stmt.setString(2, owners.getName());
			stmt.setLong(3, owners.getAddressid());
			stmt.setString(4, owners.getHousenumber());
			stmt.setString(5, owners.getWatermeter());
			stmt.setDate(6, new java.sql.Date(owners.getAdddate().getTime()));
			stmt.setLong(7, owners.getOwnertypeid());
			stmt.execute();
		} catch (SQLException e) {
			
			e.printStackTrace();
		}finally {
			BaseDao.closeAll(null, stmt, conn);
		}	
	}
	
	/**
	 * 修改业主
	 * @param owners
	 */
	public static void update(Owners owners){
		
		java.sql.Connection conn=null;
		java.sql.PreparedStatement stmt=null;
		
		try {
			conn=BaseDao.getConnection();
			stmt=conn.prepareStatement("update T_OWNERS set name=?,addressid=?,housenumber=?,"
					+ "watermeter=?,adddate=?, ownertypeid=? where id=?");
			
			stmt.setString(1, owners.getName());
			stmt.setLong(2, owners.getAddressid());
			stmt.setString(3, owners.getHousenumber());
			stmt.setString(4, owners.getWatermeter());
			stmt.setDate(5, new java.sql.Date(owners.getAdddate().getTime()));
			stmt.setLong(6, owners.getOwnertypeid());
			stmt.setLong(7, owners.getId());
			stmt.execute();
		} catch (SQLException e) {
			
			e.printStackTrace();
		}finally {
			BaseDao.closeAll(null, stmt, conn);
		}	
	}
	
	
	/**
	 * 删除业主
	 * @param owners
	 */
	public static void delete(Long id){
		
		java.sql.Connection conn=null;
		java.sql.PreparedStatement stmt=null;
		
		try {
			conn=BaseDao.getConnection();
			stmt=conn.prepareStatement("delete from T_OWNERS where id=?");		
			stmt.setLong(1, id);
			stmt.execute();
		} catch (SQLException e) {
			
			e.printStackTrace();
		}finally {
			BaseDao.closeAll(null, stmt, conn);
		}	
	}	
	
}

第八章  数据导出与导入

当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库中全部或部分数据丢失。因此当发生上述故障后,希望能重构这个完整的数据库该处理称为数据库恢复,而要进行数据库的恢复必须要有数据库的备份工作。

1.  数据导出

整库导出命令

exp  system/itcast  full=y

添加参数full=y 就是整库导出

执行命令后会在当前目录下生成一个叫EXPDAT.DMP,此文件为备份文件。

如果想指定备份文件的名称,则添加file参数即可,命令如下

exp  system/itcast  file=文件名  full=y

文件名命名:年月日+序列号+     username/full/table

 

 

2.  数据导入

整库导入命令

imp  system/itcast  full=y

此命令如果不指定file参数,则默认用备份文件EXPDAT.DMP 进行导入

如果指定file参数,则按照file指定的备份文件进行恢复

imp  system/itcast  full=y  file=water.dmp

 

3.  按用户导出与导入

按用户导出

exp  system/itcast  owner=wateruser  file=wateruser.dmp

 

按用户导入

imp  system/itcast  file=wateruser.dmp  fromuser=wateruser

 

 

 

4.  按表导出与导入

注意:数据表是由用户来管理(在导出某个用户下的表之前,需要使用当前用户进行导出)

按表导出

exp  wateruser/itcast  file=a.dmp  tables=t_account,a_area

tables参数指定需要导出的表,如果有多个表用逗号分割即可

 

按表导入

imp  wateruser/itcast  file=a.dmp  tables=t_account,a_area

 

 

 

第九章  总结

1.  知识点总结

 

 

 

2.  上机任务

1. 在服务器中安装ORACLE简化版,在虚拟机中安装ORACLE完整版

2. 在本机安装ORACLE客户端软件PL/SQL Developer ,并配置

3. 尝试使用PL/SQL Developer远程连接班长/组长的数据库(参见“文档资料”)

4. 创建表空间、用户、赋权

5. DDL语句练习 ( 创建表、修改表、删除表语句 )

6. DML 语句练习 (insert 、update 、delete )

7. 编写JDBC连接ORACLE的代码

8. 数据导入导出练习

 

 

 

 

 

第十章  相关问题汇总及解答

1、安装oracle中提示电脑系统上缺少.NET Framework 3.5文件

解决方案1:可以放置在旁边不理会,等ORACLE安装完,关闭所有提示窗口即可。(不会影响ORACLE数据库的使用)

解决方案2:下载.NET Framework 3.5程序安装即可。

 

2、打开PL软件,会出现提示警告: 数据库字符集utf8与客户端字符集(PLSQL Developer工具)的编码不同。


解决方案:选中“不再显示此信息”,点击“确定”或关闭窗口即可。(不影响客户端工具对ORACLE的操作)

 

3、安装了简化版的ORACLE后,如果在环境变量中设置NLS_LANG(数据库字符集)或是注册表中修改了NLS_LANG(不建议在注册表中修改NLS_LANG)。

[ 提示:简化版ORACLE安装完后正常情况下不需要配置数据库的字符集 ]

 

NLS_LANG变量的值为SIMPLIFIED CHINESE_CHINA.AL32UTF8,此时在使用DOS窗口的方式连接并访问数据库时会出现中文乱码。如下图:

解决方案:在环境变量中配置的NLS_LANG,仅仅是对客户端工具中的字符集有效。而DOS窗口中出现的中文乱码是因为DOS窗体默认的字符编码是GBK

查看DOS窗体编码值的方式:


而在DOS控制台窗口属性中,无法直接修改编码表为UTF8

想要修改DOS窗口中的编码值,需要在dos命令行中使用chcp命令: chcp 65001

使用chcp命令改变代码页(编码值)。UTF-8的代码页为65001, GBK是936


把当前DOS窗口最小化或改变窗口大小后,就会正常显示中文了。如下图:

4、在使用PLSQL Developer工具时,登录后无法在可视化工具中显示当前用户下的数据表。如下图:

解决方案:PLSQL Developer工具中,切换“当前用户”为你登录的用户



sql语句的时候不知道什么时候该加引号,什么时候不加,单引号和双引号一样吗

解答:在编写SQL语句时,别名可以使用双引号。其它情况都是使用单引号。

 

 

6、在PLSQL Developer工具中,向数据表中插入一条数据之后,没有提交(即没有在语句的后面写commit也没有点击工具中提交事务按钮),直接关掉PLSQL Developer工具,再重新登录,插入的数据还在,是为什么?

解答:当PLSQL Developer工具关闭时,默认会把之前未提交的事务,自动提交。

 

7、在ORACLE中创建用户时,未指定用户的默认表空间,而在创建数据表时,所有的表都在system表空间下,这是为什么?那么能否在创建用户后再次修改用户的表空间?

解答:ORACLE中创建用户时如果没有指定用户的默认表空间,ORACLE会默认所创建用户的表空间为system表空间(ORACLE的默认表空间),简单来讲,就是创建用户时必须指定一个表空间,如不指定默认为system表空间。

在创建用户后,想要修改用户的表空间,需要使用以下命令:

 

注意:修改了用户的表空间后,用户之前创建的数据表还属于原表空间下存放。如用户在创建新的数据表后,新表就存放在新的表空间下。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值