oracle物化视图

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle物化视图

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

一、创建物化视图主要语法

 create materialized view [view_name]
     {TABLESPACE (表空间名)}--保存表空间
     {BUILD [DEFERRED|IMMEDIATE(默认值)]} --延迟刷新还是立即刷新
refresh [fast|complete|force]
[
on [commit|demand] |
start with (start_time) next (next_time)
]
as
{创建物化视图用的查询语句}

二、相关参数说明
创建物化视图主要选项说明
创建物化视图时可以指定多种选项,下面对几种主要的选项进行简单说明:

名称 ON PREBUILD TABLE
描述 将已经存在的表注册为实体化视图。同时还必须提供描述创建该表的查询的 SELECT 子句。可能无法始终保证查询的精度与表的精度匹配。为了克服此问题,应该在规范中包含 WITH REDUCED PRECISION 子句。
名称 Build Clause 创建方式
描述 包括BUILD IMMEDIATE和BUILD DEFERRED两种
取值 BUILD IMMEDIATE 在创建实体化视图的时候就生成数据
BUILD DEFERRED 在创建时不生成数据,以后根据需要在生成数据
默认 BUILD IMMEDIATE
名称 Refresh 刷新子句
描述 当基表发生了DML操作后,实体化视图何时采用哪种方式和基表进行同步
语法
[refresh [fast | complete | force]
         [on demand | commit]
         [start with date]
         [next date]
         [with {primary key | rowid}]
]
取值 FAST 采用增量刷新,只刷新自上次刷新以后进行的修改
COMPLETE 对整个物化视图进行完全的刷新
FORCE(默认) Oracle在刷新时会去判断是否可以进行快速刷新,如果可以则采用Fast方式,否则采用Complete的方式,Force选项是默认选项
ON DEMAND(默认) 物化视图在用户需要的时候进行刷新,可以手工通过DBMS_MVIEW.REFRESH等方法来进行刷新,也可以通过JOB定时进行刷新
ON COMMIT 实体化视图在对基表的DML操作提交的同时进行刷新
START WITH 第一次刷新时间
NEXT 刷新时间间隔
WITH PRIMARY KEY(默认) 生成主键实体化视图,也就是说实体化视图是基于表的主键,而不是ROWID(对应于ROWID子句)。 为了生成PRIMARY KEY子句,应该在表上定义主键,否则应该用基于ROWID的实体化视图。主键实体化视图允许识别实体化视图表而不影响实体化视图增量刷新的可用性
WITH ROWID 只有一个单一的主表,不能包括下面任何一项:
●Distinct
●聚合函数
●Group by
●子查询
●连接
●SET操作
名称 Query Rewrite 查询重写
描述 包括ENABLE QUERY REWRITE和DISABLE QUERY REWRITE两种。分别指出创建的实体化视图是否支持查询重写。查询重写是指当对实体化视图的基表进行查询时,Oracle会自动判断能否通过查询实体化视图来得到结果,如果可以,则避免了聚集或连接操作,而直接从已经计算好的实体化视图中读取数据
取值 ENABLE QUERY REWRITE 支持查询重写
DISABLE QUERY REWRITE 不支持查询重写
默认 DISABLE QUERY REWRITE

创建实体化试图日志主要选项说明
如果需要进行快速刷新,则需要建立实体化视图日志。实体化视图日志根据不同实体化视图的快速刷新的需要,可以建立为ROWID或PRIMARY KEY类型的。还可以选择是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。

名称 WITH Clause
描述
取值 OBJECT ID 如果是对象实体化视图(object materialized view),则只能采用该方式
PRIMARY KEY
ROWID
SEQUENCE
默认 PRIMARY KEY

三、举例说明
1、简单示例

 create materialized view MV_except_pattern_orders
refresh Complete on demand
      start with to_date('2010-11-06 13:20:51','YYYY-MM-DD HH24:MI:SS') next sysdate+1/(24*60)
as
    select * from v_except_pattern_orders

2、带日志物化视图

--创建物化视图日志
create materialized view log on table1
tablespace ts_data --日志保存在特定的表空间
with rowid;
--创建物化视图主体
create materialized view MV_LVY_LEVYDETAILDATA
TABLESPACE ZGMV_DATA --保存表空间
BUILD DEFERRED --延迟刷新不立即刷新
refresh force --如果可以快速刷新则进行快速刷新,否则完全刷新
on demand --按照指定方式刷新
start with to_date('24-11-2005 18:00:10', 'dd-mm-yyyy hh24:mi:ss') --第一次刷新时间
next TRUNC(SYSDATE+1)+18/24 --刷新时间间隔
as
as select * from table1;

oracle查看object对象使用空间

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle查看object对象使用空间

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1、表空间大小

Select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name order by Sum(bytes)/1024/1024 desc;

2、表占用空间

select segment_name, sum(bytes)/1024/1024 Mbytese from user_segments where segment_type='TABLE'  group by segment_name order by segment_name;
Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name order by Sum(bytes)/1024/1024 desc;

3、索引占用空间

select segment_name, sum(bytes)/1024/1024 Mbytese from user_segments where segment_type='INDEX'  group by segment_name order by segment_name;

4、数据文件使用情况

select a.tablespace_name,
       round(a.bytes / 1024 / 1024, 0)"总空间",
       round((decode(b.bytes, null, 0, b.bytes)) / 1024 / 1024, 0)"使用空间",
       round((decode(b.bytes, null, 0, b.bytes)) / a.bytes * 100, 1)"使用率",
       c.file_name,
       c.status
  from sys.sm$ts_avail a, sys.sm$ts_free b, dba_data_files c
 where a.tablespace_name = b.tablespace_name(+)
   and a.tablespace_name = c.tablespace_name
 order by a.tablespace_name;
-----------------------------------------------------------------------
select b.file_id 文件ID,
       b.tablespace_name 表空间,
       b.file_name 物理文件名,
       b.bytes / 1024 / 1024 大小M,
       c.max_extents / 1024 / 1024 可扩展数M,
       b.bytes / 1024 / 1024 + c.max_extents / 1024 / 1024 总大小M,
       trunc((b.bytes - sum(nvl(a.bytes, 0))) / 1024 / 1024)  已使用M,
       trunc(sum(nvl(a.bytes, 0)) / 1024 / 1024)  剩余M,
       trunc(sum(nvl(a.bytes, 0)) / (b.bytes) * 100, 2)  剩余比
  from dba_free_space a, dba_data_files b, dba_tablespaces c
 where a.file_id = b.file_id
   and b.tablespace_name = c.tablespace_name
 group by b.tablespace_name,
          b.file_name,
          b.file_id,
          b.bytes,
          c.max_extents,
          b.bytes / 1024 / 1024 + c.max_extents / 1024 / 1024
 order by b.file_id;

5、表空间使用统计

select a.tablespace_name,
       a.bytes / 1024 / 1024 "Sum MB",
       (a.bytes - b.bytes) / 1024 / 1024 "used MB",
       b.bytes / 1024 / 1024 "free MB",
       round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "percent_used"
  from (select tablespace_name, sum(bytes) bytes
          from dba_data_files
         group by tablespace_name) a,
       (select tablespace_name, sum(bytes) bytes, max(bytes) largest
          from dba_free_space
         group by tablespace_name) b
 where a.tablespace_name = b.tablespace_name
 order by ((a.bytes - b.bytes) / a.bytes) desc;

DB Console管理

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:DB Console管理

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

今天准备启动linux下的oracle OEM,突然想起来,在win下,有个console相关的进程,想想linux下应该也有类此的东西,然后网上一查,果真有个叫做dbconsole的东西,不过要先执行lsnrctl start
1、执行emctl命令
Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to database unique name.
我想应该是在spfile中没有设置这个参数,然后似乎用export ORACLE_UNQNAME=orcl经行环境变量设置
2、再执行emctl命令,尽然提示
EM Configuration issue. /u01/oracle/xff_orcl not found
然后网上查了下执行emca -config dbcontrol db
然后跟换提示进行相关参数配置
[oracle@xff ~]$ emca -config dbcontrol db
EMCA 开始于 2010-10-3 15:11:12
EM Configuration Assistant, 11.2.0.0.2 正式版
版权所有 (c) 2003, 2005, Oracle。保留所有权利。
输入以下信息:
数据库 SID: orcl
监听程序端口号: 1521
监听程序 ORACLE_HOME [ /u01/oracle ]: /u01/oracle
SYS 用户的口令:
DBSNMP 用户的口令:
SYSMAN 用户的口令:
通知的电子邮件地址 (可选):
通知的发件 (SMTP) 服务器 (可选):
最后提示配置成功
3、通过浏览器
https://xff:1158/em/可以进行正常访问
4、相关命令:
emctl status dbconsole 查看dbconsole状态
emca -repos create创建一个EM资料库
emca -repos recreate重建一个EM资料库
emca -repos drop删除一个EM资料库
emca -config dbcontrol db配置数据库的 Database Control
emca -deconfig dbcontrol db删除数据库的 Database Control配置
emca -reconfig ports 重新配置db control和agent的端口
emctl start dbconsole启动EM console服务,使用前需要先设置ORACLE_SID环境变量
emctl stop dbconsole停止EM console服务,使用前需要先设置ORACLE_SID环境变量
注:通过查看$ORACLE_HOME/install/portlist.ini 文件可以知道当前dbcontrol正在使用的端口,默认dbcontrol http端口1158,agent端口3938。如果要重新配置端口,可以使用如下命令:
emca -reconfig ports -dbcontrol_http_port 1159
emca -reconfig ports -agent_port 3939

安装rlwrap(让sqlplus使用如同在win dos下)

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:安装rlwrap(让sqlplus使用如同在win dos下)

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

在linux中,使用sqlplus不能使用上线键,有些情况下连backspace键都不能使用,给通过sqlplus对oracle的管理带来了很多不便,使用rlwrap可以解决这个问题,给你一个和win下dos一样的操作感觉
官网:http://utopia.knoware.nl/~hlub/uck/rlwrap/
1、在Ubuntu中安装rlwrap
1)sudo apt-get install rlwrap
2)在/etc/profile文件中添加
alias sqlplus=’rlwrap sqlplus’
alias rman=’rlwrap rman’
2、在centos中安装rlwrap
1)wget http://utopia.knoware.nl/~hlub/uck/rlwrap/rlwrap-0.37.tar.gz
2)tar -xzvf rlwrap-0.37.tar.gz
3)./configure
4)make
5)make install
6)在/home/oracle/.bash_profile中添加
alias sqlplus=’rlwrap sqlplus’
alias rman=’rlwrap rman’

oracle之data guard(2)——物理standby和primary切换

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle之data guard(2)——物理standby和primary切换

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

一、primary库上操作
1、查看primary库转换状态
select switchover_status from v$database
如果是TO STANDBY可以直接进入步骤3
如果是SESSIONS ACTIVE进入步骤2
2、强制把primary设置为standby模式
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
如果更加强制性,则使用
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN NOWAIT;
3、正常方式进入standby模式
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
4、重启数据库,置于mount状态
5、再次查看witchover_status状态
如果为TO PRIMARY ,表示primary切换成standby成功,如果不是请查看配置文件
二、在原standb库上配置
1、查看witchover_status状态
select switchover_status from v$database
如果是TO PRIMARY正常
如果是SESSIONS ACTIVE在2的命令后面加上 WITH SESSION SHUTDOWN ( nowait)
2、standby库切换为primary库
alter database commit to switchover to primary;
3、关闭再打开数据库
shutdown immediate;
startup;
三、测试
在现在的primary库上切换日志,在standby上查看
主库:alter system switch logfile;select name from v$archived_log;
备份库: select name from v$archived_log;
如果两者结果一致,表示切换成功
四、从MAXIMUM PERFORMANCE到MAXIMUM PROTECTION的切换
1、添加standby redo
数量:(maximum number of logfiles for each thread + 1) * maximum number of threads
alter database add standby logfile thread 1 ‘C:\oracle\product\10.2.0\oradata\orcl\redo04.log’ size 50m;
note:和redo log等大,数量每个thread比redo log多一个,最好standby和primary都添加,因为要转换
2、关闭数据库,置于mount状态
log_archive_dest_2修改为
alter system set log_archive_dest_2=’service=orcl lgwr sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=orcl’;
主要是: lgwr sync affirm
3、设置为maximize protection
alter database set standby database to maximize protection;
4、open数据库并测试
测试 主要是通过v$archived_log视图实现
使用select protection_mode from v$database;查看数据库保护状态
五、MAXIMUM PROTECTION模式下primary、standby 库的相互切换
1、在primary库上配置
1)关闭除本操作连接外的所有数据库连接
2)alter database commit to switchover to physical standby;
3)select t.PROTECTION_MODE,t.DATABASE_ROLE from v$database t;

如上图表示成功
2、在standby上操作
1)alter database commit to switchover to physical standby;
2)ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
3)shutdown immedate;startup mount;
4)alter system set log_archive_dest_2=’service=xff lgwr sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=xff’;(修改为同步传输)
5)alter database open;

如上图表示成功

oracle数据库复制

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle数据库复制

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

oracle数据库复制就是对当前的库进行拷贝(使用拷贝库用于测试、还原操作等)
1、本实验规划
使用的是同一个数据库服务器上做的拷贝试验
原数据库oracle_sid=orcl,准备新建数据库oracle_sid=xff,新建的数据库的文件放置符合ofm标准,也就是说,数据文件、控制文件、联机归档日志文件放置oradata/xff下面,一些日志记录文件放置在admin/xff下
2、用户管理方式复制数据库:
1)新建相关文件夹mkdir(省略)
2)准备xff的pfile文件
在orcl数据库中执行create pfile=’c:\orclpfile.txt’ from spfile;
修改orclpfile.txt文件,使用替换法,把所有的orcl替换成xff(替换的时候大致看下哦)
3)准备xff的控制文件
在orcl数据库中执行alter database backup controlfile to trace as ‘c:\b.txt’;
选择Set #2. RESETLOGS case部分,除掉其中的注释,把reuse修改为set处理后的大概结果如下:

CREATE CONTROLFILE set DATABASE "XFF" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\REDO01.LOG'  SIZE 50M,
  GROUP 2 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\REDO02.LOG'  SIZE 50M,
  GROUP 3 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\REDO03.LOG'  SIZE 50M
DATAFILE
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\SYSTEM01.DBF',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\UNDOTBS01.DBF',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\SYSAUX01.DBF',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\USERS01.DBF',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\XFF01.DBF'
CHARACTER SET AL32UTF8
;

4)alter database begin backup;
开始把orcl中的数据库文件,复制到xff的文件夹中
alter database end backup;
5)在dos下执行oradim -new -sid xff -intpwd oracle(建立oracle_sid=xff,并创建用户名为sys,密码为oracle的秘密文件)(删除oradim -DELETE -SID xff )
6)在dos下执行set oracle_sid=xff,因为没有配置tns的相信,手工设置oracle_sid
7)sqlplus sys/oracle as sysdba;连接到xff数据库
8)使用startup pfile=’c:\orclpfile.txt’ nomount 把xff数据库至于nomount状态
9)使用刚刚(3)中准备的创建控制文件的脚步,创建控制文件
10)使用在xff的sqlplus 环境下使用set logsource ‘path’指定归档日志位置(path为归档日志路径),
然后使用recover database using backup controlfile until cancel;
按照提示看看对应的文件是否存在,如果不存在查找下硬盘上是否有该文件,如果都不存在,尝试着使用联机日志文件恢复
11)使用alter database open resetlogs 打开数据库
12)建立临时文件
ALTER TABLESPACE TEMP ADD TEMPFILE ‘C:\ORACLE\PRODUCT\10.2.0\ORADATA\xff\TEMP01.DBF’
SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M
13)配置listener和tns,数据库复制工作完成
3、rman复制数据库
1)备份数据库rman
backup database include current controlfile plus archivelog format=’c:\%U.bak’;
2)创建spfile文件
create spfile=’%oracle_home%\database\spfilexff.ora’ from pfile=’c:\b.txt’;
3)登录xff把数据库设置到nomount模式
4)

run{
set newname for datafile 1 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\SYSTEM01.DBF';
set newname for datafile 2 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\undotbs01.DBF';
set newname for datafile 3 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\sysaux01.DBF';
set newname for datafile 4 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\users01.DBF';
set newname for datafile 5 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\xff01.DBF';
set newname for tempfile 1 to 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\\TE.DBF';
duplicate target database to xff logfile
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\redo01.log' size 10m,
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\redo02.log' size 10m,
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\XFF\redo03.log' size 10m;
}
--note:1、需要加上temp表空间的转换,不然会报错
--2、在运行run之前,要确保在xff中的除本rman之外的所有用户均以退出

其他与用户复制oracle操作一致。和用户操作比起来,这个不用手工创建控制文件,只要创建spfile或者pfile(注意默认路径和名称)就可以了,其他的均有rman帮我们搞定

oracle之shared模式配置

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle之shared模式配置

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1、配置服务器端参数
1.1、必填
dispatchers='(protocol=tcp)(dispatchers=2)’
shared_servers=2
1.2、可选项(均为9i中的默认值)
max_dispatchers=5
max_shared_servers=20
circuits=170
shared_server_sessions=165
2、配置客户端参数
XIFENFEI =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER =SHARED)
(SERVICE_NAME = xifenfei)
)
)
note:
1)DEDICATED为非共享模式,若无指定,默认先用shared
2)shared不能startup、shutdown、backup数据库等操作
3、查看当前会话的服务器模式
select sid,server from v$session where sid in (select sid from v$mystat);
select circuit,dispatcher,status from v$circuit;–只有shared连接记录保存在这个视图中

oracle之数据库全球化(编码)

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle之数据库全球化(编码)

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1、查看数据库字符集

select * from nls_database_parameters where parameter like '%CHARACTERSET';

2、计算字符长度标准(是按照byte还是按照character)

show parameter NLS_LENGTH_SEMANTICS;
select * from nls_database_parameters where parameter = 'NLS_LENGTH_SEMANTICS';
--note:这个只对char和varchar起作用,nchar、nvarchar、nclob长度是按照character计算

3、插入数据,查看其存入数据的16进制内容和编码

create table t(id int,name varchar2(20),name1 nvarchar2(20));
insert into t values(1,'程飞','程飞');
select dump(name,1016),dump(name1,1016) from t;
--结果
Typ=1 Len=6 CharacterSet=AL32UTF8: e7,a8,8b,e9,a3,9e
Typ=1 Len=4 CharacterSet=AL16UTF16: 7a,b,98,de

4、查询客户端nls相关参数信息

select * from nls_session_parameters;

5、配置nls相关参数
主要是配置NLS_LANGUAGE和NLS_TERRITORY或者配置NLS_LANG实现
5.1、设置NLS_LANG(环境变量级别)

或者使用:

set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

5.2、session级别设置:

alter session set nls_date_format='yyyy-mm-dd';
exec sys.dbms_session.set_nls('nls_date_format','dd.mm.yyyy');

5.3、sql语句级别:

select to_char(sysdate,'yyyy_mm_dd hh24:mi:ss',
'nls_date_language=''SIMPLIFIED CHINESE''') from dual;

note:优先级:sql语句级别>session级别>环境变量级别
六、排序
设置nls_sort决定

--拼音排序
alter session set nls_sort=schinese_pinyin_m;select * from orders order by name;
select * from orders order by nlssort(name,'nls_sort=schinese_pinyin_m');
--笔画排序
alter session set nls_sort=schinese_stroke_m;select * from orders order by name;
select * from orders order by nlssort(name,'nls_sort=schinese_stroke_m');
--汉字部首排序
alter session set nls_sort=SCHINESE_RADICAL_M;select * from orders order by name;
select * from orders order by nlssort(name,'nls_sort=SCHINESE_RADICAL_M');
--note:在sql语句级别的排序上可以使用nls_sort后面value可以使用双"'"表示整体

7、相关视图
nls_database_parameters–数据库初始化文件中的nls信息
nls_session_parameters–当前session中的nls信息
v$nls_valid_values–查看CHARACTERSET、SORT、TERRITORY、LANGUAGE中可以设置的相关参数
v$nls_parameters–对nls_database_parameters和nls_session_parameter中的nls信息的补充

oracle之数据导入

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle之数据导入

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

1、inset into select

ALTER TABLE EMP NOLOGGING;--为了使插入时少产生log记录,要修改表,不能直接加nologging

1.1、单线程插入

INSERT /*+ APPEND */ INTO TEST
SELECT * FROM B.TEST;
--加上/*+ APPEND */要比不加这个速度快的多,因为这个直接导入到高水位之后,而且是直接块对块的插入,不用经过复杂的sql转换

1.2、多线程插入

--创建分区表
 create table emp
 (empno number,
 ename varchar2(20))
 partition by hash(empno)
 (partition part1,
 partition part2);
--执行多线程插入
alter session enable parallel dml;
insert /*+ PARALLEL(emp,2) */ into emp
select  OBJECT_ID,TIMESTAMP from all_objects;

2、sql loader
上次服务器被攻击,我导入日志文件使用的是c#程序导入到oracle数据库中
这次使用sql loadr实现
control文件为

load data
infile data.log "str '\n'"
into table gj2
replace
fields terminated by ' '
TRAILING NULLCOLS
(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14)

创建对应表

create table gj2(a1 varchar(10),a2 varchar2(10),
a3 varchar2(100),a4 varchar2(100),a5 varchar2(100),a6 varchar2(100),
a7 varchar2(200),a8 varchar2(100),a9 varchar2(100),a10 varchar2(100),
a11 varchar2(200),a12 varchar2(100),a13 varchar2(100), a14 varchar2(100));

执行sql loader

sqlldr b/b control=c:\abc.txt log=log.tx

这个非常方便,很快就把几十万条记录导入到数据库中了,而且直接提出a1和a2列进行分析就可以得到上次通过程序导入到数据库,然后再通过orcale的正则表达式功能选择出时间和ip地址,相比之下这个简单多了,很好用。
原始数据:

2010-07-02 10:55:02 W3SVC689347672 192.168.10.222 HEAD /index.shtml - 80 - 221.232.180.193 - 403 1 0
2010-07-02 10:55:04 W3SVC689347672 192.168.10.222 HEAD /index.shtml - 80 - 121.35.96.46 - 403 1 0
2010-07-02 10:55:07 W3SVC689347672 192.168.10.222 HEAD /index.shtml - 80 - 119.178.8.242 - 403 1 0
2010-07-02 10:55:13 W3SVC689347672 192.168.10.222 HEAD /index.shtml - 80 - 124.236.72.63 - 403 1 0
2010-07-02 10:55:13 W3SVC689347672 192.168.10.222 HEAD /index.shtml - 80 - 58.60.253.104 - 403 1 0
2010-07-02 10:55:14 W3SVC689347672 192.168.10.222 HEAD /index.shtml - 80 - 120.10.3.64 - 403 1 0
2010-07-02 10:55:18 W3SVC689347672 192.168.10.222 HEAD /index.shtml - 80 - 221.196.165.225 - 403 1 0
2010-07-02 10:55:21 W3SVC689347672 192.168.10.222 GET /index.shtml - 80 - 116.16.159.224 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1) 200 0 64
2010-07-02 10:55:21 W3SVC689347672 192.168.10.222 GET /anlewwwroot.zip - 80 - 120.84.23.2 Mozilla/4.0 404 0 64
2010-07-02 10:55:22 W3SVC689347672 192.168.10.222 GET /index.shtml - 80 - 122.226.148.190 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1) 200 0 64
2010-07-02 10:55:22 W3SVC689347672 192.168.10.222 GET /index.shtml - 80 - 122.226.148.190 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1) 200 0 64
2010-07-02 10:55:22 W3SVC689347672 192.168.10.222 GET /index.shtml - 80 - 121.204.33.120 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1) 200 0 64
2010-07-02 10:55:22 W3SVC689347672 192.168.10.222 GET /index.shtml - 80 - 202.30.113.101 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1) 200 0 64
2010-07-02 10:55:22 W3SVC689347672 192.168.10.222 GET /index.shtml - 80 - 58.101.51.214 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1) 200 0 64
2010-07-02 10:55:22 W3SVC689347672 192.168.10.222 GET /index.shtml - 80 - 114.41.216.107 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1) 200 0 64
2010-07-02 10:55:22 W3SVC689347672 192.168.10.222 GET /index.shtml - 80 - 58.101.51.214 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1) 200 0 64
2010-07-02 10:55:22 W3SVC689347672 192.168.10.222 GET /index.shtml - 80 - 114.41.216.107 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+SV1) 200 0 64

使用sql loader处理后结果:

以前使用c#导入,oracle正则表达式处理日志为:
服务器遭攻击,oracle分析日志

oracle之user 管理

联系:手机/微信(+86 17813235971) QQ(107644445)

标题:oracle之user 管理

作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]

一、profile管理
1、profile创建

create profile fei_profile limit
 sessions_per_user 1
 cpu_per_session 30000
 cpu_per_call 600
 connect_time 300
 idle_time 60
 logical_reads_per_session 300
 logical_reads_per_call 100
 failed_login_attempts 2
 password_life_time 1
 password_reuse_time 3
 password_reuse_max 10
 password_lock_time 1;

2、修改profile

alter profile fei_profile limit
connect_time 400
idle_time 200;

3、删除profile

drop profile fei_profile;

二、创建用户
1、准备工作

--查看表空间
select tablespace_name,contents from dba_tablespaces;
--查看默认临时表空间
select * from database_properties where property_name like '%TEMP_TABLE%';

2、创建用户
2.1数据库认证

create user abc
identified by abc
default tablespace abc
temporary tablespace temp
quota 10m on abc
quota 5m on users
password expire
account lock;

2.2、操作系统认证

--查看os_authent_prefix(前缀+操作系统用户名=数据库登陆名)
show parameter os_aut--查看结果为:OPS$
--创建用户
create user OPS$ff identified externally default tablespace abc;

三、修改用户

alter user abc account unlock;

四、删除用户

drop user abc cascade;--表示删除该用户下的所有objects

五、授权和回收
5.1、system级别权限

grant create session,create table to abc with admin option;--可以传递该授权(续传的权限不会被回收)
revoke create session,create table from abc;
grant create session,create table to fei identified by fei;
--用户不存在直接创建该用户,存在则修改用户密码

5.1.1权限类型

select * from session_privs;--查看本用户所具有的权限
ALTER SYSTEM
AUDIT SYSTEM
CREATE SESSION
ALTER SESSION
RESTRICTED SESSION
CREATE TABLESPACE
ALTER TABLESPACE
MANAGE TABLESPACE
DROP TABLESPACE
UNLIMITED TABLESPACE
CREATE USER
BECOME USER
ALTER USER
DROP USER
CREATE ROLLBACK SEGMENT
ALTER ROLLBACK SEGMENT
DROP ROLLBACK SEGMENT
CREATE TABLE
CREATE ANY TABLE
ALTER ANY TABLE
BACKUP ANY TABLE
DROP ANY TABLE
LOCK ANY TABLE
COMMENT ANY TABLE
SELECT ANY TABLE
INSERT ANY TABLE
UPDATE ANY TABLE
DELETE ANY TABLE
CREATE CLUSTER
CREATE ANY CLUSTER
ALTER ANY CLUSTER
DROP ANY CLUSTER
CREATE ANY INDEX
ALTER ANY INDEX
DROP ANY INDEX
CREATE SYNONYM
CREATE ANY SYNONYM
DROP ANY SYNONYM
SYSDBA
SYSOPER
CREATE PUBLIC SYNONYM
DROP PUBLIC SYNONYM
CREATE VIEW
CREATE ANY VIEW
DROP ANY VIEW
CREATE SEQUENCE
CREATE ANY SEQUENCE
ALTER ANY SEQUENCE
DROP ANY SEQUENCE
SELECT ANY SEQUENCE
CREATE DATABASE LINK
CREATE PUBLIC DATABASE LINK
DROP PUBLIC DATABASE LINK
CREATE ROLE
DROP ANY ROLE
GRANT ANY ROLE
ALTER ANY ROLE
AUDIT ANY
ALTER DATABASE
FORCE TRANSACTION
FORCE ANY TRANSACTION
CREATE PROCEDURE
CREATE ANY PROCEDURE
ALTER ANY PROCEDURE
DROP ANY PROCEDURE
EXECUTE ANY PROCEDURE
CREATE TRIGGER
CREATE ANY TRIGGER
ALTER ANY TRIGGER
DROP ANY TRIGGER
CREATE PROFILE
ALTER PROFILE
DROP PROFILE
ALTER RESOURCE COST
ANALYZE ANY
GRANT ANY PRIVILEGE
CREATE MATERIALIZED VIEW
CREATE ANY MATERIALIZED VIEW
ALTER ANY MATERIALIZED VIEW
DROP ANY MATERIALIZED VIEW
CREATE ANY DIRECTORY
DROP ANY DIRECTORY
CREATE TYPE
CREATE ANY TYPE
ALTER ANY TYPE
DROP ANY TYPE
EXECUTE ANY TYPE
UNDER ANY TYPE
CREATE LIBRARY
CREATE ANY LIBRARY
ALTER ANY LIBRARY
DROP ANY LIBRARY
EXECUTE ANY LIBRARY
CREATE OPERATOR
CREATE ANY OPERATOR
ALTER ANY OPERATOR
DROP ANY OPERATOR
EXECUTE ANY OPERATOR
CREATE INDEXTYPE
CREATE ANY INDEXTYPE
ALTER ANY INDEXTYPE
DROP ANY INDEXTYPE
UNDER ANY VIEW
QUERY REWRITE
GLOBAL QUERY REWRITE
EXECUTE ANY INDEXTYPE
UNDER ANY TABLE
CREATE DIMENSION
CREATE ANY DIMENSION
ALTER ANY DIMENSION
DROP ANY DIMENSION
MANAGE ANY QUEUE
ENQUEUE ANY QUEUE
DEQUEUE ANY QUEUE
CREATE ANY CONTEXT
DROP ANY CONTEXT
CREATE ANY OUTLINE
ALTER ANY OUTLINE
DROP ANY OUTLINE
ADMINISTER RESOURCE MANAGER
ADMINISTER DATABASE TRIGGER
MERGE ANY VIEW
ON COMMIT REFRESH
EXEMPT ACCESS POLICY
RESUMABLE
SELECT ANY DICTIONARY
DEBUG CONNECT SESSION
DEBUG ANY PROCEDURE
FLASHBACK ANY TABLE
GRANT ANY OBJECT PRIVILEGE
CREATE EVALUATION CONTEXT
CREATE ANY EVALUATION CONTEXT
ALTER ANY EVALUATION CONTEXT
DROP ANY EVALUATION CONTEXT
EXECUTE ANY EVALUATION CONTEXT
CREATE RULE SET
CREATE ANY RULE SET
ALTER ANY RULE SET
DROP ANY RULE SET
EXECUTE ANY RULE SET
EXPORT FULL DATABASE
IMPORT FULL DATABASE
CREATE RULE
CREATE ANY RULE
ALTER ANY RULE
DROP ANY RULE
EXECUTE ANY RULE
ANALYZE ANY DICTIONARY
ADVISOR
CREATE JOB
CREATE ANY JOB
EXECUTE ANY PROGRAM
EXECUTE ANY CLASS
MANAGE SCHEDULER
SELECT ANY TRANSACTION
DROP ANY SQL PROFILE
ALTER ANY SQL PROFILE
ADMINISTER SQL TUNING SET
ADMINISTER ANY SQL TUNING SET
CREATE ANY SQL PROFILE
EXEMPT IDENTITY POLICY
MANAGE FILE GROUP
MANAGE ANY FILE GROUP
READ ANY FILE GROUP
CHANGE NOTIFICATION
CREATE EXTERNAL JOB
--note:如果授权select any table 在默认情况下不能访问数据字典(O7_DICTIONARY_ACCESSIBILITY=false)
--如果修改O7_DICTIONARY_ACCESSIBILITY=true则可以访问数据字典

5.2、object级别授权与回收

grant select,update,delete on abc.abc_a to abc with grant option;--权限可以传递(如果被回收,续传下去的权限一并回收)
grant all on fei_a to abc;--把fei_a的所有相关操作授权给abc
revoke  select,update,delete on abc.abc_a from abc;
--note:update,insert可以指定表的列,而select不行,只能通过view实现限制功能

六、role的管理
6.1、role的创建

create role r_a;
create role r_b identified by r_b;

6.2/授权

grant create session to r_a;
grant create table to r_b;
grant r_a,r_b to b;--b为用户,把role授权给用户


6.3、查看role相关信息

select * from role_tab_privs where  ROLE LIKE 'R_%';
SELECT * FROM ROLE_SYS_PRIVS WHERE ROLE LIKE 'R_%';
SELECT * FROM ROLE_ROLE_privs where role like 'R_%';

6.4、设置default role 和enabl/disable role

alter user b default role r_a;
set role r_a,r_b identified by r_b;
--使用b用户登录,然后enable role r_a,r_b(注意密码)
--没有在set中写出来的role,表似乎disable