SQL
posted by 준치 2008. 11. 6. 02:25

C#은 mysql커넥터 없이는 mysql을 사용할 수 없습니다
주로 mssql과 연동하여 사용하는데 필자는 꼭 반드시 미친듯이 mysql을 사용해야 했으므로
그 사용예제를 올려봅니다 ^^

먼저 첨부된 파일을 C# 라이브러리에 추가하고..
상단에

MySql.Data.MySqlClient가 using 되어 있어야 합니다.

그리고 첫번째 예제

public void MyMathod(){

      MySqlConnection connection;
      connection = new MySqlConnection();

      string connectionString =             "server=127.0.0.1;database=MY_DB;uid=MY_ID;pwd=MY_PW;";

            connection.ConnectionString = connectionString;

            try
            {

                string commandStirng = "select * from test";

                MySqlDataAdapter DBAdapter = new MySqlDataAdapter(commandStirng, connection);
                DataSet DS = new DataSet();
                DBAdapter.Fill(DS, "test");

                dataGridView1.DataSource = DS.Tables["test"].DefaultView;
                //MessageBox.Show("연결됨");

            }
            catch (Exception E)
            {
                MessageBox.Show(E.ToString());
            }
            finally
            {
                connection.Close();
            }
}

기본 골격이고 신경써야 할 부분은 형광색 부분입니다.
1. 127.0.0.1 : Mysql이 설치된 원격지의 데이터베이스 IP어드레스 입니다.
2. MY_DB : 사용할 데이터베이스명
3. MY_ID : 데이터베이스 사용 ID
4. MY_PW : 데이터베이스 사용 PASSWORD
5. select * from test : 데이터베이스에 질의할 쿼리(본 예제는 Select로만 응용가능합니다)
예) select * from test where field1 = 1;
     select * from test order by field2 desc;
6. test : DBAdapter와 DS.Tables에 쿼리에 질의한 테이블 명을 적어 줍니다.
예) select * from angpang; //테이블 명이 angpang 입니다.
    .............................
    string commandStirng = "select * from angpang";

                MySqlDataAdapter DBAdapter = new MySqlDataAdapter(commandStirng,         connection);
                DataSet DS = new DataSet();
                DBAdapter.Fill(DS, "angpang");

                dataGridView1.DataSource = DS.Tables["angpang"].DefaultView;
                //MessageBox.Show("연결됨");
    .............................

7. dataGridView1 : 주로 결과값은 데이터그리드 뷰 컨트롤과 많이 사용합니다. 데이터그리드 뷰를 추가하여 Name 속성을 맞춰주면 결과값이 보여질 것입니다.

시간나면 Update 쿼리 응용법, Insert 쿼리 응용법, 데이터그리드뷰를 효율적으로 쓰는방법,
데이터베이스에 이미지를 2진코드로 저장하여 활용하는법 등을 기술해 보겠습니다.
감사합니다 ^^

SQL
posted by 준치 2008. 11. 4. 10:59
1. 초기 mysql root 패스워드 설정하기
mysql 서버에 패스워드 없이 로그인 하게되면 서버에 만들어진 데이터베이스나 테이블
기타 이곳에 저장된 자료가 외부인에게 노출될 수 있다. 따라서 이러한 보안을 목적으로
root 패스워드를 지정하면 mysql 서버를 안전하게 보호할 수 있다.

mysql> use  mysql;
mysql> update  user  set  password=password('123456') where user='root';
Query OK, 2 rows affected (0.03 sec)
Rows matched: 2  Changed: 2  Warnings: 0
mysql> flush  privileges; <--- 적용
flush privileges; 를 하지 않으면 mysql에서 빠져나와서 root 로그인이 안된다.
확인한다.
mysql> select  host, user, password  from  user;
+----------------------------------------------------------------+
| Host                          user              password       |
+----------------------------------------------------------------+
| localhost                     root          2e01146f5c065853   |
| localhost.localdomain         root          2e01146f5c065853   |
+----------------------------------------------------------------+

mysql> \q
Bye
------------------------------------------------------------------------------------
[주의]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
그대는 mysql 을 shutdown 하거나 reload 하면 된다.
# /usr/local/mysql/bin/mysqladmin -u root -p shutdown
하면 패스워드를 묻는데 이때 입력하면 설정한 mysql이 적용이된다.
# /usr/local/mysql/bin/mysqladmin -u root -p reload;
------------------------------------------------------------------------------------

# mysql -u root -p [Enter]       //  root 패스워드로 로그인
Enter password: ******

※ Mysql 서버에 root 패스워드가 설정되면 이제 부터는 mysql 서버에 접속하기 위해서는
위와 같이 -u 뒤에 root입력하고 -p 옵션을 사용하여 패스워드를 사용한다는 것을 명시해야 한다.
그리고 엔터를 치면 root 패스워드를 입력받기 위해 커서가 멈춘다.
(mysql 명령어만 입력하고 엔터를 치면 패스워드를 묻지 앟고 바로 mysql> 프롬프트가 나온 옛 시절을 생각해 보면 금방 차이를 느낄수 있음) 

2. 루트 비번 변경
mysql> use  mysql;
mysql> update  user  set  password=password('123456') where user='root';
mysql> flush  privileges;

3. root 패스워드를 분실한 경우(응급조치)

mysql을 오랫동안 사용하지 않았을 경우에 간혹 root패스워드가 기억나질않아서 당황할 때가 있습니다.  시스템관리자라면 시스템의 root나 MySQL의 root의 암호를 잊어 버렸을 때를 대비해서 패스워드를 새로 설정하는 방법을 반드시 숙지하고 있어야 할 것입니다.

① 실행중인 msyql 종료

# ps -ef | grep mysqld
root      9567     1  0 Mar16 ?        00:00:00 sh ./mysqld_safe
root      9576  9567  0 Mar16 ?        00:00:00 /usr/local/mysql/libexec/mysqld
root      9578  9576  0 Mar16 ?        00:00:00 /usr/local/mysql/libexec/mysqld
root      9579  9578  0 Mar16 ?        00:00:00 /usr/local/mysql/libexec/mysqld

# killall mysqld

② grant-table 미사용모드로 mysql시작(권한 테이블을 사용하지 않는 옵션으로 데몬 실행)

# ./safe_mysqld  --skip-grant-tables &
[1] 12084
# Starting mysqld daemon with databases from /usr/local/mysql/data
#

# ./mysql -u  root  mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.22.24
Type 'help' for help.
mysql>

※ mysqld_safe 명령어는 mysql 데몬을 실행시킨다.

③ update문으로 root사용자 패스워드 갱신

mysql> update user set password=password('123') where user = 'root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> \q         
Bye

④ 실행중인 mysql 다시 종료(권한 테이블을 사용하지 않는 데몬을 종료)

# ps -ef | grep mysqld
root     12084 11558  0 20:10 pts/2    00:00:00 sh ./mysqld_safe --skip-grant-ta
root     12090 12084  0 20:10 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld
root     12092 12090  0 20:10 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld
root     12093 12092  0 20:10 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld
#
# killall mysqld
mysqld daemon ended
[1]+  Done                    ./mysqld_safe --skip-grant-tables
#

⑤  Mysql 데몬 재 실행 후 갱신된 패스워드로 로그인

# ./safe_mysqld &
[1] 12102
# Starting mysqld daemon with databases from /usr/local/mysql/data
#

# ps -ef | grep mysql
root     12102 11558  0 20:13 pts/2    00:00:00 sh ./mysqld_safe
root     12108 12102  0 20:13 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld
root     12110 12108  0 20:13 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld
root     12111 12110  0 20:13 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld

# mysql -u  root  -p
Enter Password: ***************

SQL
posted by 알 수 없는 사용자 2008. 11. 3. 17:36
로그인 오류의 경우 상태에 따라 여러가지 원인이 있다.
SQL의 로그파일에 상태코드가 기록되니 참고하여 문제를 돌파하자.

로그파일경로 : C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG

ERROR STATE

ERROR DESCRIPTION

2 and 5

Invalid userid

6

Attempt to use a Windows login name with SQL Authentication

7

Login disabled and password mismatch

8

Password mismatch

9

Invalid password

11 and 12

Valid login but server access failure

13

SQL Server service paused

18

Change password required


State: 16. : indicates that the session database could not be determined which maymean that the database is offline or the user does not have permissionsto access the database

출처 : http://blogs.msdn.com/sql_protocols/archive/2006/02/21/536201.aspx
http://social.msdn.microsoft.com/Forums/en-US/vblanguage/thread/747f01b4-288d-49ae-ab85-0fdf34ea2bfa/
SQL
posted by 준치 2008. 8. 26. 14:38

ERwin을 재설치하는 경우 특정파일(mmopn32.exe)에서 에러가 발생하면서
실행이 되지 않는다.
제네시스 사이트에서 확인한 바에 따르면 프로그램의 빌드차이와 같은 이유로
발생한다고 한다.

번거롭더라도 앞서 설치되었던 ERwin에 대한 정보를 모두 제거한 후에
다시 설치하여야 한다.

1. 프로그램을 삭제한다.
제어판 > 프로그램 추가/제거

2. 해당 폴더를 삭제한다.
Program Files > CA
Program Files > CA_LIC
CA_LIC 폴더가 특정 파일의 공유 및 사용으로 삭제가 되지 않는 경우
해당 파일을 사용하는 프로세스를 종료한다.
작업관리자 > 프로세스 > LogWatNT.exe

3.관련 파일을 삭제한다.
시스템폴더(Windows)에 있는 Erwin*.*, RTBPreferences.pref, SCAPI.ini

4. 서비스를 종료한다.
제어판 > 관리도구 > 서비스 > CA_LIC*

5. 레지스트리를 정리한다.
검색을 통해서 관련 키워드로 설정된 값을 삭제한다.
Erwin, AllFusion, CA_LIC
6. 리부팅한다.

cf.
ca.com에서 평가판을 직접 다운받았을 경우 하나의 평가판 프로그램을 중복해서
사용할 수 없다.
평가판 자체도 라이센스 키를 가지므로 평가기간 만료후에는
새로운 평가판을 다운로드하여 설치하여야 할 것 같다.
(실제로 적용해 보지는 않았다.) 

SQL
posted by 준치 2008. 8. 26. 14:33

상당히 복작합 일을 물으셨습니다. 하지만 답은 된다는 겁니다.

설명대로 차근차근 따라하시면 됩니다.
일단 SQL7 의 ERD를 가져오기 위해서 SQL7이 실행 중이어야 합니다.

1단계: ERWIN을 실행합니다. 빈화면이죠. 그리고 모드를 lOGICAL에서
       PHYSICAL로 바꿉니다.
2단계: 연결하고자 하는 SQL7과 연결 설정을 만듭니다. 여기서는 TCP/IP
       를 이용해서 직접연결하는 방법을 설명하겠습니다.(그러기 위해서는
       SQL7에서 넷트웍 라이브러리 디폴트 값이 TCP/IP로 미리 설정되어
       있어야 합니다. 대부분 TCP/IP를 디폴트로 쓰니까^^)

       메뉴 > SERVER > TARGET SERVER... 를 클릭하면  서버 타입을 설정하는
       메뉴가 잔뜩 나타납니다. 그상태에서 SQL7을 선택합니다.
       그 다음에 OK하고 빠져 나옵니다.

3단계: 메뉴 > SERVER > SQL SERVER CONNECTION메뉴가 있습니다.
       클릭하면 연결 설정하는 팝업창이 뜨는데 질문에 맞게 답을 넣어주고
       CONNECT버튼을 누르면 연결됩니다. ( SQL 서버에 등록된 사용자/
       PASSWORD/DATABASE NAME/SERVER NAME)을 입력하라고 하는데 주의
       할것은 아까 위에서 TCP/IP로 연결 한다고 했죠. 즉 서버 네임에
       IP주소를 넣어야 합니다. SQL서버가 탑재되어있는 서버의 IP주소.
       SQL서버에 독자적인 주소를 부여했다면 그 IP주소.

4단계: 연결 된 후에도 ERWIN 화면은 빈 화면입니다.(연결만 했지 ERD값을
       가져오는 작업을 하지 않았기 때문이죠) 요기서 ERD값을 가져오려면
       메뉴바 밑에 그림 버튼이 여러개 있죠. 그 위에 마우스 커서를 가져
       가면 풍선도움말이 나오는데, "COMPLETE COMPARE"가 있습니다. 그걸
       클릭하세요. 그러면 선택화면이 뜨는데 특별이 다른 조건이 없으면
       그냥 NEXT버튼을 클릭하고 그러면 RESOLVE DIFFERENCE 창이 열립니다.
       휴! 설명이 길군요. 화면이 두개로 나뉘어져 보이는데 왼쪽이 ERWIN에서
       가진값(아무것도 없을겁니다.) 오른쪽이 SQL 서버(트리구조로 잔뜩 있을
       겁니다.) 서버쪽을 스크롤 하면, 아래쪽에 TABLE이 있는데 마우스로 클릭
       하면 파랗게 반전 됩니다. 필요한 테이블을 다 선택하고 오른쪽에 있는
       "<-"를 클릭하면 선택한 자료가 옮겨집니다.

       요기서 중요! 그냥 OK 하면 자료가 옮겨지지 않습니다. 선택하고 "<-"
       버튼 누른 후에 화면 왼쪽아래를 보면 옮긴다는 의미의 버튼이 있습니다.
       그걸 누르면 자료가 옮겨가는 화면이 막 보이고 이때 "DONE"이나 "OK"
       하면 작업이 종료됩니다. 윗단계에서 잘 살펴 보면 PRIMIRY 키값도 있고
       스토어드 프로시져도있고, 사용자 정의도 있고 많이 있습니다. 선택하면
       알아서 옮겨 줍니다.

5단계: 자료가 드디어 ERWIN화면에 보일겁니다. 일단 저장하고, 다른 작업을 하세요.
       요기서 레포트 출력하면 쉽게 ERD하고 속성이나 기타정보가 들어간 산출물을
       만들 수 있습니다. 거의 원하는 모든 걸 뽑아 올 수 있습니다.


열심히 하세요.... 설명이 좀 황당하지만..... 참고로 ERWIN은 한국공급업체가
제니시스 입니다. 인터넷에서 메뉴얼을 받을 수 있는 걸로 압니다. 물론 회원등록
하고 전화한번 해야 하지만 메뉴을 받을 수 있기는 합니다.

메뉴얼에 앞에서 설명한 이런 내용은 없습니다. 그냥 레포트를 만들어서 워드로 넘긴
다든지 만들어진 ERD로 SQL7에 테이블이나 데이터베이스를 생성하는 방법정도 있습니다.
하여가 기력을 업하는데는 도움이 됩니다. ERWIN을 제대로 다루기 위해서는 SQL7에 대한
이해가 우선해야 하고,DB에 대한 기본적인 이해가 필요합니다. 특히 메쏘드가 사람을
괴롭히는데 각각의 메쏘드가 어떤 형태의 DB를 얘기하는지 알아야 제대로 된 테이블이
만들어 집니다. RDB에도 요기서는 종류가 여러 가지 입니다. 툭툭나오는 설명을 조심해서
해석 하셔야 합니다.

SQL
posted by 알 수 없는 사용자 2008. 8. 22. 15:16
-- 1.저장프로시져별 실행수 뽑기
select db_name(st.dbid) DBName
,object_schema_name(st.objectid,dbid) SchemaName
,object_name(st.objectid,dbid) StoredProcedure
,sum(qs.execution_count) Execution_count
from sys.dm_exec_cached_plans cp
join sys.dm_exec_query_stats qs on cp.plan_handle=qs.plan_handle
cross apply sys.dm_exec_sql_text(cp.plan_handle)st
where DB_Name(st.dbid) is not null and cp.objtype = 'proc'
group by DB_Name(st.dbid),object_schema_name(objectid,st.dbid),object_name(objectid,st.dbid)
order by sum(qs.execution_count) desc

--2. CPU소모량이 많은 저장프로시져 뽑기
select db_name(st.dbid) DBName
,object_schema_name(st.objectid,dbid) SchemaName
,object_name(st.objectid,dbid) StoredProcedure
,sum(qs.execution_count) Execution_count
,sum(qs.total_worker_time) total_cpu_time
,sum(qs.total_worker_time) / (sum(qs.execution_count) * 1.0) avg_cpu_time
from sys.dm_exec_cached_plans cp join sys.dm_exec_query_stats qs on cp.plan_handle=qs.plan_handle
cross apply sys.dm_exec_sql_text(cp.plan_handle) st
where db_name(st.dbid) is not null and cp.objtype='proc'
group by db_name(st.dbid), object_schema_name(objectid,st.dbid), object_name(objectid,st.dbid)
order by sum(qs.total_worker_time) desc

--3. IO량이 많은 저장프로시져 뽑기
select db_name(st.dbid) DBName
,object_schema_name(objectid,st.dbid) SchemaName
,object_name(objectid,st.dbid) StoredProcedure
,sum(execution_count) execution_count
,sum(qs.total_physical_reads+qs.total_logical_reads+qs.total_logical_writes) total_IO
,sum(qs.total_physical_reads+qs.total_logical_reads+qs.total_logical_writes) / sum
(execution_count) avg_total_IO
,sum(qs.total_physical_reads) total_physical_reads
,sum(qs.total_physical_reads) / (sum(execution_count) * 1.0) avg_physical_read
,sum(qs.total_logical_reads) total_logical_reads
,sum(qs.total_logical_reads) / (sum(execution_count) * 1.0) avg_logical_read
,sum(qs.total_logical_writes) total_logical_writes
,sum(qs.total_logical_writes) / (sum(execution_count) * 1.0) avg_logical_writes
from sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(qs.plan_handle) st
join sys.dm_exec_cached_plans cp on qs.plan_handle = cp.plan_handle
where db_name(st.dbid) is not null and cp.objtype = 'proc'
group by db_name(st.dbid),object_schema_name(objectid,st.dbid), object_name(objectid,st.dbid)
order by sum(qs.total_physical_reads+qs.total_logical_reads+qs.total_logical_writes) desc


--4. 처리시간이 긴 저장프로시져 뽑기
select db_name(st.dbid) DBName
,object_schema_name(objectid,st.dbid) SchemaName
,object_name(objectid,st.dbid) StoredProcedure
,sum(execution_count) execution_count
,sum(qs.total_elapsed_time) total_elapsed_time
,sum(qs.total_elapsed_time) / sum(execution_count) avg_elapsed_time
from sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(qs.plan_handle)st
join sys.dm_exec_cached_plans cp on qs.plan_handle = cp.plan_handle
where db_name(st.dbid) is not null and cp.objtype = 'proc'
group by db_name(st.dbid),object_schema_name(objectid,st.dbid),object_name(objectid,st.dbid)
order by sum(qs.total_elapsed_time) desc


참고 : http://www.databasejournal.com/features/mssql/article.php/3687186


출처 -- http://club.cyworld.com/club/main/club_main.asp?club_id=51912389 
           및 http://hyubidatnet.tistory.com/