oracle数据库
Posted HQ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle数据库相关的知识,希望对你有一定的参考价值。
目录:
账号:sqlplus
密码:as sysdba
create user 用户名 identified by 密码
赋予用户connect连接数据库,resource创建实体但是没有创建数据库结构权限,dba赋予用户所有权限
grant connect,resource,dba to 用户名
其他权限
grant execute on sys.dbms_crypto to 用户名 with grant option;
grant execute on SYS.DBMS_AQADM to 用户名 with grant option;
grant execute on SYS.DBMS_AQELM to 用户名 with grant option;
grant execute on SYS.DBMS_AQ_IMPORT_INTERNAL to 用户名 with grant option;
grant execute on SYS.DBMS_DEFER_IMPORT_INTERNAL to 用户名;
grant execute on SYS.DBMS_REPCAT to 用户名;
grant execute on SYS.DBMS_RULE_EXIMP to 用户名 with grant option;
grant execute on SYS.DBMS_SQL to 用户名;
grant execute on SYS.DBMS_SYS_ERROR to 用户名;
grant execute on SYS.DBMS_SYS_SQL to 用户名;
grant execute on SYS.DBMS_TRANSFORM_EXIMP to 用户名 with grant option;
grant select, insert, update, delete, references, alter, index on SYS.INCEXP to 用户名;
grant select, insert, update, delete, references, alter, index on SYS.INCFIL to 用户名;
grant select, insert, update, delete, references, alter, index on SYS.INCVID to 用户名;
grant execute on SYS.SYS_GROUP to 用户名;
grant select on WMSYS.WM$UDTRIG_INFO to 用户名;
grant aq_administrator_role to 用户名 with admin option;
grant dba to NEWUSER123 with admin option;
grant sales_history_role to 用户名 with admin option;
grant students to 用户名 with admin option;
grant unlimited tablespace to 用户名 with admin option;
导入导出dmp文件,在cmd运行
导出
exp 账号/密码@127.0.0.1/orcl file=导出文件名.dmp full=y
导入
imp epm/epm@127.0.0.1/orcl file=D:\\doudianwork\\lq.dmp full=y
1.oracle11g导出
EXPDP USERID=\'账号/密码@orcl as sysdba\' schemas=账号 directory=DATA_PUMP_DIR dumpfile=导出文件名.dmp logfile=导出日志名.log version=10.2.0.1.0 (这是导出成数据库版本号)
导出的文件在oracle11g安装的盘的app\\ASUS\\admin\\orcl\\dpdump
2.oracle10导入
导入的时候将要导入的.dmp文件放入oracle10g的安装盘的pp\\ASUS\\admin\\orcl\\dpdump文件夹下
IMPDP USERID=\'账号/密码@orcl as sysdba\' schemas=账号 directory=DATA_PUMP_DIR dumpfile=导入的文件名.dmp logfile=导入的日志名.log version=10.2.0.1.0 (导入的版本号)
SELECT \'DELETE FROM \'|| table_name || \';\' FROM USER_TABLES ORDER BY TABLE_NAME;
SELECT R.FIRST_LOAD_TIME,R.SQL_TEXT,R.* FROM V$SQLAREA R WHERE R.SQL_TEXT LIKE \'%ABOUT YOUR SQL%\' ORDER BY R.FIRST_LOAD_TIME DESC
2.以当前时间为准查询125分钟之前的数据快照
SELECT * FROM 表名 AS OF TIMESTAMP SYSDATE - 125 / 1440
3.恢复数据
1.启动表的row movement特性 ALTER TABLE 表名 ENABLE ROW MOVEMENT; 2.闪回指定时间的快照 FLASHBACK TABLE 表名 TO TIMESTAMP TO_TIMESTAMP(\'2018-04-23 16:06:00\',\'yyyy-mm-dd hh24:mi:ss\'); 3.关闭表的row movement特性 ALTER TABLE 表名 DISABLE ROW MOVEMENT;
4.恢复删除的表(通过TRUNCATE语句删除的表无法闪回)
FLASHBACK TABLE 表名 TO BEFORE DROP;
create sequence 序列名称 increment by 1 每次增长多少 start with 1 从几开始 minvalue 1 最小值 maxvalue 999999999 最大值 cycle/no cycle 序列到达最大值之后怎么办,一般去cycle cache 20 需要不需要使用缓存,就是一次生成多少个序列的值,如果生成了多个序列值,如果缓存中有数据, 就 不需要查询缓存了
查询序列
select 序列名.currval from dual //取当前值 select 序列名.nextval form dual //取下一值
oracle查询有一个优化,那就是查询过一次的数据他会产生缓存
使用索引的原则:
1.大数据才创建索引
2.为经常用到的列创建索引
3.索引的层数不要超过4层,也就是 on 表名(列名1,列名2) 这里的列明不要超过4个,因为索引太多也会拖慢检索速度
4.表的主键自带索引
多列的索引就是复合索引
创建索引
create index 索引名 on 表名(列明)
//如果age是空值就为1 select nvl(age,1) from table
select concat(\'年龄\',age) from table
或
select \'年龄\'||age from table
in是输入,out是输出
as 那是定义变量用的
create or replace proceduer 存储过程名(参数名 in或out 参数类型)
as 变量名 变量类型
begin
执行的操作
end;
例子
create or replace proceduer test(ids in number) as lizi number begin select value into lizi from tableName where id=ids //这样写可以将查询的值赋给声明的变量 update tableName set value=\'1000\' where id=ids end;
in输入,out输出
as 定义变量用的,定义的变量类型要和返回的类型一致
create or replace function 方法名(参数 in|out 类型) return 参数类型 as 变量名称 变量类型 begin 执行的操作 return 变量名;//返回的变量类型要和return那定义的类型一样 end;
例子
create or replace function sc(ids in number) return varchar as aa varchar begin select value into aa from emp where id=ids return aa; end;
out的用法例子
创建函数 create or replace proceduer test(id out number) as begin select id into id from table end; 执行函数 declare id number;//声明变量获得值 begin test(id); dbms_output.put_line(id);//这个是输出语句 end;
删除视图中的数据会影响基本表,但是删除整个视图不会对基本表产生影响
闪回删除基本表,视图也会恢复
创建视图
create view 视图名 as 查询的sql语句
创建只读视图
create or replace view 视图名 as sql语句
1.显示回滚:rollback
oracle能回滚主要是因为实例池
oracle的事物隔离级别有两种:1.read committed 和 serializable
设置事物隔离级别为serializable:
set transaction isolation level serializable;
运算符:
等于:=、<、<=、>、>=、<> 包含:in、not in、 exists、not exists 范围:between...and、not between....and 匹配测试:like、not like Null测试:is null、is not null 布尔链接:and、or、not
通配符
%(百分号): 用来表示任意数量的字符,或者可能根本没有字符。 _(下划线): 表示确切的未知字符。 ?(问号): 用来表示确切的未知字符。 #(井号): 用来表示确切的阿拉伯数字,0到9。 [a-d](方括号):用来表示字符范围,在这里是从a到d
常用符号
单引号:单引号将文本和字符和日期括起来 双引号:双引号被用来将包含特定字符或者空格的列别名括起来。双引号还被用来将文本放入日期格式 &符号:&号在oracle中常来指出一个变量,例如:&fox 这就声明fox是一个变量,当单&声明变量的时候,每次看见这个变量都要给他赋一个值,而双&号声明的时候,只需要在声明的时候赋一次值就行例如:&&fox,如果想要关闭&号特性,将&号当为普通的符号使用,需要在oracle的命令窗口运行: set define off 命令 单&相当于var,双&相当于let 双竖线||:表示字符串连接函数,就像java的+号 星号*:表示0个或任意多个字符。 := :赋值语句,如 name :=\'admin\' : :变量绑定
得到天 select (to_date( t.A,\'yyyy-mm-dd hh24:mi:ss\')- to_date( t.B,\'yyyy-mm-dd hh24:mi:ss\')) from table t 得到小时 select (to_date( t.A,\'yyyy-mm-dd hh24:mi:ss\')- to_date( t.B,\'yyyy-mm-dd hh24:mi:ss\'))*24 from table t 得到分 select (to_date( t.A,\'yyyy-mm-dd hh24:mi:ss\')- to_date( t.B,\'yyyy-mm-dd hh24:mi:ss\'))*24*60 from table t 得到秒 select (to_date( t.A,\'yyyy-mm-dd hh24:mi:ss\')- to_date( t.B,\'yyyy-mm-dd hh24:mi:ss\'))*24*60*60 from table t 原文链接:https://blog.csdn.net/u010050174/article/details/79459664
以上是关于oracle数据库的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 数据库 - 使用UEStudio修改dmp文件版本号,解决imp命令恢复的数据库与dmp本地文件版本号不匹配导致的导入失败问题,“ORACLE error 12547”问题处理(代码片段
Client / Server Interoperability Support Matrix for Different Oracle Versions (Doc ID 207303.1)(代码片段
Oracle数据库从RMAN备份集片段还原指定单个归档日志进行日志挖掘分析
续:纠正:ubuntu7.04可以安装,而且完美的安装 ! for《Oracle-10.2.0.1,打补丁10.2.0.5:在 debian 版本4不含4以上,及 ubuntu 7.04不含(代码片段