Oracle笔记一.docx
- 文档编号:3427383
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:43
- 大小:125.55KB
Oracle笔记一.docx
《Oracle笔记一.docx》由会员分享,可在线阅读,更多相关《Oracle笔记一.docx(43页珍藏版)》请在冰豆网上搜索。
Oracle笔记一
Oracle笔记
(一)
●表空间
用于在硬盘上指定的一个区域去存表数据的一个文件。
创建语法:
CreatetableSpacetablespaceName
dataFile‘文件路径’
Size10Mautoextendon;(自动增长)
创建的用户必须有创建的权限。
当你需要将表空间划分为几个文件时候,就需要:
附加题
1.创建一个表空间tabspace01,并指定添加二个数据文件,一个大小为10m,一个大小为20m,并允许数据文件自动扩展
2.在tablespace01上面修改表空间上第一个数据文件的大小为20m
附加题参考答案
1、
createtablespacett
datafile'c:
\1.dbf'size10m,
'c:
\2.dbf'size30m
autoextendon;
2、
alterdatabasedatafile'c:
\1.dbf'resize30m;
●表分区
将一个有大型数据的表分割成几个部件。
这些表区分不会影响查询,这是oracle的性能优化中的一部分。
好处是利于管理数据,可以根据部件进行单独的日志和备份。
一般使用分区的情况:
表大于2G,
表中包含历史数据,要把新数据和历史数据分开。
常用的几种有:
⏹范围分区
对一个表的列某一列进行范围分区。
范围分区的原则是将这一列进行默认索引去排序,
然后将数据的值根据分区顺序挨个分类的。
语法:
CREATETABLE"DEMO01"
("ACCC"NUMBER(5,2),
"ACCC2"VARCHAR2(200),
"ACCC3"NUMBER(3,0)
)
PARTITIONBYRANGE("ACCC3")
(
PARTITION"P1"VALUESLESSTHAN(100),
PARTITION"P2"VALUESLESSTHAN(200),
PARTITION"P3"VALUESLESSTHAN(MAXVALUE)
);
代码解释:
创建DEMO01表。
对”accc3”进行范围分区.
P1区域存储100以下的。
P2区域存储不包括P1的200以下的。
之外的在P3区域中。
注意:
在分区时候是按照顺序从上到下的分区的,P2的分区值不能低于P1。
⏹间隔分区
--间隔分区,
--是按照一个时间或者某个数据段进行分区,。
--以下代码:
根据月份进行每月分区。
--语法:
createtabledemo02
(
dr1number(4),
dr2date
)partitionbyrange(d2)
--间隔分区。
interval(numtoyminterval(1,"MONTH"))
(
partitionp1valueslessthan(to_date('2013-04-1','yyyy/mm/dd'))
)
其中:
Numtoyminterval是用来表示区分段的。
(1,’year’)表示一年。
⏹散列分区:
一种均匀分区的手段。
createtabledemo02
(
dr1number(4),
dr2date
)partitionbyhash(d2)
--间隔分区。
(
partitionp1
)
⏹复合分区
⏹列表分区
●分区常用操作
分区查询:
Select*fromdemo01PARTITION(p1);好--显示第一区域的数据,。
⏹1、增加一个分区
添加分区时,会根据表结构中的分区模式去添加,所以无需填写列名。
只需填写条件。
ALTERTABLEsales
ADDPARTITIONjan96VALUESLESSTHAN('01-FEB-1999')
TABLESPACEtsx;
增加一个列表分区
ALTERTABLEq1_sales_by_region
ADDPARTITIONq1_nonmainlandVALUES('HI','PR')
STORAGE(INITIAL20KNEXT20K)TABLESPACEtbs_3
NOLOGGING;
⏹2、合并分区
altertabledeptcoalescepartition
⏹3、删除分区
ALTERTABLEsalesDROPPARTITIONdec98;
ALTERINDEXsales_area_ixREBUILD(如果含有全局索引);
⏹4、合并分区
ALTERTABLEfour_seasons
MERGEPARTITIONSquarter_one,quarter_twoINTOPARTITIONquarter_two;
ALTERTABLEfour_seasonsMODIFYPARTITION
quarter_twoREBUILDUNUSABLELOCALINDEXES;
⏹5、移动一个分区
ALTERTABLEpartsMOVEPARTITIONdepot2
TABLESPACEts094NOLOGGING;
⏹6、重建一个local索引
ALTERINDEXI_FOUR_SEASONS_LREBUILDPARTITIONI_QUARTER_FOUR
⏹7、重命名一个分区
ALTERTABLEscubagearRENAMEPARTITIONsys_p636TOtanks
⏹8、一个分区拆分为两个分区
ALTERTABLERANGE_EXAMPLESPLITPARTITION
PART_1at
(TO_DATE('1994-05-0100:
00:
00','SYYYY-MM-DDHH24:
MI:
SS'))
INTO(PARTITIONPART_1tablespacest1,
PARTITIONPART_3tablespaceusers)
⏹9、truncate一个分区
ALTERTABLEsalesTRUNCATEPARTITIONdec98;
ALTERINDEXsales_area_ixREBUILD;
⏹10、如果存在约束的情况,先disable约束
ALTERTABLEsales
DISABLECONSTRAINTdname_sales1;
ALTERTABLEsalesTRUNCATEPARTITTIONdec94;
ALTERTABLEsales
ENABLECONSTRAINTdname_sales1;
为了方便大家学习,上课内容整理成txt文件。
授课内容:
sql支持语言
默认的三个用户
创建用户
授予、撤销权限
系统权限和对象权限
权限传递
角色
通过角色对权限进行管理
●sql支持语言
数据定义语言(DDL)
create创建
drop移除
alter更改
数据操纵语言(DML)
select查询
update修改
delete删除
insert新增
事务控制语言(TCL)
savepoint保存事务回滚点
rollback回滚
commit提交
数据控制语言(DCL)
grant授予
revoke撤销
oracle数据安装的时候系统默认用户
sys数据库拥有者用户
system数据库管理员
scott数据库模拟实例用户
⏹主要区别
sys是Oracle数据库中权限最高的帐号,具有createdatabase的权限,而system没有这个权限,
sys的角色是sysdba,system的角色是sysoper。
基础:
连接数据库服务器的方式
1、自带工具(dos命令或图形界面)
使用dos命令行登录oracle
sqlplus用户名/密码启动sqlplus并且连数据库
sqlplus用户名/密码@实例名sqlplusscott/tiger@MyOracle
disconn断开连接
connect或conn用户名/密码连接
2、第三方工具(PLSQLDeveloper)
●数据库锁
用于控制数据库访问的机制,防止并发访问。
用于保护正在被修改的数据。
其他用户直到提交之后才可以修改数据。
一致性,一次只能有一个用户修改数据。
完整性,如果一个用户对数据进行了修改。
那么修改后的数据将反映给所有用户。
并行性,允许多个用户访问同一个数据。
例子:
当张三更新了T1的R1时候未提交,李四删除T1的R1则会等到张三更新完成后李四才能删除。
⏹锁的类型:
行级锁:
是排他锁,防止其他事物修改,
在下列语句中自动应用行级锁:
Insert
update
delete
select*fromforupdate//锁定更新语句。
表级锁。
当一个对话在更新这个表所有的语句时候,其他对话将无法对其进行操作。
行级锁。
当一个对话在更新这个表某行数据的时候,其他对话将无法对其进行操作。
锁等候:
Select*fromempforupdatewait10.等候10秒,如果资源被调用则提示。
●程序包
五、程序包
1、程序包:
包是一组相关过程、函数、变量、游标、常量等PL/SQL程序设计元素的组合。
它具有面向对象程序设计语言的特点,是对这些PL/SQL程序设计元素的封装。
包类似于C++或Java程序中的类,而变量相当于类中的成员变量,过程和函数相当于方法,把相关的模块归类成为包,可使开发人员利用面向对象的方法进行存储过程的开发,从而提高系统性能。
与类相同,包中的程序元素也分为公用元素和私有元素两种,这两种元素的区别是他们允许访问的程序范围不同,即他们的作用域不同。
公用元素不仅可以被包中的函数、过程调用,也可以被包外的PL/SQl块调用。
而私有元素只能被该包内部的函数或过程调用。
2、使用程序包的优点:
在PL/SQL设计中,使用包不仅可以使程序模块化,对外隐藏包内所使用的信息,而写程序包可以提高程序的运行效率。
因为,当程序首次调用程序包内部的函数或过程时,Oracle将整个程序包调入内存,当再次调用程序包中的元素时,Oracle直接从内存中读取,而不需要进行磁盘的IO操作,从而使程序的执行效率提高。
3、一个程序包分为两部分组成:
(1)、包定义:
包定义部分声明包内数据类型、变量、常量、游标、子程序和函数等元素,这些元素为包的共有元素。
(2)、包主体:
包主题则定义了包定义部分的具体实现,在包主体中还可以声明和实现私有元素。
Sql代码
1.--包定义
2.create or replace package t_package
3.is
4. --定义过程
5. procedure append_proc(t varchar2,a out varchar2);
6. --过程的重载
7. procedure append_proc(t number,a out varchar2);
8. --定义函数
9. function append_fun(t varchar2) return varchar2;
10.
11.end;
Sql代码
1.--包主题
2.create or replace package body t_package
3.is
4. v_t varchar2(30);
5. --私有成员函数
6. function private_fun(t varchar2) return varchar2 is
7. begin
8. v_t :
= t||'hello';
9. return v_t;
10. end;
11. --实现过程
12. procedure append_proc(t varchar2,a out varchar2) is
13. begin
14. a :
= t||'hello';
15. end;
16. --过程的重载
17. procedure append_proc(t number,a out varchar2) is
18. begin
19. a :
= t||'hello';
20. end;
21. --实现函数
22. function append_fun(t varchar2)
23. return varchar2 is
24. begin
25. v_t :
= t||'hello';
26. return v_t;
27. end;
28.end;
允许示例:
DECLARE
V_1VARCHAR2(200);
BEGIN
V_1:
='asd';
P_DEMO01.D1(
V_1=>V_1
);
END;
直接在PL/SQL语句中调用。
使用数据库步骤
a、创建用户指定表空间b、授予权限(以dba用户)
●创建新用户指定权限
1.必须使用dba用户登录
2.必须使用关键字给用户指定密码:
identifiedby密码
3.createuser用户名identifiedby密码;
●创建用户,指定表空间
createuserzs
identifiedbyzs--密码,下面的可省略
defaulttablespaceusers--默认表空间的用户
temporarytablespacetemp--临时表空间,作用做查询和存放一些缓冲区数据。
quota50monusers--指定表空间的大小(限额)
●创建表空间
createtablespacets_test2
datafile'c:
\test.dbf'
size10M
autoextendon;
droptablespace表空间名includingcontentsanddatafiles;//删除表空间所有内容
修改用户口令(密码)--自己或管理员都可修改
alteruserlishiidentifiedby123456
删除用户模式(需管理员)
dropuserlishicascade;
cascade【表示删除该用户下所有对象】
用户授权
给当前用户创建session
使用grant关键字来授权(把创建会话的权限给用户)
grantcreatesessionto用户名
为什么要创建SESSION因为oracle创建完新用户只是有了用户信息,还没有给该用户赋予
权限,特别通信的权限,所以要给用户授权允许访问。
给用户创建表的权限(用户无使用表空间的权限)
1、grantunlimitedtablespacetolishi;
给用户赋予操作表空间的权限(unlimited不受限制)
2、grantcreatetabletolishi;
给用户赋予创建表的权限
给用户授予权限简洁方式:
1、grantcreatetable,createsession,unlimitedtablespacetolisi;
撤销新用户权限
使用revoke关键字来撤销用户权限
revokecreatetablefromlishi;(撤销lishi用户创建表的权限)
查看当前用户拥有的权限(user_sys_privs试图)
select*fromuser_sys_privs;
查看所有用户的权限(dba_sys_privs)(管理员)
注意:
当前用户自己创建的表自己拥有(增删改查)权限;
显示用户拥有的权限(user_sys_privs试图)数据字典
●系统权限与对象权限
对象权限(本用户创建的表其他用户是不可以访问)
如何让另外用户(非系统管理员)访问自己的表,可以授权:
把当前用户的student表的查询授权给lishi用户让他可以访问
1、grantselectonstudentstolishi;--用当前用户登录授权
由sysdba出面把王五用户的students表的查询授权给lishi用户;
2、grantselectonwangwu.studentstolishi;
由sysdba出面把王五用户的students表的增删改查授权给lishi用户;
3、grantselect,insert,update,deleteonwangwu.studentstolishi;
或grantallonwangwu.studentstolishi;
查看对象权限(select,insert等)
4、select*fromuser_tab_privs
查询表信息的数据字典(看表对象那些用户可以操作而且可以操作的功能那些)
注意:
grantcreatesessiontopublic;
把创建会话权限授予给所有用户。
public用户属于所有用户。
all表示数据库的所有操作(insert,update,delete,select,alter,index)
(user_tab_privs试图)当前用户表信息数据字典
●权限传递:
系统权限传递(withadminoption)
system-->wangwu-->lishi
1.system操作修改任意表【alteranytable】操作授予给wangwu
grantalteranytabletowangwu;
2.进入wangwu用户,再把wangwu的altertable权限授予给lishi
grantalteranytabletolishi;
注意:
ERROR位于第1行:
ORA-01031:
权限不足
解决方式:
进入system用户,让授予权限的用户带上管理选项【adminoption】
grantalteranytabletowangwuwithadminoption;
系统权限传递(withgrantoption)
system-->wangwu-->lishi
1system创建一张新表,把新表查询权限授予给wangwu
grantselectonAtowangwu;
2wangwu把system的权限授予给lishi用户
grantselectonsystem.Atowangwu;
注意:
ERROR位于第1行:
ORA-01031:
权限不足
解决方式;进入system用户,让授予权限的用户带上授权选项【grantoption】
grantselectonsystem.Atowangwuwithgrantoption;
●角色
:
权限的集合,作用一起授予多个权限
以zs登录
必须具有createrole,createsession权限(通过管理员withadminoption赋予)
system登录:
让zs具有createsession系统传递权限(grantcreatesessionzswithadminoption)
createrolemyrole;
droprolemyrole;
grantcreatesessiontomyrole;
grantcreateanytabletomyrole;
grantmyroletowangwu;
但是有些权限是不能赋予给角色的
grantunlimitedtablespacetomyrole;
error:
无法将unlimitedtablespace授予给角色
原因:
有些系统权限不能直接赋予给角色
将myrole赋予给ls
grantmyroletols;
这里createtable和createanytable区别
1、可以给自己创建表
2、加上【any】后可以给自己和其他用户创建表
注意:
角色不属于任何一个用户
表属于一个用户
grantcreateanytabletozs;
zs登录给ls创建表(要求有创建表空间权限)
createtablels.test(idint)
7.授予用户使用数据库中存储空间的权限
GRANTRESOURCETOzs;
【RESOURCE】角色允许用户使用数据库中的存储空间
8.授予用户连接至数据库,并创建数据库对象的权限
GRANTCONNECTTOzs;
【CONNECT】角色允许用户连接至数据库,并创建数据库对象
GRANTCREATESEQUENCETOzs;
【SEQUENCE】此系统权限允许用户在当前模式中创建序列,此权限包含在CONNECT角色中
一般只要将RESOURCE,CONNECT两个角色赋予给用户即可
●常见问题
丢失普通用户密码怎么办?
sqlplus/nolog//不登录
conn/assysdba
alterusersystemidentifiedby新密码;
con/assysdba
conaa/aaassysdba//上面首先采用的是操作系统验证,当前管理的用户默认是管理员(查看用户)
sysdba是操作系统和密码文件验证
普通用户是数据库验证
⏹限制用户
用户加锁alteruser用户名accountLock
用户解锁alteruser用户名accountUnlock
用户口令即刻失效
alteruser用户名passwordexpire
⏹数据库三种验证机制
1、操作系统验证
2、密码文件验证
3、数据库验证
windows下oracle启动过程cdc:
\运行命令
1、lsnrctlstart启动监听
2、netstartOracleServiceZQ
desc表名;//对表的结构描述
se
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 笔记
![提示](https://static.bdocx.com/images/bang_tan.gif)