blog.visualp.com
9i에서 10G이상 데이터를 이관하다 보면 ,
enables you to create
charset을 euc-kr에서 utf-8로 변경해야 되는 상황이 발생 한다.
그랬을 때 byte로 되어 있는 euc-kr을 utf-8로 이관 하면서
varchar2에 maxsizse를 넘어 버려서 에러가 발생하는 경우가 있다
그러면 다음과 같이 nls_length_semantics을 default BYTE를
CHAR로 변환 한다.
#in sqlplus
show parameter nls_length
alter system set nls_length_semantics=CHAR scope=both;
show parameter nls_length
NLS_LENGTH_SEMANTICSCHAR
andVARCHAR2
columns using either byte or character length semantics. Existing columns are not affected.
NCHAR
,NVARCHAR2
,CLOB
, andNCLOB
columns are always character-based. You may be required to use byte semantics in order to maintain compatibility with existing applications.
NLS_LENGTH_SEMANTICS
does not apply to tables inSYS
andSYSTEM
. The data dictionary always uses byte semantics.
Property Description Parameter type String Syntax NLS_LENGTH_SEMANTICS =
string
Example:
NLS_LENGTH_SEMANTICS = 'CHAR'
Default value BYTE
Modifiable ALTER SESSION
Range of values BYTE | CHAR
[원문] : http://blog.bits.kr/90
$(document).ready(function(){
var $doc = $(document);
var position = 0;
var top = $doc.scrollTop(); //현재 스크롤바 위치
var screenSize = 0; // 화면크기
var halfScreenSize = 0; // 화면의 반
/*사용자 설정 값 시작*/
var pageWidth = 1000; // 페이지 폭, 단위:px
var leftOffet = 409; // 중앙에서의 폭(왼쪽 -, 오른쪽 +), 단위:px
var leftMargin = 909; // 페이지 폭보다 화면이 작을때 옵셋, 단위:px, leftOffet과 pageWidth의 반만큼 차이가 난다.
var speed = 1500; // 따라다닐 속도 : "slow", "normal", or "fast" or numeric(단위:msec)
var easing = 'swing'; // 따라다니는 방법 기본 두가지 linear, swing
var $layer = $('#floating'); // 레이어 셀렉팅
var layerTopOffset = 188; // 레이어 높이 상한선, 단위:px
$layer.css('z-index', 10); // 레이어 z-인덱스
/*사용자 설정 값 끝*/
//좌우 값을 설정하기 위한 함수
function resetXPosition()
{
$screenSize = $('body').width();// 화면크기
halfScreenSize = $screenSize/2;// 화면의 반
xPosition = halfScreenSize + leftOffet;
if ($screenSize < pageWidth)
xPosition = leftMargin;
$layer.css('left', xPosition);
}
// 스크롤 바를 내린 상태에서 리프레시 했을 경우를 위해
if (top > 0 )
$doc.scrollTop(layerTopOffset+top);
else
$doc.scrollTop(0);
// 최초 레이어가 있을 자리 세팅
$layer.css('top',layerTopOffset);
resetXPosition();
//윈도우 크기 변경 이벤트가 발생하면
$(window).resize(resetXPosition);
//스크롤이벤트가 발생하면
$(window).scroll(function(){
yPosition = $doc.scrollTop()+layerTopOffset;
$layer.animate({"top":yPosition }, {duration:speed, easing:easing, queue:false});
});
});
//레이어 HTML 마크업은 아주 간단하게. ID만 주는정도로 끝..(position:absolute는 줘야 합니다..)
<div id="floating" style="position:absolute;" >
레이어 내용
</div>
Now it is called Oracle Enterprise Manager Cloud Control (previously, Grid Control).
Version: 12
Platform: OEL 6.1, x86_64 (Installed on a VM)
Requirements: Oracle Database 11g Release 2 11.2.0.3
1 - Install the database
1a- firewall and SELinux should be disabled:
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
# cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. # SELINUX=enforcing SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted #
1b - Verify that /etc/hosts contains the server's fqdns
# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 10.20.30.40 my-em-host.my.domain.com my-em-host ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6#
1c - Modified kernel parameters: added in /etc/sysctl.conf the following entries:
fs.suid_dumpable = 1 fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmmni = 4096 # semaphores: semmsl, semmns, semopm, semmni kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default=4194304 net.core.rmem_max=4194304 net.core.wmem_default=262144 net.core.wmem_max=1048586
Then called
# /sbin/sysctl -p
1d - Added the following lines to /etc/security/limits.conf
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 4096 oracle hard nofile 65536 oracle soft stack 10240
1e - Added groups and users:
# groupadd -g 502 oinstall # groupadd -g 503 dba # groupadd -g 504 oper # groupadd -g 505 asmadmin # groupadd -g 506 asmoper # groupadd -g 507 asmdba # useradd -u 503 -g oinstall -G dba,asmdba,oper oracle # passwd oracle
1f - Create the directory for the database
# mkdir -p /u01/app/oracle/product/11.2.0/db_1 # chown -R oracle:oinstall /u01 # chmod -R 775 /u01
1g - install the following packages (use yum for this):
glibc-devel-2.12-1.25.el6.i686 ksh-20100621-6.el6.x86_64 libaio-0.3.107-10.el6.i686 libaio-devel-0.3.107-10.el6.i686 libaio-devel-0.3.107-10.el6.x86_64 libstdc++-4.4.5-6.el6.i686 numactl-devel-2.0.3-9.el6.x86_64
1h - login as 'oracle', add the following lines to .bash_profile:
# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_HOSTNAME=my-em-host.my.domain.com; export ORACLE_HOSTNAME
ORACLE_UNQNAME=orcl; export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
1i - log in as 'oracle', unzip the oracle-db zips, and run 'runInstaller'
Configure Security Updates: NULL
Download Software Updates: Skip'
Installation Option: Create and configure database
System Class: Server class
Grid options: Single instance
Install type: Typical
Typical Installation: accept values; osdba group: oinstall
Create Inventory: accept default
Prerequisite checks: Installed via yum: compat-libcap1, compat-libstdc++-33, ksh, libaio-devel
Finish: run scripts as 'root':
# /u01/app/oraInventory/orainstRoot.sh # /u01/app/oracle/product/11.2.0/db_1/root.sh
1j - Edit /etc/oratab, set resatrt flag to 'Y':
orcl:/u01/app/oracle/product/11.2.0/db_1:Y
1k - create as root file /etc/init.d/dbora
#!/bin/sh # chkconfig: 345 99 10 # description: Oracle auto start-stop script. # # Set ORA_HOME to be equivalent to the $ORACLE_HOME # from which you wish to execute dbstart and dbshut; # # Set ORA_OWNER to the user id of the owner of the # Oracle database in ORA_HOME. ORA_HOME=/u01/app/oracle/product/11.2.0/db_1 ORA_OWNER=oracle if [ ! -f $ORA_HOME/bin/dbstart ] then echo "Oracle startup: cannot start" exit fi case "$1" in 'start') # Start the Oracle databases: # The following command assumes that the oracle login # will not prompt the user for any values su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME" touch /var/lock/subsys/dbora ;; 'stop') # Stop the Oracle databases: # The following command assumes that the oracle login # will not prompt the user for any values su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME" rm -f /var/lock/subsys/dbora ;; esac
Then:
# chmod 750 /etc/init.d/dbora # chkconfig --add dbora
1k - start oracle db
1l - as user 'oracle' access sqlplus / as sysdba and reset password for sys, system and sysman
2 as user oracle run:
emca -deconfig dbcontrol db -repos drop -SYS_PWD <password-SYS> -SYSMAN_PWD <password-SYSMAN>
3 - as user oracle run sqlplus / as sysdba and:
sqlplus / AS SYSDBA ALTER SYSTEM SET processes=300 SCOPE=SPFILE; ALTER SYSTEM SET session_cached_cursors=200 SCOPE=SPFILE; ALTER SYSTEM SET sga_target=2G SCOPE=SPFILE; ALTER SYSTEM SET shared_pool_size=600M SCOPE=SPFILE; ALTER SYSTEM SET pga_aggregate_target=1G SCOPE=SPFILE; ALTER SYSTEM SET job_queue_processes=20 SCOPE=SPFILE; -- May be required if using older versions of DB. --ALTER SYSTEM SET log_buffer=10485760 SCOPE=SPFILE; --ALTER SYSTEM SET open_cursors=300 SCOPE=SPFILE; -- Restart the instance. SHUTDOWN IMMEDIATE STARTUP
Got problems to start the database:
SQL> startup ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least 3072M
So, I did:
SQL> create pfile from spfile;
And edited the created file
/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora
and set *.memory_target=3221225472
but also remounted the devshm (as root):
# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
...
tmpfs 1929528 528 1929000 1% /dev/shm
...
# mount -t tmpfs shmfs -o size=4g /dev/shm
# df -h
...
tmpfs 4.0G 0 4.0G 0% /dev/shm
...
# vi /etc/fstab
...
tmpfs /dev/shm tmpfs size=4g 0 0
...
#
then restarted the database:
SQL> startup pfile=/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora
ORACLE instance started.
Total System Global Area 3206836224 bytes
Fixed Size 2232640 bytes
Variable Size 1761611456 bytes
Database Buffers 1426063360 bytes
Redo Buffers 16928768 bytes
Database mounted.
Database opened.
SQL>
And recreated the spfile
SQL> CREATE SPFILE FROM PFILE;
4 - As 'oracle' created the directory
/u01/app/oracle/Middleware
4a - install:
binutils-devel-2.20.51.0.2-5.20.el6.i686
5 - unzipped the OEM zips, and as 'oracle' user ran 'runInstaller'
5a - MOS: no email, uncheck box
5b - Software updates: Skip
5c - Pre-requisite checks: glib-devel warning, ignore and continue
5d - Install types: Create new EM -> Simple -> Middelware location:
/u01/app/oracle/Middleware
5e - Configuration details: ... (admin password same as DB password)
5f -Warning dialog: click 'Yes' to disable stats gathering job
5g - Warnings : 'OK'
5h - Review: Click 'Install'
5i - After Installation, when pop-up indicates so, run (as root):
/u01/app/oracle/Middleware/oms/allroot.sh
(Note: it overrides all the existing files)
5j - Finishing installation:
This information is also available at: /u01/app/oracle/Middleware/oms/install/setupinfo.txt See below for information pertaining to your Enterprise Manager installation: Use the following URL to access: 1. Enterprise Manager Cloud Control URL: https://my-em.host.my.domain.com:7803/em 2. Admin Server URL: https://my-em-host.my.domain.com:7103/console The following details need to be provided during the additional OMS install: 1. Admin Server Hostname: my-em-host.ie.oracle.com 2. Admin Server Port: 7103 NOTE: An encryption key has been generated to encrypt sensitive data in the Management Repository. If this key is lost, all encrypted data in the Repository becomes unusable. Please run following command to backup the Management Service configuration including the emkey and keep the backup on another system: emctl exportconfig oms -dir <backup location>
5k - Log-In ...
5l - Accept License Agreement
Homepage Selector Screen -> Summary -> 'Preview'; 'Select As My Home'
6 - Create (as root) start/stop script /etc/init.d/emora:
#!/bin/bash export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export OMS_HOME=/u01/app/oracle/Middleware/oms export AGENT_HOME=/u01/app/oracle/Middleware/agent/core/12.1.0.1.0 ORA_OWNER=oracle case "$1" in 'start') # Start everything #$ORACLE_HOME/bin/dbstart $ORACLE_HOME /etc/init.d/dbora start su - $ORA_OWNER -c "$OMS_HOME/bin/emctl start oms" su - $ORA_OWNER -c "$AGENT_HOME/bin/emctl start agent" ;; 'stop') # Stop everything su - $ORA_OWNER -c "$OMS_HOME/bin/emctl stop oms -all" su - $ORA_OWNER -c "$AGENT_HOME/bin/emctl stop agent" #$ORACLE_HOME/bin/dbshut $ORACLE_HOME /etc/init.d/dbora stop ;;
esac
Then:
# chmod 750 /etc/init.d/emora
[원문 ] : http://bloodguy.tistory.com/entry/PHP-%EB%82%A0%EC%A7%9C-%EC%9D%BC%EC%88%98-%EC%B0%A8%EC%9D%B4-%EA%B3%84%EC%82%B0-datediff-DateTimeDateInterval
정확한 날짜 일수를 계산하기 위한 간편한 방법.
여러가지 방법들이 산더미 같이 있겠지만 다 귀찮고 DateTime, DateInterval 객체를 이용하는 가장 간단한 방법.
<?PHP /*5.3 이상에서*/
$시작일 = new DateTime('2012-01-01'); // 20120101 같은 포맷도 잘됨
$종료일 = new DateTime('2012-10-11');
// $차이 는 DateInterval 객체. var_dump() 찍어보면 대충 감이 옴.
$차이 = date_diff($시작일, $종료일);
echo $차이->days; // 284
?>
/*php 5.2 버전 에서*/
<?php
$start = new DateTime('2010-10-12');
$end = new DateTime('2010-10-15');
$days = round(($end->format('U') - $start->format('U')) / (60*60*24));
echo $days;
?>
[참조]
http://www.php.net/manual/en/datetime.diff.php
http://www.php.net/manual/en/class.dateinterval.php
http://www.php.net/manual/en/class.datetime.php
[원문]
Row Limiting Clause for Top-N Queries in Oracle Database 12c Release 1 (12.1)
http://www.oracle-base.com/articles/12c/row-limiting-clause-for-top-n-queries-12cr1.php
Related articles.
A Top-N query is used to retrieve the top or bottom N rows from an ordered set. Combining two Top-N queries gives you the ability to page through an ordered set. This concept is not a new one. In fact, Oracle already provides multiple ways to perform Top-N queries, as discussed here. These methods work fine, but they look rather complicated compared to the methods provided by other database engines. For example, MySQL uses a LIMIT
clause to page through an ordered result set.
SELECT * FROM my_table ORDER BY column_1 LIMIT 0 , 40
Oracle 12c has introduced the row limiting clause to simplify Top-N queries and paging through ordered result sets.
To be consistent, we will use the same example table used in the Top-N Queries article.
Create and populate a test table.
DROP TABLE rownum_order_test; CREATE TABLE rownum_order_test ( val NUMBER ); INSERT ALL INTO rownum_order_test INTO rownum_order_test SELECT level FROM dual CONNECT BY level <= 10; COMMIT;
The following query shows we have 20 rows with 10 distinct values.
SELECT val FROM rownum_order_test ORDER BY val; VAL ---------- 1 1 2 2 3 3 4 4 5 5 6 VAL ---------- 6 7 7 8 8 9 9 10 10 20 rows selected. SQL>
The syntax for the row limiting clause looks a little complicated at first glance.
[ OFFSET offset { ROW | ROWS } ] [ FETCH { FIRST | NEXT } [ { rowcount | percent PERCENT } ] { ROW | ROWS } { ONLY | WITH TIES } ]
Actually, for the classic Top-N query it is very simple. The example below returns the 5 largest values from an ordered set. Using the ONLY
clause limits the number of rows returned to the exact number requested.
SELECT val FROM rownum_order_test ORDER BY val DESC FETCH FIRST 5 ROWS ONLY; VAL ---------- 10 10 9 9 8 5 rows selected. SQL>
Using the WITH TIES
clause may result in more rows being returned if multiple rows match the value of the Nth row. In this case the 5th row has the value "8", but there are two rows that tie for 5th place, so both are returned.
SELECT val FROM rownum_order_test ORDER BY val DESC FETCH FIRST 5 ROWS WITH TIES; VAL ---------- 10 10 9 9 8 8 6 rows selected. SQL>
In addition to limiting by row count, the row limiting clause also allows us to limit by percentage of rows. The following query returns the bottom 20% of rows.
SELECT val FROM rownum_order_test ORDER BY val FETCH FIRST 20 PERCENT ROWS ONLY; VAL ---------- 1 1 2 2 4 rows selected. SQL>
Paging through an ordered resultset was a little annoying using the classic Top-N query approach, as it required two Top-N queries, one nested inside the other. For example, if we wanted the second block of 4 rows we might do the following.
SELECT val FROM (SELECT val, rownum AS rnum FROM (SELECT val FROM rownum_order_test ORDER BY val) WHERE rownum <= 8) WHERE rnum >= 5; VAL ---------- 3 3 4 4 4 rows selected. SQL>
With the row limiting clause we can achieve the same result using the following query.
SELECT val FROM rownum_order_test ORDER BY val OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY; VAL ---------- 3 3 4 4 4 rows selected. SQL>
The starting point for the FETCH
is OFFSET+1
.
The OFFSET
is always based on a number of rows, but this can be combined with a FETCH
using a PERCENT
.
SELECT val FROM rownum_order_test ORDER BY val OFFSET 4 ROWS FETCH NEXT 20 PERCENT ROWS ONLY; VAL ---------- 3 3 4 4 4 rows selected. SQL>
Not surprisingly, the offset, rowcount and percent can, and probably should, be bind variables.
VARIABLE v_offset NUMBER; VARIABLE v_next NUMBER; BEGIN :v_offset := 4; :v_next := 4; END; / SELECT val FROM rownum_order_test ORDER BY val OFFSET :v_offset ROWS FETCH NEXT :v_next ROWS ONLY; VAL ---------- 3 3 4 4 SQL>
ROW
and ROWS
can be used interchangeably, as can the FIRST
and NEXT
keywords. Pick the ones that scan best when reading the SQL like a sentence.
FOR UPDATE
clause, CURRVAL
and NEXTVAL
sequence pseudocolumns or in an fast refresh materialized view. For more information see: