1、使用版本Oracle 11g 64位,安装方式百度即可
2、客户端软件:(1)Oracle自带的sqldeveloper,不是很好用,数据库安装好后,自带的sqldeveloper(位置:oracle\product\11.2.0\dbhome_1\sqldeveloper\sqldeveloper.exe)不能用,原因不明,但单独下载的可以用(2)plsqldev.exe,使用前需要配置tnsnames.ora等,有的机器运行要以管理员身份启动,不是很好用 (3)Navicat Premium,使用方式很简单,配置连接即可,但不是免费软件
3、oracle创建表空间
CREATE TABLESPACE yjptzj DATAFILE 'd:/DB/yjptzj.dbf' SIZE 50M AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED LOGGING PERMANENT EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT MANUAL FLASHBACK ON; CREATE USER yjptzj IDENTIFIED BY "yjpt" DEFAULT TABLESPACE yjptzj QUOTA UNLIMITED ON yjptzj; GRANT "CONNECT" TO yjptzj; GRANT "RESOURCE" TO yjptzj; ALTER USER yjptzj DEFAULT ROLE "CONNECT", "RESOURCE"; grant dba to yjptzj; --delete DROP TABLESPACE yjptzj INCLUDING CONTENTS AND DATAFILES; drop user yjptzj cascade;
4、Oracle设置账户只读某个用户下的表
create user yjptread identified by yjptread default tablespace users; --这两个命令有什么区别? grant connect to yjptread; grant create session to yjptread; grant select any dictionary to jsjyread; grant select any table to jsjyread; grant select any transaction to jsjyread; grant select any sequence to jsjyread; select username,default_tablespace from dba_users; alter user jsjyread default tablespace GK_BASIC; grant create session to jsjyread; grant select_catalog_role to jsjyread; grant select on tablename to username; revoke select any table from jsjyread; revoke select_catalog_role from jsjyread; select 'grant select on '||table_name||' to jsjyread;' from user_tables;
5、EXPDP
EXPDP scott/tiger directory=exp_dir dumpfile=bAbb.dmp EXCLUDE=TABLE:\"IN\(\'EMP\',\'DEPT\'\)\" EXPDP USERID='yjpthb/yjpthb@orcl as sysdba' schemas=yjpthb directory=DATA_PUMP_DIR dumpfile=yjpthb.dmp logfile=yjpthb.log expdp yjptzj/yjptzj directory=DATA_PUMP_DIR dumpfile=yjptzj.dmp logfile=yjptzj.log exclude=table:\"in\(\'T_YJPT_BLOB\'\)\" expdp yjptpro/yjptpro directory=DATA_PUMP_DIR dumpfile=yjptpro.dmp logfile=yjptpro.log exclude=table:\"in\(\'T_YJPT_BLOB\'\)\"
操作模式
(1) 全库模式
导入或者导出整个数据库,对应impdp/expdp命令中的full参数,只有拥有dba或者 exp_full_database和imp_full_database权限的用户才能执行。
(2)Schema模式
导出或导入Schema下的自有对象,对应impdp/expdp命令中的Schema参数,这是默认的操作模式。 如果拥有dba或者 exp_full_database和imp_full_database权限的用户执行的话,就可以导出或导入多个Schema中的对象。
(3)表模式
导出指定的表或者表分区(如果有分区的话)以及依赖该表的对象(如该表的索引,约束等,不过前提是这些对象在同一个 Schema中,或者执行的用户有相应的权限)。对应impdp/expdp命令中的Table参数。
(4)表空间模式
导出指定的表空间中的内容。对应impdp/expdp中的Tablespaces参数,这种模式类似于表模式和 Schema模式的补充。
(5) 传输表空间模式
对应impdp/expdp中的Transport_tablespaces参数。这种模式与前面几种模式最显著的区 别是生成的Dump文件中并不包含具 体的逻辑数据,而只导出相关对象的元数据(即对象的定义,可以理解成表的创建语句),逻辑数据仍然在表空间的数据文件中,导出时需要将元数据和数据文件同 时复制到目标端服务器。
这种导出方式效率很高,时间开销主要是花在复制数据文件产生的I/O上。expdp执行传输表空间模式的导出,用户必须 拥有 exp_full_database角色或者DBA角色。而通过传输表空间模式导入时,用户必须拥有imp_full_database角色或者DBA角 色。
步骤一:创建目录
create directory dump_dir as 'e:\backup';
步骤二:授予操作目录权限
grant read,write on directiory dump_dir to scott;
6、用expdp导出数据
1)导出用户
expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp directory=dump_dir;
2)导出表
expdp scott/tiger@orcl tables=emp,dept dumpfile=expdp.dmp directory=dump_dir;
3)按查询条件导
expdp scott/tiger@orcl directory=dump_dir dumpfile=expdp.dmp tables=emp query='where deptno=20';
4)按表空间导
expdp system/manager@orcl directory=dump_dir dumpfile=tablespace.dmp tablespaces=temp,example;
5)导整个数据库
expdp system/manager@orcl directory=dump_dir dumpfile=full.dmp full=y;
7、用impdp导入数据
1)导入用户(从用户scott导入到用户scott)
impdp scott/tiger@orcl directory=dump_dir dumpfile=expdp.dmp schemas=scott;
2)导入表(从scott用户中把表dept和emp导入到system用户中)
impdp system/manager@orcl directory=dump_dir dumpfile=expdp.dmp tables=scott.dept,scott.emp remap_schema=scott:system;
3)导入表空间
impdp system/manager@orcl directory=dump_dir dumpfile=tablespace.dmp tablespaces=example;
4)导入数据库
impdb system/manager@orcl directory=dump_dir dumpfile=full.dmp full=y;
5)追加数据
impdp system/manager@orcl directory=dump_dir dumpfile=expdp.dmp schemas=system table_exists_action
8、建表、序列、触发器示例
CREATE TABLE "CFP"."RELAY" ( "KEYID" NUMBER(19,0) NOT NULL ENABLE primary key, "COMPANYNUMBER" VARCHAR2(100 BYTE), "SUPPLIERKEYID" NUMBER(19,0) NOT NULL ENABLE, "SPECIFICATION" VARCHAR2(100 BYTE), "SERIES" VARCHAR2(100 BYTE), "RETEDTEMP" NUMBER(29,2), "EVNTEMP" NUMBER(29,2), "RATEDLOADCURRENT" NUMBER(29,2), "QCSTANDARD" VARCHAR2(100 BYTE), "APPENVIRONMENT" VARCHAR2(100 BYTE), "RATEDCONTACTCURRENT" NUMBER(29,2), "APPTYPE" VARCHAR2(50 BYTE), "STRUCTURETYPE" VARCHAR2(50 BYTE), "BASEFAILURERATE" NUMBER(29,2), "QUALITYCOEFFICIENT" NUMBER(29,2), "APPEVNCOEFFICIENT" NUMBER(29,2), "APPSTRUCTURECOEFFICIENT" NUMBER(29,2) ) CREATE SEQUENCE S_RELAY START WITH 1 INCREMENT BY 1 MINVALUE 1 NOMAXVALUE NOCACHE ORDER; CREATE TRIGGER AUTOROWNUM_RELAY BEFORE INSERT ON RELAY FOR EACH ROW BEGIN SELECT S_RELAY.NEXTVAL INTO:NEW.KEYID FROM DUAL; END;
9、密码会过期的问题
--oracle密码过期问题解决:
--查看用户的proifle是哪个,一般是default:
SELECT username,PROFILE FROM dba_users;
--查看指定概要文件(如default)的密码有效期设置:
SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
--将密码有效期由默认的180天修改成“无限制”:
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
--修改之后不需要重启动数据库,会立即生效。
alter user smsc identified by <原来的密码> ----不用换新密码
10、oracle设置字符集
SHUTDOWN IMMEDIATE; STARTUP MOUNT EXCLUSIVE; ALTER SYSTEM ENABLE RESTRICTED SESSION; ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; ALTER SYSTEM SET AQ_TM_PROCESSES=0; ALTER DATABASE OPEN; ALTER DATABASE CHARACTER SET ZHS16GBK; SHUTDOWN immediate; startup; SHUTDOWN IMMEDIATE; STARTUP MOUNT EXCLUSIVE; ALTER SYSTEM ENABLE RESTRICTED SESSION; ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; ALTER SYSTEM SET AQ_TM_PROCESSES=0; ALTER DATABASE OPEN; ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK; SHUTDOWN immediate; startup;
11、ORACLE data×tamp
timestamp——>date: select to_date(to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') from dual date ——>timestamp: select to_timestamp(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') from dual trunc(86400*(date2-date1))- 60*(trunc((86400*(date2-date1))/60)) seconds, trunc((86400*(date2-date1))/60)- 60*(trunc(((86400*(date2-date1))/60)/60)) minutes, trunc(((86400*(date2-date1))/60)/60)- 24*(trunc((((86400*(date2-date1))/60)/60)/24)) hours, trunc((((86400*(date2-date1))/60)/60)/24) days, trunc(((((86400*(date2-date1))/60)/60)/24)/7) weeks --小时差 select (to_date('2017-03-31 00:00:00','yyyy-mm-dd hh24:mi:ss')-sysdate)*24 from dual; select to_char((to_timestamp('2018-04-30 00:00:00','yyyy-mm-dd hh24:mi:ss')-systimestamp),'yyyy-mm-dd hh24:mi:ss') from dual; select systimestamp from dual; --天数差 select trunc(to_date('2017-03-31 00:00:00','yyyy-mm-dd hh24:mi:ss')-sysdate) from dual;
12、ORACLE 分页查询(使用oracle 提供的rownum, 伪列 ,表中是没有的,是oracle 自带的)
--pageNum pageSize --pageNum from 1 SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM T_YJPT_WXHWGKZYSBD order by ID DESC) A WHERE ROWNUM <= pageNum*pageSize ) WHERE RN >= ((pageNum-1)*pageSize+1) --pageNum from 0 SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM T_YJPT_WXHWGKZYSBD order by ID DESC) A WHERE ROWNUM <= (pageNum+1)*pageSize ) WHERE RN >= (pageNum*pageSize+1)
13、存储过程
(1)表 视图 索引 序列 同义词 存储过程 存储函数 (都是数据库对象)
(2)存储过程和存储函数相同点:完成特定功能的程序
存储过程和存储函数区别:是否用return语句返回值
(3)用CREATE PROCEDURE命令建立存储过程和存储函数
语法:create [or replace] PROCEDURE 过程名(参数列表)
as
PLSQL子程序体。
(4)调用存储过程:1、execute(缩写为exec也可,不是一个sql语句,是一个执行体,执行体调用必须在命令窗口,把这句话当成一个整体,也就是plsql块。sqlplus客户端中可以执行,无法当sql语句执行)
2、begin
sayhelloworld();
sayhelloworld();
end;
可以当sql执行,sqlplus客户端中也可以跑。
3、call sayhelloworld();--(可以当sql执行,sqlplus客户端中也可以跑。)
(5)sqlplus scott/trigger@192.168.56.101:1521/orcl
host cls --清理cmd
set serveroutput on;
(6)创建存储函数的语法:
create [or replace] FUNCTION 函数名(参数列表)
return 函数值类型
AS
PLSQL子程序体。
(7)原则:如果只有一个返回值,用存储函数;否则,就用存储过程。