oracle的使用笔记

(1)
oracleXE:
1.
����w限制,XE 最多只��用到 1GB RAM。�@��限制是很合理的,既然 XE �O�的目�耸侨〈� Access 小
型桌上型�Y料分享型�Y料�欤�那�N有超�^ 1GB RAM 的存取能力既不必要,也���嚎s企�I版本的�@利空�g

2.
只能使用�� CPU。�@�e�K不是�f多 CPU 的��X就不能安�b XE,而是�f如果你在多 CPU ��X上安�b XE
,它利用�@些多 CPU 的方式是仰�作�I系�y的分配,而不是像企�I版一�樱��Y料�毂旧砭涂梢灾�配 CPU
的使用。
3.
 一台�C器上只能跑一�� Database Instant。
4.
�Y料量大小有 4GB 的最大限制。
(2)
oracleXE的启动:
首先,要在服务中,设置OracleXETNSListener,OracleServiceXE为'手动',或'自动'.
启动oracle时,需要启动oracle的服务,以及它的监听listener.
oracleXE的启动:
D:\oraclexe\app\oracle\product\10.2.0\server\BIN>net start OracleXETNSListener
D:\oraclexe\app\oracle\product\10.2.0\server\BIN>net start OracleServiceXE
oracleXE的关闭:
D:\oraclexe\app\oracle\product\10.2.0\server\BIN>net stop OracleXETNSListener
D:\oraclexe\app\oracle\product\10.2.0\server\BIN>net stop OracleServiceXE
登录方式一:
http://127.0.0.1:8080/apex
登录方式二:
D:\oraclexe\app\oracle\product\10.2.0\server\BIN\sqlplus -->可以用command line打开.
username: system   / pnet
password: weblogic / pnet
(3)
3.1
一套ORACLE数据库系统中可以有多个ORACLE数据库及其相对应的实例.
每个ORACLE数据库拥有一个数据库实例(INSTANCE)
数据库是一间房间,表空间是一个柜子,表就是一个抽屉;一个数据库中有很多表空间,一个表空间里
又有很多 表;一个表只能属于一个表空间,一个表空间只能属于一个数据库.
每个数据库最少有一个表空间(SYSTEM表空间),建立SYSTEM表空间的目的是尽量将目的相同的表存放在
一起,以提高使用效率,只应存放数据字典.
3.2
类型标识符   说明
Number  数字型
Int  整数型
Pls_integer  整数型,产生溢出时出现错误
Binary_integer  整数型,表示带符号的整数
Char  定长字符型,最大255个字符
Varchar2  变长字符型,最大2000个字符
Long  变长字符型,最长2GB
Date  日期型
Boolean  布尔型(TRUE、FALSE、NULL三者取一)
3.3
将oracle的启动路径放于'环境变量'中的PATH中.以后,在任何地方用net start ..都可以了.
D:\oraclexe\app\oracle\product\10.2.0\server\BIN
数据文件的后辍是:*.DBF.
dba_data_files:关联datafile与tablespace
dba_tablespaces:只有其自身
dba_tables:关联talbe与tablespace,及owner.
dba_users:user_id,username,password,default tablespace
 
(4)
--------------------------------oracle结构----------------------------------
一个真正的oracle系统,可以有多个数据库;每个数据库对应一个数据库实例(instance);一个数据库实例
中可以有多个表空间(相当于mysql中的各个数据库);每个表空间中可以有多个数据表.
======================================>oracle数据以大写保存.
所以在oracle中,最好全都用大写去操作.
--------------------------------数据文件----------------------------------
(1)
数据文件,是独立于表空间的.
只是其创建时,由创建空间时生成.
其修改,不用用到表空间.如下:
alter database datafile '.......' resize 5m;
(2)
查看系统所有的数据文件:
select * from dba_data_files;
--------------------------------表空间----------------------------------
(须指定datafile的位置,名称,以及大小)
create tablespace jasonspace01 datafile 'd:\oraclexe\oradata\xe\jasonspace01'size 10m ;
(可以指定表空间的自动扩展的大小,以及表空间的最大值。)
create tablespace jasonspace02 datafile 'd:\oraclexe\oradata\xe\jasonspace02' size 1m
autoextend on next 1m maxsize 10m;
-->创建表空间时,注意datafile中,路径的最后要写表空间的名.
-->创建后的表空间,为大写.无论是在创建时是输入大写与小写.
为表空间增加数据文件
alter tablespace jasonspace02 add datafile 'd:\oraclexe\oradata\xe\jasonspace' size 10m
autoextend on next 10m maxsize 20m;
修改数据文件的大小:
重改datafile的大小要小于原来datafile可用的大小
alter database datafile 'D:\ORACLEXE\ORADATA\XE\JASONSPACE' resize 5m;
查看表空间的名称,大小,datafile的存放位置-->查看表空间的大小,即是查看数据文件的大小
select tablespace_name,bytes/1024/1024 MB,file_name from dba_data_files;
查看表空间剩余的大小:
select tablespace_name,sum(bytes)/1024/1024 MB from dba_free_space group by
tablespace_name;
删除表空间:
drop tablespace jasonspace01 including contents;
删除表空间的同时,删除数据文件:
drop tablespace sales  including contents  and  datafiles;

查看系统所有的表空间:
select * from dba_tablespaces ;
--------------------------------用户管理----------------------------------
创建用户,指定默认表空间,磁盘配额:
create user jason identified by weblogic default tablespace jasonspace02 quota 1m on
jasonspace02;
用户授权与销权:
*Connect:最低级,仅允许用户访问数据库中的表和索引,但不能创建和删除它们;
*Resource: 建立在Connect之上,允许用户在数据库中创建、删除表和索引;
*DBA:即数据库管理员,拥有数据库管理的全部权限,包括访问数据库表、创建和删除索引、修改表结
构、授予数据库权限给其他用户等。
grant dba,resource,connect to jason;
revoke dba,resource,connect from jason;
如何查看权限:
1. oracle用户查看自己的权限和角色
     select * from user_tab_privs;
     select * from user_role_privs;
2. sys用户查看任一用户的权限和角色
     select * from dba_tab_privs; ->表的权限?
     select * from dba_role_privs;
如:
select * from dba_role_privs where grantee='JASON';
GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
JASON RESOURCE NO YES
JASON CONNECT NO YES
JASON DBA NO YES
修改用户的密码:
alter user jason identified by martinpass;
删除用户:
DROP USER jason;
删除用户及此用户下面的所有对象:
drop   user   userName   cascade; 
查看系统所有的用户:
select * from dba_users ;
--------------------------------表----------------------------------
创建表,并指定表空间:
create table jasontable (id int not null) tablespace jasonspace02;
-->oracle创建表与mysql的区别是:
mysql要先选择相应的数据库再创建表;oracle,则是在创建的sql的最后加上相应的tablespace
desc JASONTABLE01;
查看表的所属user,tablespace:
select owner,table_name,tablespace_name from dba_tables where
tablespace_name='JASONSPACE02';
注意:
tablespace_name='JASONSPACE02'不能了用回创建时的jasonspace02,否则会查询出错。
oracle5个系统表空间:
SYSTEM,UNDO,SYSAUX,TEMP,USER
alter table JASONTABLE01 add (id int null);
select username||id from JASONTABLE01; 将两列内容合并
-->
查看某一表空间中所有数据表(相当于mysql中某一数据库中的所有表):
select owner,table_name,tablespace_name from dba_tables where tablespace_name='***'
--------------------------------角色--------------------------------
角色是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。
预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下介简单的介绍一下这些预定角色.
-->
CONNECT, RESOURCE,  DBA
A.建一个角色
sql>create role role1;
============
B.授权给角色
sql>grant create any table,create procedure to role1;
============
C.授予角色给用户
sql>grant role1 to user1;
============
D.查看角色所包含的权限
sql>sql>select * from role_sys_privs where role='角色名';
============
E,删除角色
sql>drop role role1;
角色删除后,原来拥用该角色的用户就不再拥有该角色了,相应的权限也就没有了。
--------------------------------测试关系--------------------------------
(1)
创建数据文件,表空间,用户,表.
create tablespace space01 datafile 'C:\datafiles\space01' size 1m autoextend on next 1m
maxsize 5m;
alter database datafile 'c:\datafiles\space01' resize 2m;
create user test identified by hwj627 default tablespace SPACE01 quota 1m on SPACE01;
-->密码不用加引号.
grant dba,resource,connect to TEST;
create table table01 (id int null) tablespace SPACE01;
1.
select owner,tablespace_name,table_name from dba_tables where table_name='TABLE01';
OWNER TABLESPACE_NAME TABLE_NAME
SYSTEM SPACE01 TABLE01
-->由于是用system登录创建的,所以,owner=system.
2.
删除表空间时:

drop tablespace SPACE01 -->若为空表空间,可以.若不为空,会提示:
ORA-01549: tablespace not empty, use INCLUDING CONTENTS option

drop tablespace SPACE01 including contents;
则表也被删除了.
但数据文件,没被删除.只是select * from dba_data_files;查看不了.在硬盘上,还是可见的.

drop tablespace SPACE01 including contents and datafiles;
则完全删除.
3.
删除用户:

drop user TEST; -->若用户中没包括其它对象即可用;若用对象会出错.

drop user TEST cascade;
则会删除用户,以及删除用此用户创建的所有表.但不会删除到:用此用户创建的表空间.

--------------------------------序列的用法--------------------------------
如何让表ID列,自动增长:
-------------->oracle没有自动增长列,用序列实现:
1.
create table table02(id int not null primary key,name varchar2(255) default
'jason',insertDate date default sysdate) tablespace SPACE02;
2.
create sequence autoadd increment by 1 start with 1 maxvalue 999;
3.
进行插入:
insert into  table02 values(autoadd.nextval,'jason');
-->用 ' 序列名.nextval '
(1)
格式:
CREATE SEQUENCE [user.]sequence_name
    [increment by n]
    [start with n]
    [maxvalue n | nomaxvalue]
    [minvalue n | nominvalue];
其中:
INCREMENT BY: --->正值为升序,负值为降序
指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为
1。
START WITH:
指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降
序,序列可由比最大值小的值开始,缺省值为序列的最大值。
(2)
更改序列命令
    ALTERSEQUENCE [user.]sequence_name
    [INCREMENT BY n]
    [MAXVALUE n| NOMAXVALUE ]
    [MINVALUE n | NOMINVALUE];
(3)
DROP SEQUENCE [user.]sequence_name;
从数据库中删除一序列。
(4)
查看序列:
select   *   from   user_sequences  -->查看当前用户的序列.
select * from test.user_sequences;  -->查看某一用户的序列.
select   *   from   dba_sequences  -->查看所有用户的序列.
引申:
对于存储过程也是一样的:
select * from dba_procedures;  -->只可以查看其名,不能查询存储过程的内容.
select * from user_procedures;
如果要全部查询,可以:
select * From user_source where type='PROCEDURE';
select * From dba_source where type='PROCEDURE';
同样道理:
select * from user_tables  相等于 select * from dba_tables  .
select * from user_tablespaces 相等于 select * from dba_tablespaces  .

--------------------------------备份与还原--------------------------------
导入,导出数据时,要到其oralce的BIN目录下进行.否则,虽然可在任意地方进行,但会出现字符错误而最
终没法导出.
可用exp,然后根据向导进行备份.
如何导出,导入某用户,某表空间???????????????????????????????
要到D:\oraclexe\app\oracle\product\10.2.0\server\BIN下进行备份.-------->important!!
备份表空间:
导出:
...\BIN>exp system/weblogic@xe transport_tablespace=n tablespaces=SPACE02 file=c:\space.dmp
导入:
...\BIN>imp system/weblogic@xe full=y file=c:\space.dmp -->有点错误,但可导入表.
又如:
exp system/manager@TEST file=d:\daochu.dmp full=y
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
exp aichannel/aichannel@TESTDB2 file= d:\datanewsmgnt.dmp tables=(inner_notify,b)
exp system/manager@TEST file=d:daochu.dmp tables=(table1) query=" where filed1 like '00%'"
导入时,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上 ignore=y 就可以了,如:
...\BIN>imp system/weblogic@xe full=y ignore=y file=c:\space.dmp
导入时,最好把所有仍存在的表,删除,则不会报错.
 
(4)数据的备份与还原
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所包裹的类,完成导入导出功能。
数据库导出有四种模式full(全库导出), owner(用户导出), table(表导出), tablespace(表空间导出).
  
  full( 全库导出): 导出除ORDSYS,MDSYS,CTXSYS,ORDPLUGINS,LBACSYS 这些系统用户之外的所有用户的数据.
  
  owner( 用户导出): 导出某个或某些用户的所有权限和数据.
  
  tables( 表导出): 导出某些表(可以是不同用户的)的结构和数据.
  
  tablespace( 表空间导出):表空间导出数据.
参数解释:
file 导出的文件列表可以指定一个或多个文件名缺省扩展名为.dmp 缺省导出文件名为expdat.dmp.
full:为Y 时表示在全库方式下导出缺省为N.
fromuser(imp):此参数表示导出文件中的用户模式.
touser(imp):此参数表示导入到数据库中时使用的用户模式对象
log:日志文件,一般如果以命令行导入时,将log 设置上比较好可以看,到所有的导入信息,导入信息哪儿出错,导入了那些数据库对象.
导出数据:
       D:\oracle\ora92\bin\exp userid=caittmdba/cait@YSDB_192.168.1.2 owner=caittmdba file=e:\%DATE%.dmp log=e:\exp.log
       通过该命令可以把caittmdba这个用户所属的所有数据、对象导出到一个文件中,导出的日志写在e:\exp.log文件中,连接Oracle的本地服务名为YSDB_192.168.1.2,导出的文件为e:\%DATE%.dmp,这个文件的文件名是当前的日期。如果把这个命令写成批处理文件,并放到计划任务中,就可以自动进行备份数据了。
      导入数据:
      D:\oracle\ora92\bin\imp userid=caittmdba/cait@YSDB_192.168.1.2 fromuser=caittmdba touser=caittmdba file=e:\data.dmp log=e:\imp.log
      注意事项
       在导出数据时常常会出现Oracle 942 错误,这个错误往往是在对Oracle进行了升级后才会出现,这是Oracle升级程序的一个Bug(Oracle的Bug和补丁一直以来都是满天飞,而且不成体系,文档和技术支持以少,这一点和MS比起来就差很远了。如果大家去看一看Oracle的发展经历相关的文章就知道,Oracle从开始就这样)。
      这个Bug只需要执行ORACLE_HOME/rdbms/admin/catpatch.sql 脚本就可以了,同时要注意调大java_pool_size 和shared_pool_size这两个参数的大小,不然会很花时间的。在用sysdba的身份登录进SQL Plus执行下面的命令:
         SQL>shutdown immediate;
         SQL>startup migrate;
         SQL>@?/rdbms/admin/catpatch.sql
      大约半个小时就可以执行完了。

下面介绍的是导入导出的实例。
数据导出:
 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=file= d:datanewsmgnt.dmp ignore=y
   上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
   在后面加上 ignore=y 就可以了。
 2 将d:daochu.dmp中的表table1 导入
 imp system/manager@TEST  file=d:daochu.dmp  tables=(table1)
 
 基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。

exp system/manager@Test file=c:\jason.dmp full=Y
exp system/manager@Test file=c:\jason.dmp tables=(table1,table2)
exp system/manager@Test file=c:\jason.dmp owner=(hwj,jason)
imp system/manager@Test file=c:\jason.dmp
imp system/manager@Test file=c:\jason.dmp ignore=y
 

--------------------------------其它说明--------------------------------
添加字段:
alter table table02 add (insertdate date default sysdate),若多列,用逗号分开.
删除表字段:
alter table table02 drop column 字段;
如何快速清空一个大表?
SQL>truncate table table_name;
如何查有多少个数据库实例?
SQL>SELECT * FROM V$INSTANCE;
(3)
限制查询的数目
A,
oracle利用rownum来限制查询的数目
select * from pn_module where rownum<5; -->得出前四项
B,
MYSQL中,则用:
SELECT * FROM TABLE1 LIMIT N ;
C,
SQL SERVER,则用:
SELECT TOP N * FROM TABLE1

你可能感兴趣的:(oracle,职场,休闲)