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/内存/数据量的有限制。
l 完整版本可以免费用于学习、教学等;如果商用则需要收费,但可以享受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表空间。
在创建用户后,想要修改用户的表空间,需要使用以下命令:
注意:修改了用户的表空间后,用户之前创建的数据表还属于原表空间下存放。如用户在创建新的数据表后,新表就存放在新的表空间下。
上一篇: Oracle(一)
下一篇: 亚马逊败走中国的血泪与教训