一、Oracle初识
1、oracle监听配置 ----> 作用:类似于Mysql的连接
a、"开始" --> "所有程序" --> "Oracle..." --> "配置和移植工具" --> "Net manager"
b、Oracle Net配置" --> "本地" --> "服务命名" --> "+"
选项卡表单:网络服务名: 连接时显示的数据库名 ---> 类似于别名
通常是tcp/Ip协议
主机名和端口 ---> 主机名为Ip地址,端口默认1521
服务名 ---> 要连接的数据库(一个oracle可以配置多个实例,拥有多个数据库)
c、Oracle Net配置" --> "本地" --> "监听程序" --> "+" --> "添加地址" -->
填写地址表单(主机和端口) ---> 等价于Mysql连接表单 中的 主机和阜
端口 ---> mysql:3306
---> oracle:1521
---> sqlserver:1433
d、工具栏 ---> "文件" ---> "保存网络设置"
注:一个orcale实例分一个oracleserviceorcl 和 一个监听 oracleoradb10g_home......listener;
所以配置时,需要先配置一个oracle服务和一个监听 第二步配置服务 第三部配置监听
2、Oracle数据库结构
a、所有的数据库都有实例 ---> Sqlserver 我们使用的是默认实例
Mysql 使用的也是默认实例(就是mysql安装完后 后面那些配置:比如日本语,classpath,账户密码)
数据库的实例 我当前的理解是一个工作空间配置信息的集合。
就像Myeclipse的配置一样,每个工作空间有自己的配置, 并且可拥有多个工作空间(我们平常使用的默认工作空间); 数据库也是一样可以拥有多个实例.
b、Oracle 每个实例只有一个数据库 默认数据库为orcl
c、表空间 ---> Oracle独立提出概念,即多个表的集合 ====> 其他数据库的 数据库概念
d、Object ---> 跟其他数据库一样,就是表空间组成的对象,比如:表,视图,索引,存储工程,函数.......
注:oracle认为以数据库为单位,浪费资源.所以将数据库分成多个表空间,在按角色-权限分配给用户使用
3、Oracle角色-权限-用户 ----> 三者关系参考bug系统,一样
a、角色:一些权限的集合 ---> 职位
b、权限:功能的映射(可以是多个功能映射一个权限) ---> 职位权力
权限分等级:角色权限
系统权限
对象权限
c、用户:具体使用的账户(映射操作人) ---> 工作人员
d、系统自带角色
sysdba 系统管理员身份 ---> 几乎所有的权限 ---> 董事长
sysoper 系统操作员身份 ---> 比肩于系统管理员 ---> 总裁(总经理,除了不能利用公司的资金给自己开公司外...)
不能创建删除数据库
不能更改字符集 (类似总裁不能更改公司的经营范围)
比如京东总裁不能说我京东不做电商了, 做房地产吧. 这事就不是他决定了
normal 普通操作员身份 ---> 自定义权限 ---> 职工(不同职员拥有不同的权限)
----------------------------------------- 上面为登陆角色,下面为授权角色 -----------------------------------------------------------
connect ---> 是授予最终用户的典型权利,最基本的角色
ALTER SESSION --修改会话
CREATE CLUSTER --建立聚簇
CREATE DATABASE LINK --建立数据库链接
CREATE SEQUENCE --建立序列
CREATE SESSION --建立会话
CREATE SYNONYM --建立同义词
CREATE VIEW --建立视图
RESOURCE ---> 是授予开发人员的
CREATE CLUSTER --建立聚簇
CREATE PROCEDURE --建立过程
CREATE SEQUENCE --建立序列
CREATE TABLE --建表
CREATE TRIGGER --建立触发器
CREATE TYPE --建立类型
dba ---> 表空间的拥有者,表空间所有权限
e、系统自带用户
sys ---> oracle最高权限用户,有sysdba,sysoper角色 ---> 公司所有者(简称老板,boss)
登陆时也只能以sysdba,sysoper登陆,
不能使用normal角色登陆 (就像老板不可能以职工的身份出现)
system ---> 有sysdba,sysoper角色 ---> ***总裁
正常是sysoper角色,也能以sysdba登陆 总裁替代老板发布施令
scott ---> 是个演示用户,学习ORACLE用
4、Oracle使用技巧
a、创建用户:create user 用户名 identified by 密码
b、分配权限:
grant connect,resource,dba to 用户; --->
grant insert,delete,update on 用户.对象 to 角色; ---> 将某用户的某个对象的增删改权限分配给某个角色
c、创建临时表空间
create temporary tablespace 表空间名 tempfile '存放地址.dbf' size 初始大小 autoextend on next 递增大小 maxsize 上限大小 extent management local;
存放地址: 绝对路径,以.dbf为后缀
创建表空间
create tablespace 表空间名 logging datafile '存放地址.dbf' size 初始大小 autoextend on next 递增大小 maxsize 上限大小 extent management local;
删除表空间
drop tablespace 表空间名 including contents and datafiles cascade constraints;
注:删除表空间之前要确认该表空间没有被其他用户使用之后再做删除
注:创建用户前必须要先建好临时表空间和数据表空间两个表空间,否则用系统默认的表空间不好。
临时表空间,暂时可理解成缓存
d、创建用户并指定表空间
create user 用户名 identified by 密码 default tablespace 表空间 temporary tablespace 临时表空间;
e、删除用户以及用户所有的对象
drop user zfmi cascade;
5、导入导出命令 ---> oracle数据还原与备份
a、exp命令可以把数据从远程数据库服务器导出到本地的dmp文件
b、imp命令可以把dmp文件从本地导入到远处的数据库服务器中
c、利用这个功能可以构建两个相同的数据库,一个用来测试,一个用来正式使用。
d、数据导出:
将数据库TEST完全导出,用户名system 密码manager 导出到D:daochu.dmp中
exp system/manager@TEST file=d:daochu.dmp full=y
将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:daochu.dmp owner=(system,sys)
将数据库中的表inner_notify、notify_staff_relat导出
exp aichannel/aichannel@TESTDB2 file= d:datanewsmgnt.dmp tables=(inner_notify,notify_staff_relat)
将数据库中的表table1中的字段filed1以"00"打头的数据导出
exp system/manager@TEST file=d:daochu.dmp tables=(table1) query=" where filed1 like '00%'"
e、数据的导入
将D:daochu.dmp 中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:daochu.dmp
imp aichannel/aichannel@HUST full=y file=d:datanewsmgnt.dmp ignore=y
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。在后面加上 ignore=y 就可以了。
将d:daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:daochu.dmp tables=(table1)
f、注意
不少情况要先是将表彻底删除,然后导入。
操作者要有足够的权限,权限不够它会提示。
g、授予用户导入导出权限
grant create user,drop user,alter user ,create any view,drop any view,
EXP_FULL_DATABASE,IMP_FULL_DATABASE,
dba,connect,resource,create session to 用户名字
二、ORACLE的数据类型
1、常用数据类型
字段类型 中文说明 限制条件 其它说明
------------------------------------------- 字符串数据类型 -------------------------------------------------------------
CHAR 固定长度字符串 最大长度2000 bytes 缺省为1个字节(汉子2字节)
VARCHAR2 可变长度的字符串 最大长度4000 bytes 索引的最大长度3209
NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes
NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes
------------------------------------------- 时间数据类型 ---------------------------------------------------------------
DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS) 经过严格测试,无千虫问题
(9I后数据)
TIMESTAMP 时间戳
INTERVAL YEAR TO MONTH 用于存储一个时间段,由月份和年组成。需要 5B 来存储
INTERVAL DAY TO SECOND 用于存储一个时间段,由日和秒组成。需要 11B 来存储
------------------------------------------- 数字数据类型 ---------------------------------------------------------------
NUMBER(P,S) 数字类型 P为整数位,S为小数位
DECIMAL(P,S) 数字类型 P为整数位,S为小数位
INTEGER 整数类型 小的整数
FLOAT 浮点数类型 NUMBER(38),双精度
REAL 实数类型 NUMBER(63),精度更高
------------------------------------- 大型对象(LOB),用来保存较大的图形文件或带格式的文本文件 ---------------------------
BLOB 二进制数据 最大长度4G (大数据类型)
CLOB 字符数据 最大长度4G (大数据类型)
NCLOB 根据字符集而定的字符数据 最大长度4G (大数据类型)
------------------------------------------------ LOB数据类型 ------------------------------------------------------------
ROWID 数据表中记录的唯一行号 10 bytes ********.****.****格式,*为0或1
NROWID 二进制数据表中记录的唯一行号 最大长度4000 bytes
------------------------------------------------ 外部数据 ---------------------------------------------------------------
BFILE 存放在数据库外的二进制数据 最大长度4G
------------------------------------------- 老数据类型,将被大型对象替换 -------------------------------------------------
LONG 超长字符串,可变长字符列 最大长度2G(231-1) 足够存储大部头著作(老数据类型)
RAW 固定长度的二进制数据 最大长度2000 bytes 可存放多媒体图象声音等(老数据类型)
LONG RAW 可变长度的二进制数据 最大长度2G 同上(老数据类型)
1、oracle监听配置 ----> 作用:类似于Mysql的连接
a、"开始" --> "所有程序" --> "Oracle..." --> "配置和移植工具" --> "Net manager"
b、Oracle Net配置" --> "本地" --> "服务命名" --> "+"
选项卡表单:网络服务名: 连接时显示的数据库名 ---> 类似于别名
通常是tcp/Ip协议
主机名和端口 ---> 主机名为Ip地址,端口默认1521
服务名 ---> 要连接的数据库(一个oracle可以配置多个实例,拥有多个数据库)
c、Oracle Net配置" --> "本地" --> "监听程序" --> "+" --> "添加地址" -->
填写地址表单(主机和端口) ---> 等价于Mysql连接表单 中的 主机和阜
端口 ---> mysql:3306
---> oracle:1521
---> sqlserver:1433
d、工具栏 ---> "文件" ---> "保存网络设置"
注:一个orcale实例分一个oracleserviceorcl 和 一个监听 oracleoradb10g_home......listener;
所以配置时,需要先配置一个oracle服务和一个监听 第二步配置服务 第三部配置监听
2、Oracle数据库结构
a、所有的数据库都有实例 ---> Sqlserver 我们使用的是默认实例
Mysql 使用的也是默认实例(就是mysql安装完后 后面那些配置:比如日本语,classpath,账户密码)
数据库的实例 我当前的理解是一个工作空间配置信息的集合。
就像Myeclipse的配置一样,每个工作空间有自己的配置, 并且可拥有多个工作空间(我们平常使用的默认工作空间); 数据库也是一样可以拥有多个实例.
b、Oracle 每个实例只有一个数据库 默认数据库为orcl
c、表空间 ---> Oracle独立提出概念,即多个表的集合 ====> 其他数据库的 数据库概念
d、Object ---> 跟其他数据库一样,就是表空间组成的对象,比如:表,视图,索引,存储工程,函数.......
注:oracle认为以数据库为单位,浪费资源.所以将数据库分成多个表空间,在按角色-权限分配给用户使用
3、Oracle角色-权限-用户 ----> 三者关系参考bug系统,一样
a、角色:一些权限的集合 ---> 职位
b、权限:功能的映射(可以是多个功能映射一个权限) ---> 职位权力
权限分等级:角色权限
系统权限
对象权限
c、用户:具体使用的账户(映射操作人) ---> 工作人员
d、系统自带角色
sysdba 系统管理员身份 ---> 几乎所有的权限 ---> 董事长
sysoper 系统操作员身份 ---> 比肩于系统管理员 ---> 总裁(总经理,除了不能利用公司的资金给自己开公司外...)
不能创建删除数据库
不能更改字符集 (类似总裁不能更改公司的经营范围)
比如京东总裁不能说我京东不做电商了, 做房地产吧. 这事就不是他决定了
normal 普通操作员身份 ---> 自定义权限 ---> 职工(不同职员拥有不同的权限)
----------------------------------------- 上面为登陆角色,下面为授权角色 -----------------------------------------------------------
connect ---> 是授予最终用户的典型权利,最基本的角色
ALTER SESSION --修改会话
CREATE CLUSTER --建立聚簇
CREATE DATABASE LINK --建立数据库链接
CREATE SEQUENCE --建立序列
CREATE SESSION --建立会话
CREATE SYNONYM --建立同义词
CREATE VIEW --建立视图
RESOURCE ---> 是授予开发人员的
CREATE CLUSTER --建立聚簇
CREATE PROCEDURE --建立过程
CREATE SEQUENCE --建立序列
CREATE TABLE --建表
CREATE TRIGGER --建立触发器
CREATE TYPE --建立类型
dba ---> 表空间的拥有者,表空间所有权限
e、系统自带用户
sys ---> oracle最高权限用户,有sysdba,sysoper角色 ---> 公司所有者(简称老板,boss)
登陆时也只能以sysdba,sysoper登陆,
不能使用normal角色登陆 (就像老板不可能以职工的身份出现)
system ---> 有sysdba,sysoper角色 ---> ***总裁
正常是sysoper角色,也能以sysdba登陆 总裁替代老板发布施令
scott ---> 是个演示用户,学习ORACLE用
4、Oracle使用技巧
a、创建用户:create user 用户名 identified by 密码
b、分配权限:
grant connect,resource,dba to 用户; --->
grant insert,delete,update on 用户.对象 to 角色; ---> 将某用户的某个对象的增删改权限分配给某个角色
c、创建临时表空间
create temporary tablespace 表空间名 tempfile '存放地址.dbf' size 初始大小 autoextend on next 递增大小 maxsize 上限大小 extent management local;
存放地址: 绝对路径,以.dbf为后缀
创建表空间
create tablespace 表空间名 logging datafile '存放地址.dbf' size 初始大小 autoextend on next 递增大小 maxsize 上限大小 extent management local;
删除表空间
drop tablespace 表空间名 including contents and datafiles cascade constraints;
注:删除表空间之前要确认该表空间没有被其他用户使用之后再做删除
注:创建用户前必须要先建好临时表空间和数据表空间两个表空间,否则用系统默认的表空间不好。
临时表空间,暂时可理解成缓存
d、创建用户并指定表空间
create user 用户名 identified by 密码 default tablespace 表空间 temporary tablespace 临时表空间;
e、删除用户以及用户所有的对象
drop user zfmi cascade;
5、导入导出命令 ---> oracle数据还原与备份
a、exp命令可以把数据从远程数据库服务器导出到本地的dmp文件
b、imp命令可以把dmp文件从本地导入到远处的数据库服务器中
c、利用这个功能可以构建两个相同的数据库,一个用来测试,一个用来正式使用。
d、数据导出:
将数据库TEST完全导出,用户名system 密码manager 导出到D:daochu.dmp中
exp system/manager@TEST file=d:daochu.dmp full=y
将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:daochu.dmp owner=(system,sys)
将数据库中的表inner_notify、notify_staff_relat导出
exp aichannel/aichannel@TESTDB2 file= d:datanewsmgnt.dmp tables=(inner_notify,notify_staff_relat)
将数据库中的表table1中的字段filed1以"00"打头的数据导出
exp system/manager@TEST file=d:daochu.dmp tables=(table1) query=" where filed1 like '00%'"
e、数据的导入
将D:daochu.dmp 中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:daochu.dmp
imp aichannel/aichannel@HUST full=y file=d:datanewsmgnt.dmp ignore=y
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。在后面加上 ignore=y 就可以了。
将d:daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:daochu.dmp tables=(table1)
f、注意
不少情况要先是将表彻底删除,然后导入。
操作者要有足够的权限,权限不够它会提示。
g、授予用户导入导出权限
grant create user,drop user,alter user ,create any view,drop any view,
EXP_FULL_DATABASE,IMP_FULL_DATABASE,
dba,connect,resource,create session to 用户名字
二、ORACLE的数据类型
1、常用数据类型
字段类型 中文说明 限制条件 其它说明
------------------------------------------- 字符串数据类型 -------------------------------------------------------------
CHAR 固定长度字符串 最大长度2000 bytes 缺省为1个字节(汉子2字节)
VARCHAR2 可变长度的字符串 最大长度4000 bytes 索引的最大长度3209
NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes
NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes
------------------------------------------- 时间数据类型 ---------------------------------------------------------------
DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS) 经过严格测试,无千虫问题
(9I后数据)
TIMESTAMP 时间戳
INTERVAL YEAR TO MONTH 用于存储一个时间段,由月份和年组成。需要 5B 来存储
INTERVAL DAY TO SECOND 用于存储一个时间段,由日和秒组成。需要 11B 来存储
------------------------------------------- 数字数据类型 ---------------------------------------------------------------
NUMBER(P,S) 数字类型 P为整数位,S为小数位
DECIMAL(P,S) 数字类型 P为整数位,S为小数位
INTEGER 整数类型 小的整数
FLOAT 浮点数类型 NUMBER(38),双精度
REAL 实数类型 NUMBER(63),精度更高
------------------------------------- 大型对象(LOB),用来保存较大的图形文件或带格式的文本文件 ---------------------------
BLOB 二进制数据 最大长度4G (大数据类型)
CLOB 字符数据 最大长度4G (大数据类型)
NCLOB 根据字符集而定的字符数据 最大长度4G (大数据类型)
------------------------------------------------ LOB数据类型 ------------------------------------------------------------
ROWID 数据表中记录的唯一行号 10 bytes ********.****.****格式,*为0或1
NROWID 二进制数据表中记录的唯一行号 最大长度4000 bytes
------------------------------------------------ 外部数据 ---------------------------------------------------------------
BFILE 存放在数据库外的二进制数据 最大长度4G
------------------------------------------- 老数据类型,将被大型对象替换 -------------------------------------------------
LONG 超长字符串,可变长字符列 最大长度2G(231-1) 足够存储大部头著作(老数据类型)
RAW 固定长度的二进制数据 最大长度2000 bytes 可存放多媒体图象声音等(老数据类型)
LONG RAW 可变长度的二进制数据 最大长度2G 同上(老数据类型)