분류 전체보기
-
VS.NET 2003에서 오라클DB 연결하기2014.03.20
-
사용자데이터베이스 및 시스템데이터베이스의 이동2013.08.09
-
Windows 명령어 (1) 프로세스 강제 정지2012.11.14
Windows XP + IIS5 + ASP.NET 1.1 & ASP.NET 2.0
Visual Studio .NET 2003 환경에서 ASP.NET 1.1 기반 웹사이트를 유지보수하기 위해 윈도우 8.1과 윈도우 7에서 삽질을 하다가 결국 VMWare 위에 Windows XP를 설치한 후 VS.NET 2003을 설치하여 .NET Framework 1.1을 설치하여 웹사이트 수정을 했다.
그런데 또다른 웹사이트는 .NET Framework 2.0 기반에서 돌아가고 있었다. 윈도우 XP의 IIS 5.1은 단일 웹사이트에 가상 디렉터리별로 사이트를 유지해야 하는데 가상 디렉터리별로 다른 버전의 .NET Framework를 지정해야 하는데 윈도우 서버처럼 ASP.NET 탭이 보이지 않았다. 다시 구글링을 총동원하여 삽질을 하던 중 다음과 같은 내용을 확인했다.
%Windir%\Microsoft.NET\Framework\버전\aspnet_regiis [-i IIS에 닷넷프레임워크 설치 , -u IIS에 닷넷프레임워크 제거]
구글링 결과로는 ASP.NET 탭이 표시되어야 함에도 표시가 안되어 다시 삽질 결과 결국 .NET Framework 2.0을 설치해 보면 되지 않을까하는 맘으로 설치를 했다. 표시!!!
ASP.NET 기반 웹사이트의 유지보수를 위해 석기시대부터 청동기, 철기시대를 거슬러 올라가며 역사를 훑는 기분이다. ㅠㅠ 다행히 ASP.NET MVC 적용 사이트는 없지만 언젠가는 다시 리뉴얼 해야 할 때를 대비해서 준비는 해야할 것 같다.
VS.NET 2003에서 오라클DB 연결하기
ASP.NET 1.1 환경에서 닷넷 웹 어플리케이션을 빌드해야 되는 상황이 발생했다. 윈도우7과 윈도우8.1에서 삽질을 한 끝에 마음을 비우고 윈도우XP에 VS.NET 2003과 오라클 클라이언트만을 깔고 빌드 테스트를 했다.
개발환경
Windows XP (SP3) + IE8
VS.NET 2003 Prof.
Oracle Client 11.2.0.3.0 (DBMS의 버전을 따름)
설치순서
1. Windows XP 설치
2. IIS 추가 (FrontPage 2000 Server Extentions)
3. VS.NET 2003 설치
4. Oracle - Client
5. 환경변수 ORACLE_HOME 지정
ASP.NET에서 오라클DB로 접근하기 위해서는 환경변수 ORACLE_HOME에 클라이어트 설치 경로를 지정해주어야 한다. 이 경로를 보고 TNSNAME.ora 파일의 위치를 확인하는 듯 하다. 환경변수를 지정해야 한다는 점을 모르고 MS사의 <Microsoft .NET Oracle Client> 프로그램을 설치하는등 다시 삽질을 했었다. MS사의 Oracle Client 프로그램은 .NET Framework 1.0을 위한 System.Data.OracleClient.dll(.NET Framework Data Provider for Oracle)을 제공하며 .NET Framework 1.1에는 기본적으로 System.Data.OracleClient.dll 파일이 제공되고 있었다. .NET Framework 1.0은 사용해보지 않아 제공 유무를 알 수 없었다.
OTN 문서(Bulid a .NET Application on the Oracle Database for Visual Studio .NET 2003)를 확인하니 Oracle Data Provider for .NET(ODP.NET)을 사용한 예제와 문서를 제공하고 있었다. .NET Framework 4에서부터는 <.NET Framework Data Provider for Oracle> (System.Data.OracleClient.dll) 대신 <Oracle Data Provider for .NET> (ODP.NET; Oracle.DataAccess.dll)을 사용하도록 권장하고 있었다. 현재 .NET Framework 4.5까지 제공은 하고 있으나 오라클 공급자를 사용하도록 권하고 있고 향후 버전에서는 없어질 예정이라고 한다.
사용자데이터베이스 및 시스템데이터베이스의 이동
참고 : http://msdn.microsoft.com/ko-kr/library/ms345408(v=sql.105).aspx#MoveMaster
Windows 7 상에 MS SQL Server 2008 R2 EXPRESS를 설치해서 공부하는 중 한가지 문제가 발견되었다. 시스템 폴더가 설치되어 있는 C 드라이브가 SSD(256GB)이고 D 드라이브에 HDD(1TB)를 부착해 두었는데 설치할 때 깜박 잊고 데이터베이스의 설치 경로를 바꾸지 않은 것이다. 다시 설치할까 생각을 했지만 비주얼스튜디오와 MS SQL의 서비스팩 등이 설치되어 있는지라 다시 설치하는 건 번거로울 것 같아서 데이터베이스 파일의 경로를 변경하기로 했다.
일단 MSDN을 검색했더니 사용자데이터베이스와 시스템데이터베이스의 경로를 이동하는 방법을 알 수 있었다. MS SQL Server 2005, 2008, 2008 R2, 2012 버전에 적용 가능하다.
1. 일단 데이터베이스의 논리적 이름을 확인한다.
USE master
GO
SELECT name FROM sys.master_file;
GO
2. 계획된 재배치 및 예약된 디스크 유지 관리 절차에 따라 사용자데이터베이스와 master를 제외한 시스템데이터베이스의 변경 정보를 적용시킨다.
USE master
GO
ALTER DATABASE 데이터베이스명 MODIFY FILE ( NAME = 논리이름 , FILENAME = '변경할 파일의 경로명' );
GO
예) tempdb 경로 변경
USE master
GO
ALTER DATABASE tempdb MODIFY FILE ( NAME = tempdev , FILENAME = 'D:\SQLData\tempdb.mdf' );
GO
ALTER DATABASE tempdb MODIFY FILE ( NAME = templog , FILENAME = 'D:\SQLData\templog.ldf' );
GO
쿼리 실행 후 서비스를 중지시키고 해당 파일을 새 위치로 이동한 뒤에 서비스를 시작한다.
3. 마지막으로 master 데이터베이스의 경로를 변경한다.
1) 시작 - 모든 프로그램 - Microsoft SQL Server 2008 R2 - 구성 도구 - SQL 구성 관리자 를 클릭한다.
2) 「SQL Server 서비스」노드에서 SQL Server 인스턴스를 선택하여 속성 창을 띄운다.
3) SQL Server 속성 대화상자에서 고급 탭을 선택한다.
4) 시작 매개 변수의 값을 변경한다. -d 는 data 파일의 경로이며, -e 는 에러로그, -l 은 log 파일의 경로이다.
Windows 명령어 (1) 프로세스 강제 정지
taskkill
C:\Users\Administrator> taskkill/? TASKKILL [/S 시스템 [/U 사용자 이름 [/P [암호]]]] { [/FI 필터] [/PID 프로세스 id | /IM 이미지 이름] } [/T] [/F] 설명: 이 도구는 프로세스 ID(PID) 또는 이미지 이름으로 작업을 종료하는 데 사용합니다.
프로세스 이름이 foo.exe인 모든 프로세스 강제종료
C:\Users\Adminitrator> taskkill /IM javaw.exe /F
모든 프로세스(/IM)을 강제종료(/F)한다.
iBatis2 (1) 설정하기
예제실행환경
- Java SE 6
- iBatis 2.3.5
- JUnit 4
- Eclipse Java EE IDE (Juno)
MySQL Table 준비하기
CREATE TABLE `user` ( `id` int(5) NOT NULL AUTO_INCREMENT, `username` varchar(16) NOT NULL, `password` varchar(16) NOT NULL, `level` tinyint(2) NOT NULL DEFAULT '0', `reg_date` date NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
SQL Maps 환경설정
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <properties resource="exercise/resource/development.properties"/> <typeAlias type="exercise.domain.User" alias="User"/> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="${driver}"/> <property name="JDBC.ConnectionURL" value="${url}"/> <property name="JDBC.Username" value="${user}"/> <property name="JDBC.Password" value="${pass}"/> </dataSource> </transactionManager> <sqlMap resource="exercise/ibatis2/persistence/SqlMap.xml"/> </sqlMapConfig>
SQL Map XML
SqlMap.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> <sqlMap> <parameterMap id="userParameterMap" class="User"> <parameter property="username" jdbcType="VARCHAR"/> <parameter property="password" jdbcType="VARCHAR"/> <parameter property="level" jdbcType="TINYINT"/> <parameter property="regDate" jdbcType="VARCHAR"/> </parameterMap> <insert id="add" parameterMap="userParameterMap"> INSERT INTO user ( id, username, password, level, reg_date ) VALUES ( NULL, ?, ?, ?, ? ) </insert> <delete id="deleteAll"> DELETE FROM user </delete> <select id="count" resultClass="int"> SELECT COUNT(*) FROM user </select> </sqlMap>
Unit Test
TestSqlMap.java
package exercise.ibatis2.test; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import java.io.Reader; import java.sql.SQLException; import java.util.Arrays; import java.util.List; import org.junit.Before; import org.junit.Test; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; import exercise.domain.User; public class TestSqlMap { static String resource = "exercise/ibatis2/persistence/SqlMapConfig.xml"; static Reader reader; static SqlMapClient sqlMap; List<user> users; @BeforeClass public static void setUpBeforeClass() throws Exception { reader = Resources.getResourceAsReader(resource); sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); } @Before public void setUp() throws Exception { users = Arrays.asList( new User("user1", "1234", 1, "2012-11-09"), new User("user2", "1234", 1, "2012-11-09"), new User("user3", "1234", 1, "2012-11-09") ); } @Test public void testAdd() { try { sqlMap.delete("deleteAll"); sqlMap.insert("add", users.get(0)); assertThat(1, is(sqlMap.queryForObject("count"))); } catch (SQLException e) { e.printStackTrace(); } } }