设为首页 收藏本站
查看: 551|回复: 0

[经验分享] 轻松掌握Oracle数据库管理

[复制链接]

尚未签到

发表于 2016-7-28 11:30:54 | 显示全部楼层 |阅读模式
作为一个DBA的职责如下:
1,安装升级数据库
2,建表,表空间,表,视图,索引...
3,制定并实施备份与恢复计划
4,数据库权限管理,调优,故障排除.
5,还要能参与项目开发,会写sql语句,存储过程,触发器,规则,约束和包.

查看初始化参数命令:
show parameter;

数据库表的备份与恢复
导出具体分为:导出表,导出方案,导出数据库.
我们可以用exp命令来完成导出的操作.
该命详解:

导出自已的表:
exp userid=scott/tiger@test tables=(emp,dept) file=d:/e1.dmp;
特别说明:
在导入和导出的时候,要到Oracle目录的Bin目录下去导.
在导出其他用户的表时只要在表名前指名方案名即可,如:
exp userid=system/manager@test tables=(scott.emp) file=d:/xx.dmp;

导出表结构
exp userid=scott/tiger@test tables=(emp) file=d:/tmp.dmp rows=n;

使用直接导出方式,用于处理大表,速度较快
exp userid=scott/tiger@test tables=(emp) file=d:/tmp.dmp direct=y;

导出方案:
导出自已的方案:
exp scott/tiger@test owner=scott file=d:/scott.dmp;

导出别人的方案,需要相应的权限:
exp system/manager@test owner=(system,scott) file=d:/tmp.dmp;

导出数据库,花的时间可能会比较长,必须要有相应的权限:
exp userid=system/manager@test full=y inctype=complete file=d:/tmp.dmp;
-----------------------------------------------
导入
导入自已的表(由谁导出的就得由谁导入,不然会发出警告,注意外键关系
如果是空表的话, 任意用户都可导入):
imp userid=scott/tiger@test tables=(emp) file=d:/xx.dmp;

导入表到其它用户:
imp userid=system/manager@test tables=(emp) file=d:/xx.dmp touser=scott;

导入表结构:
imp userid= tables=() file= rows=n;

导入数据:
imp userid=scott/tiger@test tables=(emp) file=d:/tmp.dmp ignore=y;

导入方案:
导入自已的方案
import userid=scott/tiger@test file=d:/tmp.dm;

导入别人的方案:
imp userid=system/manager file=xx fromuser=system touser=scott;

导入数据库:
imp userid=system/manager full=y file=d:/tmp.dmp;

=====================================================
数据字典与动态性能视图
数据字典是数据库中最重要的部分,动态性能视图是启动后的信息.
数据字典记录数据库的系统信息.用户只能在数据字典上进行查询操作,
它的维护和修改是由系统自动完成的.
数据字典视图包括:user_xx,all_xx,dba_xx三种类型.
用法如下:

显示当前用户所拥有的所有的表
select table_name from user_tables;

显示当前用户可以访问到的表
select table_name from all_tables;

显示所有方案中的所有表:
select table_name from dba_tables;

=================================
用户名,权限,角色
可以通过查询dba_users可以显示所有数据库用户的详细信息.
select username, password from dba_users;

查看scott拥有的角色
select * from dba_role_privs where grantee='SCOTT';

查看Oracle中所有角色
select * from dba_roles;

查看角色中的权限
select * from dba_role_privs where grantee='用户名';

查看所有的系统权限
select * from system_privilege_map order by name;

查看所有的对象权限
select distinct privilege from dba_tab_privs;

Oracle中的权限分为系统权限和对象权限.

创建用户
create user ken identified by 123446;

为用户授于相应的系统权限.
grant create session,create table to ken with admin option;
grant create view to ken;

回收系统权限
revoke create session from ken;

* 请注意系统权限不是级联回收.

授于对象权限一般是由对象的所有者进行的,但是在9I后dba用户可以授权,授权时如带with grant option,表示授权授权权力.
create user monkey identified by s123;
grant create session to monkey; // 系统权限,create session 表示可登录权限.

我们利用scott用户为monkey用户授权
grant select on emp to monkey; // 查询对象权限
grant update on emp to monkey; // 修改
grant delete on emp to monkey; // 删除

显然上面的方法比较麻烦,因此我们可如下操作:
grant all on emp to monkey; // 表示对象上的所有权限.

同时,我们也可对表中的某列进行授权
grant update on emp(sal) to monkey; // 只能修改emp表上的sal这个字段
grant select on emp(ename,sal) to monkey;
grant alter on emp to monkey;
grant index on scott.emp to monkey [with grant option]; // 授于建立索引权限

回收对象权限,可以由授于者收回,也可由dba用户收回,同时,对象权限是会级联回收的, 这一点与系统权限是不一样的.
create user u1 identified by u1;
create user u2 identified by u2;
grant connect,resource to u1/u2;
grant update on scott.emp to u1 with grant option;
conn u1/u1;
grant update on scott.emp to u2;
conn / as sysdba;
revoke update on scott.emp from u1;
此时u2的相应的更新权限也被回收了,进一步说明了对象权限与系统权限是不同的,前者是级联回收的,而后者却不是.

而为了简化管理在此要引入角色的概念,角色是相关权限的命令集合.

常见预定义角色connect,resource,dba

对于一般应用的开发人员需要的大部分权限都包含在了connect,resource中了.而dba角色爱上你的眼睛有所有的系统权限,而dba角色不具备sysdba和sysoper的特权.不能关闭打开数据库.

自定义角色首先需要相应的权限,不然是创建不了的.
create role 角色名 not identified; // 修改这个角色时不需要输入密码
create role 角色名 indetified by manager; // 当修改时需要密码,为manager

为角色授权
grant create session to 角色名 with admin option;
conn scott/tiger@test;
grant slect on scott.emp to 角色名
grant insert,update,delete on scott.emp to 角色名

角色有了,要分配给用户才会有意义,一般是由dba来完成的.
grant 角色名 to user_xx [with admin option]; // with admin option表示可继续将此角色授下去.

删除角色,一旦删除,那么拥有此角色的用户会失去相应的权限
conn system/manager;
drop role 角色名;

显示所有角色: select * from dba_roles;

动态性能视图
系统在启动时会建立,而在退出时会删除

---------------------------------------
管理表空间和数据文件
表空间是数据库的逻辑组成部分.

数据库的逻辑结构:表空间,段,区,块

利用表空间我们可以把不同类型不同作用的数据文件放到不同的磁盘,从而提高了IO效率与并发性能,并且利于备份和恢复.

建立表空间(需要相应的权限: create tablespace ):
create tablespace data01 datafile 'd:/xx.dbf' size 20M uniform size 128k

有了表空间后,我们可以使用表空间:
create table xxx ... tablespace data01;

表空间脱机
alter tablespace users offline;

表空间联机
alter tablespce users online;

只读表空间
alter tablespace 表空间名 read only;

删除表空间
drop tablespace 表空间名 including contents and datafiles;

扩展表空间
增加数据文件
alter tablespace ts01 add datafile 'xxx' size 20M;

增加数据文件的大小
alter tablespace 表空间名 'd:/xx.dbf' resize 20M;

设置文件的自动增长
alter tablespace 表空间名 'd:/xx.dbf' autoextend on next 10M maxsize 500M;

==============================
维护数据完整性
数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则.
我们可以通过约束,触发器,应用程序(过程,函数)三种方法来实现,而约束易于维护,性能高,所以是首选.
约束包括:not null, unique, primary key, foreign key, check;
unique定义后允许为空.
一张表最多只能有一个主键,但是可以有多个unique约束.

增加指定列不允许为空
alter table goods modify goodsName not null;

增加unique约束
alter table customer add constraint unique_idcard unique(cardId);
alter table customer add constraint add_check check(addr in(xx,xx,xx));

删除约束
alter table customer drop constraint 约束名称;

特别说明:在删除主键约束时,可能会碰到错误,因为存在外键引用的况 ,在这种情况下我们可以这样做:
alter table xx drop primary key cascade;

查看约束信息可通过数据字典user_constraints;

-------------------
索引,对于我们要经常查询而又不常更新的列,我们常常会建立相应的索引.

创建单列索引
create index name_index on customer(name);

复合索引
create index 索引名 on 表名(字段1,字段2);

使用原则
1,在大表上建立索引才会有意义.
2,在where子句或是连接条件上经常引用的列上建立索引.
3,索引层次不超过4层.

索引缺点分析
1,建立索引,系统要占用为表的1.2倍的空间
2,更新时,索引也要用时间来对其更新

实践表明,不好的索引不但于事无补,反而会降低系统性能.

在如下情况建立索引是不恰当的
1,很少用的.
2,逻辑性字段.

显示索引信息数据字典:dab_indexs, user_indexs

Oracle会为unique字段加上索引.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-250678-1-1.html 上篇帖子: Oracle一个简单的存储过程 下篇帖子: Oracle SOA 套件最佳实践
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表