【Diary☆ 2012】甲骨文Oracle-初级
2012diary吧
全部回复
仅看楼主
level 11

海量oracle基础教程等你发现,这些都是本人一天一天积累起来的经验知识,希望对大家能够有些帮助
2012年12月05日 07点12分 1
level 11
ora的几个基础概念和命令
表空间(tablespace)
在一个房间里面这个房间可以存储很多箱子,箱子里面可以存储物品! 表空间可以看成房间 箱子可以看成数据文件 物品可以看成表。 用户指定表空间也就是你希望把属于这个用户的表放在那个房间(表空间)里面。表空间是一个虚拟的概念可以无限大,但是需要由数据文件作为载体。
表空间里ORACLE中的一个逻辑概念,它用于存放数据库文件,而数据库文件是存放在磁盘的数据文件,是物理概念,表空间里是后台的一个内存区域,通过它来连接到数据库文件,表空间只是一个虚拟的空间,但是它又没有实际的大小,表空间是恢复数据库的最小单元,表空间不能单独存在,它至少应该包涵一个数据库文件,可以把具有相同数据结构的数据库文件同时放到一个表空间里,而表空间用来逻辑的加以管理这些文件,可以想象成ORACLE是一个柜子,而表空间就是柜子上的空抽屉,而数据库文件就是文件夹,它放在抽屉里,嘿嘿
oracle 默认表空间是什么?
所谓的默认表空间就是你这个用户在CREATE时不特别指定表空间的位置时,存储的位置。
如何创建表空间?
用企业管理器(EM)或者sqlplus都可以,EM是图形界面不说了。如果用sqlplus,如下:sqlplus / as sysdbaSQL>create tablespace tbsname datafile '文件路径及文件名' size 500m;追问初学者 不懂,可以具体点吗 回答sqlplus / as sysdba这个命令用来登陆到oracle,在你的命令行中直接执行就可以SQL>create tablespace tbsname datafile '文件路径及文件名' size 500m; SQL>是进入sqlplus后的提示符,你输入语句create tablespace tbsname datafile '文件路径及文件名' size 500m; 这样就建立起来了(别漏了末尾的分号)。 追问create tablespace tbsname datafile '文件路径及文件名' size 500m; 这里的文件名是表空间名吗? 回答tbsname是表空间名,你自己起就可以,文件名指的是这个表空间所包括的数据文件的名字,例如用用Windows系统的话,可以这样写create tablespace mytbs datafile 'd:\oracle\oradata\mytbs01.dbf' size 500m; 追问我是做测试的,刚学习oracle,要搭建数据库环境,研发部发给一个导出数据库dmp文件和表空间的txt文件,数据库创建好了要创建表空间 你说的那个 datafile 后‘文件路径及文件名' ,这文件名是创建表空间时的txt文件名不一定要和表空间名相同吧
创建用户并指定表空间
create user testserver_user identified by testserver_user;
alter user user_name default tablespace tablespace_name;
Oracle 如何删除用户和表空间 ?
Oracle 使用时间长了, 新增了许多user 和tablespace. 需要清理一下
对于单个user和tablespace 来说, 可以使用如下命令来完成。
步骤一: 删除user
drop user ×× cascade
说明: 删除了user,只是删除了该user下的schema objects,是不会删除相应的tablespace的。
步骤二: 删除tablespace
DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;
Delete、truncate和drop三种命令的区别和用法?
delete 和truncate 都可以用来删除数据表里的数据。delete可以精确删除。如删除 学生表(student)里id为5的记录。可以写为 delete from studen where id ='5' 。删除表里面的所有数据,可以写为delete from studnet 或者 truncate table student 。后者对日志的记录要少。drop 比较简单,是用来删除表的 如 drop table student 。drop是将表及其里面的数据 全部删除
TRUNCATE和DELETE有以下几点区别1、TRUNCATE在各种表上无论是大的还是小的都非常快。如果有ROLLBACK命令DELETE将被撤销,而TRUNCATE则不会被撤销。2、TRUNCATE是一个DDL语言,向其他所有的DDL语言一样,他将被隐式提交,不能对TRUNCATE使用ROLLBACK命令。3、TRUNCATE将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过TRUNCATE操作后的表比DELETE操作后的表要快得多。4、TRUNCATE不能触发任何DELETE触发器。5、不能授予任何人清空他人的表的权限。6、当表被清空后表和表的索引讲重新设置成初始大小,而delete则不能。7、不能清空父表。删除表的几种方法?

2012年12月05日 07点12分 2
level 11
删除表(记录和结构)的语名delete ———— truncate ———— drop
DELETE (删除数据表里记录的语句)
DELETE FROM表名 WHERE 条件;
注意:删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.
如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间
TRUNCATE TABLE 表名;此操作不可回退.
相同点
truncate和不带where子句的delete, 以及drop都会删除表内的数据
注意:这里说的delete是指不带where子句的delete语句
不同点:
1. truncate和 delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
显然drop语句将表所占用的空间全部释放
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始).
4.速度,一般来说: drop>; truncate >; delete
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及
使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据
oracle中删除表中的一列语句
alter table 表名 drop colum 列名
truncate不能进行rollback操作。
一、查看用户的权限1.查看当前用户所拥有的系统权限 select * from session_privs;
2.查看数据库内的所有角色 selec * from dba_roles;
3:查看数据库中所有用户:SQL> select username from dba_users;
导入导出命令:
Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文件, imp命令可以把dmp文件从本地导入到远处的数据库服务器中。 利用这个功能可以构建两个相同的数据库,一个用来测试,一个用来正式使用。执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,
DOS中可以执行时由于 在oracle 8i 中 安装目录ora81BIN被设置为全局路径,
该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。
oracle用java编写,SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件有可能是被包装后的类文件。
SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类,完成导入导出功能。下面介绍的是导入导出的实例。
数据导出:
1 将数据库TEST完全导出,用户名system 密码manager 导出到D:daochu.dmp中
exp system/manager@TEST file=d:daochu.dmp full=y
2 将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:daochu.dmp owner=(system,sys)
3 将数据库中的表inner_notify、notify_staff_relat导出
exp aichannel/aichannel@TESTDB2 file= d:datanewsmgnt.dmp tables=(inner_notify,notify_staff_relat)
4 将数据库中的表table1中的字段filed1以"00"打头的数据导出
exp system/manager@TEST file=d:daochu.dmp tables=(table1) query=" where filed1 like '00%'"
上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。
也可以在上面命令后面 加上 compress=y 来实现。
数据的导入
1 将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 就可以了。
2 将d:daochu.dmp中的表table1 导入
imp system/manager@TEST file=d:daochu.dmp tables=(table1)
基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。
2012年12月05日 07点12分 3
level 11
SQL> create user sun identified by sun;用户已创建。
SQL> grant connect,resource,dba to sun;授权成功。
SQL> alter user sun default tablespace ecch_data;用户已更改。
imp aichannel/aichannel@HUST full=y file=d:datanewsmgnt.dmp ignore=y导入
exp 到处:D:\app\yannis\product\11.1.0\db_1\BIN>exp ceshi/ceshi@orcl1 file=d:\kkk.dmp rows
=y compress=y log=d:\kkk.log owner=ceshi
alter database datafile 'D:\app\yannis\product\11.1.0\db_1\oradata\ecch_da
a1.dbf' resize 8G;数据库大小更改。
drop user ceshi cascade;删除用户。
2012年12月05日 07点12分 4
level 11
挤挤
2012年12月05日 07点12分 5
level 11
SQL常用命令使用方法:
(1) 数据记录筛选:
sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]"
sql="select * from 数据表 where 字段名 like %字段值% order by 字段名
[desc]"
sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]"
sql="select * from 数据表 where 字段名 in (值 1,值 2,值 3)"
sql="select * from 数据表 where 字段名 between 值 1 and 值 2"
(2) 更新数据记录:
sql="update 数据表 set 字段名=字段值 where 条件表达式"
sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表
达式"
(3) 删除数据记录:
sql="delete from 数据表 where 条件表达式"
sql="delete from 数据表" (将数据表所有记录删除)
(4) 添加数据记录:
sql="insert into 数据表 (字段 1,字段2,字段 3 …) valuess (值 1,值2,值3 …)"
sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到
目标数据表)
2012年12月05日 08点12分 6
1