显示标签为“Oracle”的博文。显示所有博文
显示标签为“Oracle”的博文。显示所有博文

2011年3月8日星期二

統計情報自動取得

統計情報自動取得について調べる

1.実行ジョブについて

SQL> col JOB_NAME for a30
SQL> col SCHEDULE_NAME for a40
SQL> select JOB_NAME ,SCHEDULE_NAME from DBA_SCHEDULER_JOBS;

JOB_NAME SCHEDULE_NAME
------------------------------ ----------------------------------------
AUTO_SPACE_ADVISOR_JOB MAINTENANCE_WINDOW_GROUP
GATHER_STATS_JOB MAINTENANCE_WINDOW_GROUP
FGR$AUTOPURGE_JOB
PURGE_LOG DAILY_PURGE_SCHEDULE

2.WINDOW_GROUP詳細を調べる

SQL> col WINDOW_GROUP_NAME for a30
SQL> col WINDOW_NAME for a20
SQL> select WINDOW_GROUP_NAME ,WINDOW_NAME from DBA_SCHEDULER_WINGROUP_MEMBERS;

WINDOW_GROUP_NAME WINDOW_NAME
------------------------------ --------------------
MAINTENANCE_WINDOW_GROUP WEEKNIGHT_WINDOW
MAINTENANCE_WINDOW_GROUP WEEKEND_WINDOW

3.WINDOW詳細を調べる
SQL> col WINDOW_NAME for a20
SQL> col REPEAT_INTERVAL for a80
SQL> col DURATION for a30
SQL> select WINDOW_NAME ,REPEAT_INTERVAL ,DURATION from DBA_SCHEDULER_WINDOWS;

WINDOW_NAME REPEAT_INTERVAL DURATION
-------------------- -------------------------------------------------------------------------------- ------------------------------
WEEKNIGHT_WINDOW freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=22;byminute=0; bysecond=0 +000 08:00:00
WEEKEND_WINDOW freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0 +002 00:00:00



参照:http://d.hatena.ne.jp/nijimass/20080619/1213878812

2011年2月23日星期三

ORACLE RAC学习记录

Oracle RAC主要需要解决的问题就是如何进行协作操作。

主要分为

1.存储介质共享
2.各个实例之间的协作操作需要的数据共享
3.某部分结点出现问题是的解决方法
4.支持各部时间的其他辅助设置

2.
1)CSR
OCSSD(Oracle Cluster Synchronization Service Daemon), 提供2种Heartbeat

4.支持各部时间的其他辅助设置
1)网络
网络层要分为3层
数据访问层:向外部提供数据库的访问
存储介质层:向数据库实例提供数据的访问
实例共享层:用于数据库各实例之间访问

2010年12月6日星期一

TEMPFILEの作り直す

TEMP領域が一度使われたら、v$sort_segment内の数字は減らすことができません。
それをリセットする方法を紹介します。

1.TEMPDATAを削除
  alter database tempfile '/path/to/temp/file' drop;
2.TMEPDATAを追加しなおす
  alter tablespace temp add tempfile '/path/to/temp/file';

※TEMP領域名は temp とする場合

2010年11月26日星期五

ORACLE里面的统计行数

ORACLE里面有很多统计用的函数,比如COUNT, SUM, MAX, LAST_VALUE, FIRST_VALUE。
乍一看可能觉得很好理解,没什么复杂的。
但是如果一个窗口的概念不弄明白的话,你会觉得很复杂,很难用,然后怀疑这些个函数都不好用了。

比方说你想一张薪水的历史记录表,
salary_history
emp_id,
salary,
update_date

你想找出每个人最新的薪水的值
select last_value(salary) over (partition by emp_id order by update_date rows between unbounded preceding and unbounded following) from salary_history;

其中 rows between unbounded preceding and unbounded following 就是指定了窗口:所有的数据。
如果不指定的话,默认的窗口是 range between unbounded preceding and current row,也就是当前记录为止的所有记录。

这个默认窗口只是对有order by的数据才有效, 而max, count函数如果不指定order by, 那么他的对象就是所有的数据。这点在ORACLE的文档里并没有提及的。

2010年11月9日星期二

通过表移动来提高Oracle表的空间利用率

表经过多次的插入,更新,删除之后,会存在断片化的问题。表空间的使用率降低,而且影响性能。
可以用以下的方法来改善。

alter table tab1 move;
alter index tab1_ind1 rebuild;
alter index tab1_ind2 rebuild;

表的移动,内部动作是把表数据拷贝到临时表空间,复制处理结束后,切换掉旧的表空间,所以需要有空余的表空间才能支持这个操作。
索引重建是因为旧的ROWID发生变化,导致无效

2010年11月8日星期一

oracle v$session v$process

v$session 里面有关于进程process的信息,那个客户端的信息, 而v$process里面的spid是oracle服务进程的ID,不要搞混了。

v$session里面的process列里面有的时候显示 196:1148, 2段信息是客户端自己的序列号

这两个视图由以下相连接

v$session.paddr = v$process.addr

2010年7月14日星期三

Oracle查询里面用正规表达式

Oracle10g开始支持正规表达式的查询了。

例子

SELECT statistic#, name, class
FROM v$statname
WHERE REGEXP_LIKE (name, '(pga|uga)');

2010年6月7日星期一

Oracle管理常用SQL文

查看管理者权限
SELECT grantee FROM dba_role_privs WHERE granted_role = 'DBA';

查看SYSDBA权限
SELECT * FROM v$pwfile_users;

表空间追加数据文件
ALTER TABLESPACE 表空间名 ADD DATAFILE 'データファイル' SIZE 大小KM;

改变数据文件大小
ALTER DATABASE 数据库名 DATAFILE '文件名' RESIZE SIZE 大小KM;

表领域情报
DBA_TABLESPACES
V$TABLESPACE

数据文件
DBA_DATA_FILES
V$DATAFILE

查看数据库运行模式
ARCHIVE LOG LIST

临时文件
SELECT * FROM v$tempfile;

数据文件
SELECT * FROM v$dbfile;

查看恢复文件
SELECT file#, online_status, error FROM v$recover_file;

查看控制文件
SELECT status, name FROM v$controlfile;

查看Oracle错误代码详细信息
-- ORA-00205
SQL>!oerr ora 205

查看死锁
SELECT sid, s.username, l.type, l.id1, l.lmode, l.block, l.request, l.ctime
FROM v$lock l JOIN v$session s USING (sid)
WHERE s.type = 'USER';

中止会话
ALTER SYSTEM KILL SESSION 'SID列値, SERIAL#列値;

2010年6月6日星期日

在Ubuntu下安装Oracle10 XE

原本想试试在Ubuntu下面安装Oracle11g。
看了文档才知道Oracle企业版还不支持Debian分支。目前还只支持Redhat Enterprise Linux环境。
所以熟悉RedHat环境还是很重要。

因为Oracle11g至少需要1G的内存,我的旧电脑没法满足这个条件,所以也就没有换成Redhat系统。

Oracle有一个称为XE的免费版支持Debian分支。除了连接数限制,Web管理界面不同之外,学习用途也足够了。
所以下面我就贴出来OracleXe的安装步骤

1.在/etc/apt/sources.list加入下面一行
deb http://oss.oracle.com/debian unstable main non-free
2.导入GPG密钥
wget http://oss.oracle.com/el4/RPM-GPG-KEY-oracle -O- | sudo apt-key add -
3.更新apt数据
sudo apt-get update
4.安装OracleXe
sudo apt-get install oracle-xe-universal
5.配置Oracle数据库
sudo /etc/init.d/oracle-xe configure
6.设置环境
在 ~/.profile 文件中加入
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_HOME
export ORACLE_SID=XE
export PATH
执行
source ~/.profile
7.允许外部访问管理页面
sqlplus sys as sysdba
EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);
8.访问管理页面
http://[serverip]:8080/apex

2010年6月2日星期三

Character set in Oracle

show database's character set used in datafile.

SELECT * FROM v$nls_parameters
WHERE parameter = 'NLS_CHARACTERSET';

or

SELECt * FROM nls_database_pramaters
WHERE parameter = 'NLS_CHARACTERSET';

set client character set
#以下の例は日本語のShiftJISを使用する
NLS_LANG=Japanese_Japan.JA16SJIS