오류가 나서 update 쿼리(drop,insert,update,delete..) 실행이 안될때..

"Not Acceptable"

http 406 오류

php나 mysql 버전은 나중에 체크하고 일단, apache 모듈부터 체크한다.

mod_security 모듈에서 sql 쿼리 정의되어 있는부분을 주석처리후 apache 재기동

SQL injection 공격을 막기위한 모듈인데 이렇게해도 안될때 google에서 검색해봐라~~ㅋ
#!/bin/sh

# 주의
# 바꿀 문자열의 디렉토리명도 바꾼다.
# 파일부터 바꾼다음 디렉토리를 바꾼다.
# find 로 검색한 결과를 순차적으로 바꾸면 나중에 나오는 파일은 못찾게 된다.

target_dir="/home/test"
target_files=`find "$target_dir" -type f`

from="old_name"
to="new_name"

# 파일을 바꾼다
for file in $target_files ; do

       # 순수 파일명 추출
       f=`basename $file`

       # 해당파일인지 판별후 변환
       if [ `echo $f | grep "$from"` ]; then
               tmp=`echo $f | sed "s/$from/$to/g"`

               new_file=`dirname ${file}`/${tmp}

               mv -f $file $new_file

               echo "change file : $file ===> $new_file "
       fi
done


# 디렉토리를 바꾼다
dir_file=`find "$target_dir" -type d`
for dir in $dir_file ; do
       # 해당 디렉토리인지 판별후 변환
       if [ `echo $dir | grep "$from"` ]; then
               new_dir=`echo $dir | sed "s/$from/$to/g"`

               mv -f $dir $new_dir
               echo "change dir : $dir ===> $new_dir "
       fi
done

exit 0
다음카페 같은데 보면 방문자 정보를 10개씩 뿌려주는데 그거 긁어오는거..
스크립트를 cron 에 등록시키고 매 1분마다 실행시킨다.
데이터를 긁어와 특정한 곳에 파일 또는 DB로 저장한다.
url 정보가 바뀌진 않지만 만약, 디자인 레이아웃이 바뀌면 말짱 도루묵.. 고로 그때그때 맞게 수정해야 된다.
charset도 시스템에 맞게 적절히 수정..


#!/usr/bin/perl -w

#####################################################################################
# author : gogisnim (gogisnim@gmail.com)
# file   : getCafe.pl
# date   : 2009.10.05
# desc   : LWP 모듈 테스트용, perl 감각익히기
#         : 다음카페의 방문자 목록을 얻는 perl script
#         : 단, cron으로 돌릴땐 local::lib 모듈을 지정해 주어야 한다.
#          : perl -I$HOME/perl5/lib/perl5 -Mlocal::lib ~/perl/getCafe.pl 이런식으로...
#####################################################################################

use strict;
use warnings;
use LWP::Simple;    # LWP 모듈

# 변수선언
my ($url, $html, $html2, $div1, $div2, $dir, $prev_txt, $old_txt, $new_txt, $data, $file_name) = ();
my (@nick,@tmp) = ();

$dir = "/home/xxx/perl/fun";
$url = "html긁어올url";
$html = get($url);

# html을 얻어오지 못하면 종료한다.
exit if ( !$html );

# $div1으로 나눈 2번째 요소를 취하고 $div2로 나눈 첫번째 요소를 취한다.
$div1 = "<div class=\"component_list group\">";
$div2 = "</div>";
($html2) = ( split $div2, (split $div1,$html)[1] )[0];

# 필요한 html을 \n 으로 분리해서 @tmp 배열에 넣는다.
@tmp = split("\n", $html2);

open (FH, $dir."/curr") or die("curr file error");
#binmode FH, ':encoding(UTF-8)';
binmode FH, ':encoding(euc-kr)';

# 문자열 초기화
$prev_txt = $old_txt = $new_txt = "";


# curr 파일의 내용을 읽어서 $prev_txt에 저장
# 주의. UTF-8로 인코딩 해야한다.
while ( <FH> ) {
   $prev_txt .= $_;
}
close(FH);


# 얻은 html 정보를 라인별로 읽어 정규표현식 <li title=\"(.+)\"> 에 만족하는 부분의 괄호부분($1)을 $old_txt에 저장
# 그중에서 이전 데이터($prev_txt)에 없는 정보(새로운 닉네임)은 $new_txt에 저장한다.
foreach ( @tmp ) {
   if ( /<li title=\"(.+)\">/ ) {
       $old_txt .= $1.",";
       if ( index($prev_txt,$1) == -1 ) {
           $new_txt .= $1.",";
       }
   }    
}

# curr 파일을 쓰기모드로 열고 UTF-8로 인코딩한다음 $old_txt 내용을 저장한다.
open (FH, ">".$dir."/curr") or die("curr file error");
#binmode FH, ':encoding(UTF-8)';
binmode FH, ':encoding(euc-kr)';
print FH $old_txt;
close(FH);


# 하루에 해당하는 파일 "년월일" $file_name 을 구한다.  예) 20091006
my ( $sec, $min, $hour, $mday, $mon, $year ) = ();
($sec, $min, $hour, $mday, $mon, $year) = localtime(time);
$year = $year + 1900;
$mon = $mon + 1;
if(length($mon)==1)     { $mon  = '0'.$mon; }
if(length($mday)==1)    { $mday = '0'.$mday; }
if(length($hour)==1)    { $hour = '0'.$hour; }
if(length($min)==1)     { $min  = '0'.$min; }
$file_name = $year.$mon.$mday;


# 새로운 닉네임($new_txt) 내용을 $file_name에 저장한다.
open (FH, ">>".$dir."/$file_name") or die("data file error");
$data = "\n".$hour.":".$min." ==> ".$new_txt;
#binmode FH, ':encoding(UTF-8)';
binmode FH, ':encoding(euc-kr)';
print FH $data;
close(FH);

사용자 삽입 이미지


가장 최근에 읽었던 책이다.

보통 펠로폰네소스 전쟁사는 당시 전쟁이 참여했던 투키디데스의 역사서로 알고 있지만 투키디데스의 펠로폰네소스 전쟁사는 전쟁 마지막 7년의 기간이 누락되어 있다.
그리고 투키디데스의 글은 너무 어려워 일반인이 이해하기가 힘들다고 한다.
이 책은 예일대 석좌교수인 도날드 케이건이 쓴 책인데 이 양반은 펠로폰네소스 전쟁에 관한한 세계에서 가장 저명한 학자라 할수있다.
보통 보름쯤이면 책한권은 뚝딱하는데 이책은 거의 한달이 걸린거 같다.
이유를 생각해보니..

첫째, 어렵다.
펠로폰네소스 전쟁을 이해하기 위해선 어느정도의 사전지식이 있어야 한다는 개인적인 생각이다.
그리스에 도시국가가 어떻게해 탄생했는지, 과두정이 뭔지, 페르시아전쟁이 어떻게 결말이 났는지, 당시 전쟁이 어떤형태였는지.. 등에 대한 정보는 있어야 내용을 이해하는데 무리가 없을거 같다는 생각이다.

둘째, 책의 서술이 너무 무미건조하고 딱딱하다.
책을 읽는순간에도 그냥 멍~ 했던적이 많았던거 같다. 글고 이 양반 글쓰는 스타일이 약간 빌빌 꼬는걸 즐기는거 같다.

셋째, 본인은 그리스어 네이밍 스타일이 참 적응이 안된다.
페르시아 전쟁사, 알렉산드로스 평전을 통해서 어느정도 익숙해졌다면 익숙해졌을법도한데 끝까지 방심하다간 딴 인물에 대한 글을 읽고있을때가 있다.
아리스토크라테스, 아리스토텔레스, 아리스토클레스, 아리스토파네스 ... 어렵다.

넷째, 등장인물이 너무나 많다.
전쟁기간이 거의 30여년이다 보니 많은 인물등장은 어쩔수 없긴하다.

그럼에도 불구하고 펠로폰네소스 전쟁사는 읽을만한 가치가 있는책이다.

역사는 현재의 거울이자 우리가 살아가는 방향타 역할을 한다고 하는데..
펠로폰네소스 전쟁은 아테네와 스파르타로 대표되는 민주정과 과두정 체제대결의 압축판이고 우리의 현실과 충분히 비교해볼수 있는부분이 굉장히 많다.
대부분의 전쟁이 그렇겠지만 펠로폰네소스 전쟁역시 그리스세계에 많은 아픔을 양산했고 문명은 퇴보하게 되었다.
국가간 분쟁의 최선책은 외교적인 접근이다.
전쟁은 목적달성을 위한 최후의 수단이어야지 그 자체가 목적이어선 안된다.
현재 우리가 직면하고있는 한반도 긴장상황이 2400여년전 펠로폰네소스전쟁의 발단이된 코린토스와 코르키라의 갈등이 연상된다.

다시 읽어보고 있는데 확실히 두번째 읽으니 첫번째보단 속도도 나고 이해하지 못했던 부분도 많이 줄어들었음을 확인할 수 있다.
펠로폰네소스 전쟁사를 완벽히 이해하기 위해선 서너번은 읽어봐야 하지않을까싶다.









SQL 서버를 만져야할거 같아서 설치해봤는데 역시나 체질에 안맞는다.
정리 좀 해야겠다.


######################## 커넥션 이슈 ##########################
"provider named pipes provider error 40 could not open a connection to sql server ~~"

- SQL Server Configuration Manager 의 모든 데몬을 기동(특히, SQL Server browser)
- protocols for MSSQLSERVER TCP/IP 를 enable 시킨다.
- 방화벽 체크

참조 : http://social.msdn.microsoft.com/forums/en-US/sqldataaccess/thread/c488cf76-2515-440f-b3f8-9cfad689c5b6/


######################### critical 이슈 ############################

높은 응답 성능을 위한 쿼리 작성 규칙(1)
참조 : http://sunnykwak.textcube.com/9

높은 응답 성능을 위한 쿼리 작성 규칙(2)
참조 : http://sunnykwak.textcube.com/10

MSSQL 2005 인덱스 고찰
참조 : http://blog.naver.com/ssayagain/90035554900


######################### SQL Server 일반 ############################

DB단위 백업
backup database 디비명 to disk='E:\test.db' with init

DB단위 복원
restore database 디비명 from disk='E:\test.db'


해당 테이블의 인덱스 보기
exec sp_helpindex 테이블명

해당 테이블의 모든정보 보기
exec sp_help 테이블명


MSSQL 테이블 관리
참조 : http://yjm.kr/demo1110/bbs/board.php?bo_table=asp&wr_id=7

엑셀 import
http://blog.naver.com/jinu5561?Redirect=Log&logNo=30082575406

SQL Server 2005의 OVER절
http://www.devpia.co.kr/MAEUL/Contents/Detail.aspx?BoardID=42&MAEULNO=17&no=68&page=2


[MS-SQL] MS-SQL 2005에 등장한 각종 순위 함수
http://blue1769.tistory.com/43

MSSQL 날짜 관련 함수
http://mean79.tistory.com/144


######################### ASP 일반 ############################
참조 : http://webstyledesign.tistory.com/category/Web%20Development/ASP

저장프로시저 호출 예제
http://blog.naver.com/ksotion?Redirect=Log&logNo=40105291172

ABC업로드 사용법
http://blog.naver.com/dmsal7777?Redirect=Log&logNo=130093813501

ABC업로드 세팅
http://byung2love.blog.me/140090245630


jQuery의 AJAX전송시 한글문제 좀더 편하게 풀어보자(jQuery.js 수정)
http://web.do-i.kr/entry/jQuery%EC%9D%98-AJAX%EC%A0%84%EC%86%A1%EC%8B%9C-%ED%95%9C%EA%B8%80%EB%AC%B8%EC%A0%9C-%EC%A2%80%EB%8D%94-%ED%8E%B8%ED%95%98%EA%B2%8C-%ED%92%80%EC%96%B4%EB%B3%B4%EC%9E%90


################ 좋은 저장프로시저를 위한 21가지 팁 ###################

1. 키워드
SQL 명령어는 대문자로 알아보기 쉽게 표시한다.

2. SQL-92
항상 ANSI 92 를 사용하도록 노력해야 합니다.

3. 변수
가능한 최소한으로 사용하여 캐쉬 공간에 여유를 주어야합니다.

4. 동적 쿼리
최소한으로 사용하여야한다. 동적쿼리에 따라 재컴파일이 된다.

5. 친숙한 전체 이름 사용
database_name.schema_name.table_name 으로 사용을 해야 하며,하며, CREATE PROCEDURE dbo.Your_Proc_name 처럼 사용해여 합니다.

6. SET NOCOUNT OFF
실행 결과 행은 네트워크 트래픽을 사용하게 되므로 주의해여주의해여 한다.

7. sp_ 접두어를 사용하지 않는다
시스템데이터베이스(MASTER) 와 사용자사용자 데이터베이스에 같은 이름의 저장프로시져가 있게 되면 사용자 데이터베이스는 결코결코 실행되지 않는다.

8. sp_executeSQL 과 KEEPFIXED PLAN 옵션
sp_executeSQLsp_executeSQL 과 KEEPFIXED PLAN 옵션은 저장프로시저를 재컴파일합니다. 만약 동적 SQLSQL 을 사용하려면 EXEC(proc_name) 대신에 sp_eecutesql 을 사용해야 합니다.

9. SELECT 와 SET
SELECT는 서로 다른 여러 변수를변수를 사용할수 있습니다. SET 은 하나의 변수만을 사용합니다.

SELECTSELECT @var1 = @var1 + 1, @var2 = @var2 - 1

SET @var1 = @var1 + 1
SET @var2 == @var2 - 1

10. WHERE 연산자
=, >, <,<, >=, <=, <>, !=, !>, ! 의 사용을 줄여야 합니다.
SQL Server 2008 Books Online (July 2009) Operator Precedence (Transact-SQL)

11. WHERE 연산자 추가
쉽게 LOWERLOWER 등의 연산자를 이용해서 대소문자를 구별하곤 하는데, OR 명령을 이용하는 편이 보다보다 빠른 처리를 할수 있습니다.


SELECT emp_name FROMFROM table_name WHERE LOWER(emp_name) = 'edu'


SELECT emp_nameemp_name FROM table_name WHERE emp_name = 'EDU' OR emp_name == 'edu'


또한 EXISTS  대신에 IN 연산자를 사용하면 보다 빠른빠른 처리가 가능합니다


SELECT * FROM employee WHEREWHERE emp_no NOT IN (SELECT emp_no from emp_detail)
SELECT ** FROM employee WHERE NOT EXISTS (SELECT emp_no FROM emp_detail)emp_detail)

12. CAST 와 CONVERT
CONVERT 보다 CAST 를 쓰도록 합니다. CAST 는 ANSI-92 지만 CONVERT 는 MSSQL 에서만 사용이 가능합니다. 다만 DATETIME 데이타타입의 변형에는 CONVERT 를 사용해야 합니다. CAST 는 안되거든요.

13. DISTINCT 와와 ORDER BY
추가적인 데이터베이스작업이 요구되기 때문에 굳이 필요하지 않다면 사용하지 않는않는 것이 좋습니다. 성능상 좋지 않습니다.



####################### er-win 체크 ##########################

Erwin에서 DataBase(MSSQL 2005)연결(Database Connection 메뉴)시 다음과 같은 메세지가 나타나면서 연결이 않되는 경우가 발생할 수 있다.

메 세지 : unable to locate client connectivty software .check with your database administrator to install the appropriate client software

원인을 알기위해 검색을 해본결과 다음과 같은 사실을 알게되었다.
"MSSQL 2005의 경우 기본적으로 네트워크 DB연결에 사용되는 DLL 파일이 설치되지 않습니다"

이게 문제였군..
해결방안도 함께 제시되어있었다.
해결방안 : C:WINDOWSsystem32 폴더 밑에 ntwdblib.dll 파일을 붙여 넣으시면 됨

아래 해당 파일을 첨부하였으니 이런 증상이 생기는분들은 필히 다운받으시길 기원합니다.

http://www.genesis.co.kr/php/technote6/board.php?board=freeboard&page=3&command=body&no=2024


er-win mssql 커넥션 3번째방법(접속됨)
참조 : http://nalnari.tistory.com/96




######################## 트러블슈팅 #########################

"잘못된 형식이거나 올바른 범위 밖에 있거나 서로 충돌하는 인수입니다."

-오류내용
ADODB.Recordset 오류 '800a0bb9'
잘못된 형식이거나 올바른 범위 밖에 있거나 서로 충돌하는 인수입니다.
/comic_3000/admins/sale_search/sale_search.asp, 줄 93

-설명
이 오류의 문제점은 첫번째로 DB의 경로가 없거나,
SQL 문이 잘못 되었거나,
잘못된 DB를 열었을 때 발생한다.

오류 발생시 먼저 DB의 경로를 확인하고,
SQL문에 오타가 있지 않은지 검사해 본다.

혹 위의 경우를 확인하였어도 문제가 없을 경우

<!--METADATA TYPE= "typelib"  NAME= "ADODB Type Library" FILE="C:\Program Files\Common Files\SYSTEM\ADO\msado15.dll"  -->

이 구문을 제일 위에 넣는다

참조 : http://loannes.tistory.com/133


당분간 계속 업데이트..