oracle基本操作,自己亲手做过了

第一部分:

--创建表空间(其中TWC.DBF不需要我们手工创建)

-----创建了一个大小为20M的表空间,自动增长以5M的大小,可以无限制增加下去,
------只要你的磁盘够大
create tablespace tian datafile 
 'D:\Oracle1\TWC.DBF' size 20M autoextend on next 5M maxsize unlimited 
 logging online permanent extent management local autoallocate 
 blocksize 8K 
 segment space management manual 
 flashback on;


--修改表空间
alter tablespace tian1 add datafile 'F:\oraData\tablesecond04\tablesecond_DATA2.DBF' size 10000M;


alter database datafile 'F:\oraData\tablesecond04\tablesecond_DATA2.DBF' autoextend on next 100m maxsize unlimited;
---创建用户(其中表空间为 tian)
create user twc identified by twc
  default tablespace tian 
   temporary tablespace temp
   profile default 
    account unlock;
--创建用户的语句的说明
create user  用户名
identified by  密码(不要加引号)
default tablespace 默认表空间名 quota 5M on 默认表空间名
[temporary tablespace 临时表空间名]
[profile 配置文件名]                                          //配置文件
[default role 角色名]                                        //默认角色
[password expire]                                             //密码失效
[account lock]                                                   //账号锁定
修改用户
alter user 用户名 identified by 密码 quota 10M on 表空间名
alter user 用户名 account lock/unlock
删除用户
drop user 用户名 [cascade].如果要删除的用户中有模式对象,必须使用cascade.




--用户的角色及其授权
 -- Roles for tablesecond
 grant DBA TO twc with admin option;
 grant aq_administrator_role to twc with admin option;
 grant mgmt_user to twc;
 alter user twc default role all;
--建另外一个用户
CREATE USER twc1
  IDENTIFIED BY twc1
  DEFAULT TABLESPACE tian
  TEMPORARY TABLESPACE TEMP
  PROFILE DEFAULT
  ACCOUNT UNLOCK;
--角色和授权
  --  Roles for tablesecond
  GRANT DBA TO twc1 WITH ADMIN OPTION;
  GRANT AQ_ADMINISTRATOR_ROLE TO twc1 WITH ADMIN OPTION;
  GRANT MGMT_USER TO twc1;
  ALTER USER twc1 DEFAULT ROLE ALL;
  -- 1 System Privilege for tablesecond
  GRANT UNLIMITED TABLESPACE TO twc1 WITH ADMIN OPTION;
  -- 1 Tablespace Quota for tablesecond 
  ALTER USER twc1 QUOTA UNLIMITED ON tian;


-- 创建表
create table users1(
userid int primary key ,
username varchar2(30) NOT NULL,
pwd  varchar2(30) NOT NULL 
);
--如果创建上面的表,那么系统将为你生成,以下此表的具体的代码:
-- Create table
create table USERS1
(
  USERID   INTEGER not null,
  USERNAME VARCHAR2(30) not null,
  PWD      VARCHAR2(30) not null
)
tablespace TIAN
  pctfree 10
  pctused 40
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate primary, unique and foreign key constraints 
alter table USERS1
  add primary key (USERID)
  using index 
  tablespace TIAN
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
create sequence userid;--创建序列
--另外一种创建序列的方式
--创建一个从1开始,默认最大值,每次增长1的序列,要求NOCYCLE,缓存中有30个预先分配好的序列号。
CREATE SEQUENCE MYSEQ
   MINVALUE 1
   START WITH 1
   NOMAXVALUE
   INCREMENT BY 1
   NOCYCLE
   CACHE 30


CREATE SEQUENCE userid  --创建序列,名为:myseq
START WITH 1   --从1开始
INCREMENT BY 1 --每次递增 1
ORDER      --排序
NOCYCLE  ; --避免重新开始,关闭循环


--删除序列
drop sequence userid;


--以下是表操作
insert into users1 values(userid.nextval,'xiaoliiu','666666');---插入


RENAME users1 TO users;--修改表名
COMMENT ON TABLE users IS '存放雇员信息';--表名的注释
COMMENT ON TABLE users.username IS '描述雇员姓名';--表中属性的注释


select * from users1       --查询表的所有属性
delete from users1 where userid=1;--删除表中的值
ALTER TABLE users1 ADD birhtday number(4);--增加表属性
ALTER TABLE users1 ADD pass NUMBER(4);
ALTER TABLE users1 DROP COLUMN username;--删除表属性
ALTER TABLE users1 MODIFY(col1 VARHCAR2(50), col2 VARCHAR2(100));--修改表属性 col1改为col2


drop table users1;--删除表结构


delete from users1 where username='二';--删除
SELECT max(userid) FROM users1;-- 查询学号最大的
SELECT min(userid) FROM users1;-- 查询学号最小的


update users set username='tianweichang', pwd='888888' where userid=2;


create sequence userid1;
insert into users values(userid1.nextval,'wangwu','55555');---插入
--创建视图
CREATE OR REPLACE VIEW usersView
    AS
   SELECT u.USERID,u.username
   FROM users u JOIN users1 ON u.userid=users1.userid
   WITH READ ONLY
   
select * from usersView --查询视图
--创建索引

CREATE UNIQUE INDEX UQ_ENAME_IDX ON users1(username);  

远程导入

imp 用户名/密码@IP地址:1521/orcl file=d:\aa.dmp; 导入aa.dmp文件

第二部分

l 客户端
1. Sql Plus(客户端),命令行直接输入:sqlplus,然后按提示输入用户名,密码。在sqlPlus客户端输入命令ed,可以出现文本编辑器。
    2. 从开始程序运行:sqlplus,是图形版的sqlplus.
    3. http://localhost:5560/isqlplus    
4.一些第三方客户端:ToadPlSql Developer(必须在本机安装了orcl)
l 解锁用户
1. cmd窗口输入sqlplus sys/bjsxt as sysdba sys是超级管理员用户名,/后面是其密码)
2. alter user scott account unlock;(解锁用户scott)
l 查看表结构
desc 表名
l select语句
n 计算数据
计算数据可以用空表:比如:.select 2*3 from dual
任何含有空值的数学表达式,最后的计算结果都是空值。  
n 查看系统时间
select sysdate from dual;  //查看当前的系统时间  

n 查询结果连接字符串
select ename || "abcd" 如果连接字符串中含有单引号,用两个单引号代替一个单引号。
select ename||sal from emp;  //(sal的查询结果转化为字符串,与ename连接到一起,相当于Java中的字符串连接)   
l distinct
8select distinct deptno from emp;   //消除deptno字段重复的值    
9select distinct deptno , job from emp; //将与这两个字段组合重复的值去掉   

l where
n 大于过滤判断

select * from emp where empno > 10;  //大于 过滤判断    
n 不等于过滤判断

select * from emp where empno <> 10  //不等于  过滤判断  
n 字符串比较

select * from emp where ename > 'cba';  //字符串比较,实际上比较的是每个字符的AscII值,与在Java中字符串的比较是一样的   
n 指定某个范围between and 
select ename, sal from emp where sal between 800 and 1500;  //(between and过滤,包含800 1500)    
n 选择字段的值是否为null
select ename, sal, comm from emp where comm is null;  //(选择comm字段为null的数据)    
select ename, sal, comm from emp where comm is not null;  //(选择comm字段不为null的数据)   
n in 表范围
select ename, sal, comm from emp where sal in (800, 1500,2000);  //(in 表范围)    
select ename, sal, comm from emp where sal not in (800, 1500,2000);  //(可以对in指定的条件进行取反) 
n 比较日期
select ename, sal, hiredate from emp where hiredate > '02-2月-1981'; //(只能按照规定的格式写)    
n 模糊查询


select ename from emp where ename like '%ALL%';   //(模糊查询)    
select ename from emp where ename like '_A%';    //(取第二个字母是A的所有字段)    
select ename from emp where ename like '%/%%';   //(用转义字符/查询字段中本身就带%字段的)    
select ename from emp where ename like '%$%%' escape '$';   //(指定$为转义字符查询字段中本身就带%字段的) 

l 排序
select * from dept where deptno <>10 order by deptno asc;   //(升序排列)      
select ename, sal, deptno from emp order by deptno asc, ename desc;   //(按照多个字段排序 首先按照deptno升序排列,detpno相同时,再按照ename的降序排列


第三部分:

Oracle数据导入导出imp/exp ,切记是在cmd命令直接开始,并不是sqlplus,因为之前自己老搞错
功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份。
 
大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失)。
 Oracle有个好处,虽然你的电脑不是服务器,但是你装了oracle客户端,并建立了连接
 (通过Net Configuration Assistant添加正确的服务命名,其实你可以想成是客户端与服务器端 修了条路,然后数据就可以被拉过来了)
 这样你可以把数据导出到本地,虽然可能服务器离你很远。
 你同样可以把dmp文件从本地导入到远处的数据库服务器中。
 利用这个功能你可以构建俩个相同的数据库,一个用来测试,一个用来正式使用。
 
执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,
 DOS中可以执行时由于 在oracle 8i 中  安装目录\$ora10g\BIN被设置为全局路径,
 该目录下有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 将数据库中的表table1 、table2导出
   exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2) 
 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
   上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
   在后面加上 ignore=y 就可以了。
 2 将d:\daochu.dmp中的表table1 导入
 imp system/manager@TEST  file=d:\daochu.dmp  tables=(table1) 
 
 基本上上面的导入导出够用了。不少情况我是将表彻底删除,然后导入。
 
注意:
 你要有足够的权限,权限不够它会提示你。
 数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。

 

数据导出:
exp hkb/hkb@boss_14 full=y file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbfull.log;

导出注意事项:导出的是当前用户的的数据,当前用户如果有DBA的权限,则导出所有数据!

同名用户之间的数据导入:
imp hkb/hkb@xe  file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbimp.log full=y

不同名之间的数据导入:
imp system/test@xe fromuser=hkb touser=hkb_new file=c:\orabackup\hkbfull.dmp

log=c:\orabackup\hkbimp.log;

另外附上oracle视频教程网站:http://bbs.51cto.com/thread-884173-1.html

期待第四部分的出现..............

select * from xd_bankquotasatistical as of timestamp sysdate-(1/(24)); --恢复1小时前的表中的数据 


欢迎关注公众号:Java后端技术全栈