Oracle学习笔记4.docx
《Oracle学习笔记4.docx》由会员分享,可在线阅读,更多相关《Oracle学习笔记4.docx(15页珍藏版)》请在冰豆网上搜索。
Oracle学习笔记4
接oracle-学习笔记-3
-------------------------------------
9.查看Oracle的datafile地址,查看表空间地址
setlines1000pages1000
columnfile_nameformatA70
columntablespace_nameformatA30
columnstatusfora15
selectstatus,file_name,tablespace_name,bytes/1024/1024"Size(M)",AUTOEXTENSIBLEfromdba_data_files
unionall
selectstatus,file_name,tablespace_name,bytes/1024/1024"Size(M)",AUTOEXTENSIBLEfromdba_temp_files
orderbytablespace_name,file_name;
selecttablespace_name,
file_id,
file_name,
round(bytes/(1024*1024),0)total_space
fromdba_data_files
orderbytablespace_name;
10.改变表空间某个数据文件大小
ALTERDATABASE DATAFILE'/oracle/oradata/yqmora92/ts_yqm.dbf'RESIZE 150M;
alterdatabasedatafile'd:
\oracle\product\10.2.0\oradata\test1\test6k.dbf'autoextendonnext50mmaxsize200m;
查看用户表空间的限额
select*fromuser_ts_quotas;
max_bytes字段就是了
-1是代表没有限制,其它值多少就是多少了.
不对用户做表空间限额控制:
GRANTUNLIMITEDTABLESPACETO***(用户);
这种方式是全局性的.
或者
alteruser***(用户名)quotaunlimitedon***(表空间);
这种方式是针对特定的表空间的.
可以分配自然也可以回收了:
revokeunlimitedtablespacefrom***(用户)
或者
alteruser***quota0on***
11.1主键约束实体完整性
createtablenn(n1varchar2(10)notnull,n2char(10));
insertintonnvalues('abc','def');
altertablennaddconstraintpk_nnprimarykey(n1);
SQL>showuser
USER为"SCOTT"
SQL>createtablenn(n1varchar2(10)notnull,n2char(10));
表已创建。
SQL>insertintonnvalues('abc','def');
已创建1行。
SQL>insertintonnvalues('abc','def');
已创建1行。
SQL>rollback;
回退完成。
SQL>altertablennaddconstraintpk_nnprimarykey(n1);
表已更改。
SQL>insertintonnvalues('abc','def');
已创建1行。
SQL>insertintonnvalues('abc','def');
insertintonnvalues('abc','def')
*
第1行出现错误:
ORA-00001:
违反唯一约束条件(SCOTT.PK_NN)
11.2外键约束 参照完整性
SQL>createtablemm(m1char(10),m2varchar2(10),n1varchar2(10));
表已创建。
SQL>altertablemmaddconstraintfk_mnforeignkey(n1)referencesnn(n1);
表已更改。
SQL>insertintommvalues('aav','dd','ds');
insertintommvalues('aav','dd','ds')
*
第1行出现错误:
ORA-02291:
违反完整约束条件(SCOTT.FK_MN)-未找到父项关键字
SQL>insertintommvalues('aav','dd','abc');
已创建1行。
SQL>commit;
提交完成。
11.3check约束
SQL>select*frome;
EIDENAME SEX DID
----------------------------------
10aaa 男 25
15aa b 25
1赵1 男 1
2钱1 女 2
3孙1 女 3
3李1 男 4
3周1 女 5
4周2 女
已选择8行。
SQL>updateesetsex='男'whereeid=15;
已更新1行。
SQL>commit;
提交完成。
SQL>altertableeaddconstraintck_e_sexcheck(sex='男'orsex='女');
表已更改。
SQL>updateesetsex='aa'whereeid=15;
updateesetsex='aa'whereeid=15
*
第1行出现错误:
ORA-02290:
违反检查约束条件(SCOTT.CK_E_SEX)
SQL>select*frome;
EIDENAME SEX DID
----------------------------------
10aaa 男 25
15aa 男 25
1赵1 男 1
2钱1 女 2
3孙1 女 3
3李1 男 4
3周1 女 5
4周2 女
已选择8行。
11.4查看约束
SQL>selectconstraint_name,constraint_typefromuser_constraintswheretable_name='MM';
CONSTRAINT_NAME C
-------------------------------
FK_MN R
SQL>selectconstraint_name,constraint_typefromuser_constraintswheretable_name='E';
CONSTRAINT_NAME C
-------------------------------
CK_E_SEX C
SQL>selectconstraint_name,constraint_typefromuser_constraintswheretable_name='NN';
CONSTRAINT_NAME C
-------------------------------
SYS_C005167 C
PK_NN P
12.表索引
表没建索引之前是按堆存放数据的。
在表的经常查询的列上建立索引
SQL>createindexmy_mm_idxonmm(m1);
索引已创建。
SQL>select*frommmwherem1='aav';
M1 M2 N1
------------------------------
aav dd abc
12.1位图索引
为了解决表里面数据很多,但是唯一值很少的情况,例如:
有一万条记录,sex列只有两个不同的值:
男和女
SQL>createbitmapindexbit_eone(sex);
索引已创建。
Oracle中NVARCHAR2与VARCHAR2的区别
VARCHAR2是Oracle提供的特定数据类型,Oracle可以保证VARCHAR2在任何版本中该数据类型都可以向上和向下兼容。
VARCHAR在Oracle中不建议使用。
具体到NVARCHAR2和VARCHAR2的区别,从使用角度来看区别在于:
NVARCHAR2在计算长度时和字符集相关的,例如数据库是中文字符集时以长度10为例,则
1、NVARCHAR2(10)是可以存进去10个汉字的,如果用来存英文也只能存10个字符。
2、而VARCHAR2(10)的话,则只能存进5个汉字,英文则可以存10个。
13.SQLLoader
先创建两个文件:
loader.txt内容:
abc,xyz
avf,ddd
des,ggf
cont.ctl内容:
loaddata
infile'E:
\WorkPlace\OracleWork\loader.txt'
append
intotablescott.mm(
m1position(1:
3)char,
m2position(5:
7)char)
打开一个cmd窗口,执行:
E:
\>sqlldrscott/tigercontrol=E:
\WorkPlace\OracleWork\cont.ctldata=E:
\WorkPlace\OracleWork\loader.txt
SQL*Loader:
Release10.2.0.1.0-Productionon星期二12月1417:
32:
392010
Copyright(c)1982,2005,Oracle. Allrightsreserved.
达到提交点-逻辑记录计数2
达到提交点-逻辑记录计数3
进入sql/plus
查看:
SQL>select*frommm;
M1 M2 N1
------------------------------
aav dd abc
ddd ss abc
abc xyz
avf ddd
des ggf
已经添加了3条记录。
以上是处理规则数据,下面处理不规则数据:
loader.txt内容:
abcddd,xyz
avff,dfddd
d,ggfd
cont.ctl内容:
loaddata
infile'E:
\WorkPlace\OracleWork\loader1.txt'
append
intotablescott.mm(
m1terminatedby',',
m2terminatedby',')
打开一个cmd窗口,执行:
E:
\>sqlldrscott/tigercontrol=E:
\WorkPlace\OracleWork\cont1.ctldata=E:
\WorkPlace\OracleWork\loader1.txt
SQL*Loader:
Release10.2.0.1.0-Productionon星期二12月1418:
11:
402010
Copyright(c)1982,2005,Oracle. Allrightsreserved.
达到提交点-逻辑记录计数2
达到提交点-逻辑记录计数3
进入sql/plus
查看:
SQL>select*frommm;
M1 M2 N1
------------------------------
aav dd abc
ddd ss abc
abc xyz
avf ddd
des ggf
abcddd xyz
avff dfddd
d ggfd
已选择8行。
14.OEM配置使用
15.数据库的备份与恢复
逻辑备份,逻辑恢复
物理备份,物理恢复
导出
F:
\>expscott/tiger@ora
Export:
Release10.2.0.1.0-Productionon星期二12月1420:
47:
222010
Copyright(c)1982,2005,Oracle. Allrightsreserved.
连接到:
OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production
WiththePartitioning,OLAPandDataMiningoptions
输入数组提取缓冲区大小:
4096>5000
导出文件:
EXPDAT.DMP>c:
\mybak.dmp
(2)U(用户),或(3)T(表):
(2)U>t
导出表数据(yes/no):
yes>yes
压缩区(yes/no):
yes>yes
已导出ZHS16GBK字符集和AL16UTF16NCHAR字符集
即将导出指定的表通过常规路径...
要导出的表(T)或分区(T:
P):
(按RETURN退出)>e
..正在导出表 E导出了 8行
要导出的表(T)或分区(T:
P):
(按RETURN退出)>
导出成功终止,但出现警告。
F:
\>expscott/tiger@ora
Export:
Release10.2.0.1.0-Productionon星期二12月1420:
48:
482010
Copyright(c)1982,2005,Oracle. Allrightsreserved.
连接到:
OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production
WiththePartitioning,OLAPandDataMiningoptions
输入数组提取缓冲区大小:
4096>5000
导出文件:
EXPDAT.DMP>c:
\scott.dmp
(2)U(用户),或(3)T(表):
(2)U>u
导出权限(yes/no):
yes>yes
导出表数据(yes/no):
yes>yes
压缩区(yes/no):
yes>yes
已导出ZHS16GBK字符集和AL16UTF16NCHAR字符集
.正在导出pre-schema过程对象和操作
.正在导出用户SCOTT的外部函数库名
.导出PUBLIC类型同义词
.正在导出专用类型同义词
.正在导出用户SCOTT的对象类型定义
即将导出SCOTT的对象...
.正在导出数据库链接
.正在导出序号
.正在导出簇定义
.即将导出SCOTT的表通过常规路径...
..正在导出表 AA导出了 10行
..正在导出表 ABC导出了 1行
..正在导出表 AUTO导出了 7行
..正在导出表 BONUS导出了 0行
..正在导出表 BOOKS导出了 8行
..正在导出表 D导出了 11行
..正在导出表 DEPT导出了 4行
..正在导出表 E导出了 8行
..正在导出表 EE导出了 6行
..正在导出表 EMP导出了 14行
..正在导出表 MM导出了 8行
..正在导出表 MYLOG导出了 3行
..正在导出表 NN导出了 2行
..正在导出表 SALGRADE导出了 5行
..正在导出表 T导出了 2行
..正在导出表 TT导出了 13行
.正在导出同义词
.正在导出视图
.正在导出存储过程
.正在导出运算符
.正在导出引用完整性约束条件
.正在导出触发器
.正在导出索引类型
.正在导出位图,功能性索引和可扩展索引
.正在导出后期表活动
.正在导出实体化视图
.正在导出快照日志
.正在导出作业队列
.正在导出刷新组和子组
.正在导出维
.正在导出post-schema过程对象和操作
.正在导出统计信息
成功终止导出,没有出现警告。
导入:
SQL>select*frome;
EIDENAME SE DID
--------------------------------
10aaa 男 25
15aa 女 25
1赵1 女 1
2钱1 女 2
3孙1 男 3
3李1 男 4
3周1 男 5
4周2 男
已选择8行。
SQL>deletefrome;
已删除8行。
SQL>commit;
提交完成。
SQL>select*frome;
未选定行
打开一个cmd窗口,
E:
\>impscott/tiger
Import:
Release10.2.0.1.0-Productionon星期三12月1518:
53:
442010
Copyright(c)1982,2005,Oracle. Allrightsreserved.
连接到:
OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Production
WiththePartitioning,OLAPandDataMiningoptions
导入文件:
EXPDAT.DMP>mybak.dmp
输入插入缓冲区大小(最小为8192)30720>
经由常规路径由EXPORT:
V10.02.01创建的导出文件
已经完成ZHS16GBK字符集和AL16UTF16NCHAR字符集中的导入
只列出导入文件的内容(yes/no):
no>
由于对象已存在,忽略创建错误(yes/no):
no>yes
导入权限(yes/no):
yes>
导入表数据(yes/no):
yes>
导入整个导出文件(yes/no):
no>yes
.正在将SCOTT的对象导入到SCOTT
.正在将SCOTT的对象导入到SCOTT
..正在导入表 "E"导入了 8行
IMP-00017:
由于ORACLE错误2264,以下语句失败:
"ALTERTABLE"E"ADDCONSTRAINT"CK_E_SEX"CHECK(sex='男'orsex='女')"
"ENABLENOVALIDATE"
IMP-00003:
遇到ORACLE错误2264
ORA-02264:
名称已被一现有约束条件占用
即将启