반응형

설치파일을 찾는데 번번히 애먹어서 그냥 찾아서 올린다.


vs_community.exe



반응형

①SQLPLUS /NOLOG

②CONN /AS SYSDBA

③ALTER  TABLESPACE TS_TABLESPACE_NAME ADD DATAFILE 'D:\ORADATA\TBLDATA_FILENAME.DBF' SIZE 200M;

④ALTER DATABASE DATAFILE 'D:\ORADATA\TBLDATA_FILENAME.DBF' AUTOEXTEND ON NEXT 200M MAXSIZE 20000M;


보통 하드디스크가 여유가 있으면 오라클이 테이블스페이스를 자동으로 잡아주지만 하드디스크의 용량이 꽉차면 테이블 스페이스

를 따로 잡아줘야한다.(하드를 추가하거나 여유공간이 있는 다른 디스크에 추가한다)

이런경우에 1)~4)의 절차대로 실행해준다. 참고로 1),2)는 sqlplus에 sysdba계정으로 접근하는 절차이므로 상황에 맞게 접속하면된다.

반응형

select   substr(a.tablespace_name,1,30) tablespace ,

         round(sum(a.total1)/1024/1024,1) "전체" ,

         round(sum(a.total1)/1024/1024,1)-round(sum(a.sum1)/1024/1024,1) "사용량MB" ,

         round(sum(a.sum1)/1024/1024,1) "여유"

from

         (select   tablespace_name,0 total1,sum(bytes) sum1,max(bytes) MAXB,count(bytes) cnt

          from     dba_free_space

          group by tablespace_name

          union

          select   tablespace_name,sum(bytes) total1,0,0,0

          from     dba_data_files

          group by tablespace_name) a

group by a.tablespace_name

order by tablespace;



출처 : http://kwon8999.tistory.com/3

반응형

실행시킬 SQL문을 C:\SpoolSelect.sql로 저장 한다.

---- SpoolSelect.sql  시작 ---

SELECT empno, sal, ename, to_char(hiredate, 'RRRR-MM-DD') FROM emp;

SELECT deptno, dname FROM dept;

---- SpoolSelect.sql  끝 ---



C:\> SQLPLUS scott/tiger 


-- header가 display되지 않고 데이터만 display 

SQL> SET HEADING OFF



-- pagesize의 default는 14이며 그대로 하면 

-- 14줄마다 1줄씩 공백이  생기므로 

-- 그런 현상을 방지하기 위해 크게 지정한다. 

SQL> SET PAGESIZE 10000     



-- linesize도 record 길이만큼 지정하여 

-- 아래로 구분되지 않도록 합니다.

SQL> SET LINESIZE  300        



-- 명령이 display되지 않도록 한다.

SQL> SET ECHO OFF



-- 조회 결과가 화면에 나오지 않도록 한다.  

SQL> SET TERM OFF



-- data가 들어가는 화일 이름을 지정 한다. 

SQL> SPOOL  C:\test.txt    



-- 스크립트 파일을 실행 시킨다. 

SQL> @C:\SpoolSelect.sql



SQL> SPOOL Off


-- test.txt file이 생성 되었는지 확인 해보자.




출처 : http://www.gurubee.net/lecture/1152

반응형

참조 : http://www.codeproject.com/Articles/11505/NGif-Animated-GIF-Encoder-for-NET




c#으로 만든 GIF생성프로그램


NGif_src의 소스를 참조했다.


뭐... 말이 참조지 실제로 만든부분은 UI에 불과하고 실제 소스는 NGif_src의 것을 그대로 썼다.

NGif는 .net 2003버전으로 만들어진 프로젝트인데 2010으로 변환해서 사용하니 아무문제 없이 잘돌아간다.


아래는 내가 임의로 만든 GIF생성프로그램의 UI이다.


1)은 저장할 파일명이다.

2)는 파일이 저장될 경로

3)은 재생돼는 시간단위이다. 100밀리초 이므로 0.1초 단위로 이미지가 재생된다.

4)반복설정은 모든이미지가 재생된 후 처음부터 다시 자동재생할지 여부를 설정한다.

5)GIF의 소스가 될 이미지 목록이다. 정렬된 순서로 GIF이미지에 삽입된다.

6)2의 저장할 경로를 바꾸는 버튼이다.

7)소스가 될 이미지들을 불러온다.

8)5에서 선택부분이 체크된 항목들을 삭제한다.

9)GIF를 생성한다.

10)5의 목록은 다중선택 할 수 있는데 선택된 항목의 선택을 표시한다.

11)5의 목록에서 다중선택된 항목을 해제한다.

12)일괄전체 선택한다.

13)일괄전체 해제한다.

14)파란색으로 강조된 선택항목을 윗열로 올려서 순서를 바꾼다.

15)파란색으로 강조된 선택항목을 아랫열로 내려서 순서를 바꾼다.

16)목록에 올라와있는 이미지들을 18의 미리보기창에서 재생한다.

17)16버튼을 클릭해서 자동재생돼는 이미지를 중지시킨다.

18)5의 목록에서 선택을 하면 이미지가 미리보여지며 16버튼을 클릭해서 자동재생시에도 표시된다.

    자동재생시의 이미지는 실제 GIF와 유사하지만 반드시 일치하지는 않는다.(각이미지의 가로세로 비율 때문에 실제이미지와

    다르게 보일 수 있다.




GIFmake.zip


반응형

굉장히 간단한 내용이다.

AJAX로 사용하는 요즘은 거의 사용할 일이 없는 태크닉인데

asp.net 2.0으로 구축된 사이트를 유지보수하다 보니 발생하는 귀찮음 때문에 찾아보다가 주저리 주저리 써본다.


Page.aspx에 


<asp:Label ID="lbl01" runat="server"></asp:Label>

<asp:Label ID="lbl02" runat="server"></asp:Label>

<asp:Label ID="lbl03" runat="server"></asp:Label>

<asp:Label ID="lbl04" runat="server"></asp:Label>

<asp:Label ID="lbl05" runat="server"></asp:Label>


와 같이 Label컨트롤을 순차적으로 생성 돼있다.

이 Label들에 값들을 일일이 코딩해주려니 귀찮고  for문등을 이용해서 자동으로 값을 넣고 싶은데 방법을 잘모르겠고...


여튼 해결 방법은 다음과 같다.

((Label)Page.FindControl(id)).Text = _txt;

굉장히 단순하다.

이를 응용해서 for문으로 값을 넣는다면

string[] _values = {"1","2","3","4","5"};

의 값을 자동으로 넣는다고 가정해보자.

for(int i = 0; i < 5; i++)

{

((Label)Page.FindControl("lbl0" + (i + 1).toString() )).Text = _values[i];

}

이런식으로 처리하면 매우 간단하다. 

여튼 핵심은 Page.FindControl("ID")가 돼겠다.



반응형

<script type="text/javascript">


var num = 3.14;


// 그대로 출력

document.write(num, '<br />');

// 출력 결과: 3.14


// 소수점 이하 6자리로 강제로 출력

document.write(num.toFixed(6), '<br />');

// 출력 결과: 3.140000





num = 3.1415926535897932384626433832795;


// 그대로 출력

document.write(num, '<br />');

// 출력 결과: 3.141592653589793


// 소수점 이하 3자리로 출력

document.write(num.toFixed(3), '<br />');

// 출력 결과 (반올림됨): 3.142



</script>


※출처 : http://mwultong.blogspot.com/2007/08/javascript-tofixed.html


자바스크립트에서 숫자가 0.02555555555555555555555555555555와 같이 나올때

이숫자를 0.03으로 변경할때 사용한다.

숫자가 지정된 변수에 val.toFixed(2);로 사용한다.

반응형


폼디자인

소스.

/*

 * 2014.03.10

 * 티스토리 블로그등에 분할 압축되어 올라온 파일들을 일괄다운로드 하기위해 만든 프로그램

 */

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Net;

using System.IO;

using System.Text.RegularExpressions;

using System.Diagnostics;

using System.Threading;


namespace FileDownloader

{

    public partial class Form1 : Form

    {

        private int maxFile = 0;


        public Form1()

        {

            InitializeComponent();

        }

        /// <summary>

        /// 인터넷 html에서 다운로드 받을 수 있는 파일을 불러와서 목록으로 만든다.

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void btnLoad_Click(object sender, EventArgs e)

        {

            if (txtURL.Text.Trim() != "")

            {

                if (dgFiles.Rows.Count > 0)

                {

                    dgFiles.Rows.Clear();

                }

                //01.경로에서 html소스가져오기

                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(txtURL.Text.Trim());

                HttpWebResponse res = (HttpWebResponse)req.GetResponse();

                StreamReader sr = new StreamReader(res.GetResponseStream());

                string html = sr.ReadToEnd();

                

                //02.html에서 <a>...</a>로 묶인 태그 뽑아내기 

                MatchCollection m1 = Regex.Matches(html, @"<a.*?>.*?</a>", RegexOptions.Singleline);

                

                foreach (Match m in m1)

                {

                    string value = m.Groups[0].Value;

                    for (int i = 0; i < value.Length; i++)

                    {

                        if(value.Substring(i,1) == ">")

                        {

                            bool chk = false;


                            //03.파일명(실제파일명과 링크명이 다를 수 있다.)

                            string filename = value.Substring(i + 1, value.Length - i - 1).Replace("</a>", "");

                            //04.티스토리브로그에서 파일다운로드시 이미지링크가 있는경우가 있어서 이를 우회하기 위한 태그

                            

                            if (txtFilter.Text.Trim() == "" || filename.Replace(txtFilter.Text.Trim(), "") != filename)

                            {

//필터링할 단어가 없으면 전체 </a>태그를 보여주고 필터링과 일치할 경우일치하는 일부</a>태그들을 보여준다.

                                if (txtFilter.Text.Trim() != "")

                                {

                                    for (int j = 0; j < filename.Length; j++)

                                    {

                                        if (filename.Substring(j, 1) == ">")

                                        {

                                            filename = filename.Substring(j + 1, filename.Length - j - 1);

                                            j = filename.Length;

                                            chk = true;

                                        }

                                    }

                                }

                                else

                                {

                                    chk = true;

                                }

                                if (chk == true)

                                {

                                    for (int j = 0; j < filename.Length; j++)

                                    {

                                        if (filename.Substring(j, 1) == ">")

                                        {

                                            filename = filename.Substring(j + 1, filename.Length - j - 1);

                                            break;

                                        }

                                    }

                                    DataGridViewRow row = (DataGridViewRow)dgFiles.Rows[0].Clone();

                                    row.Cells[0].Value = true;

                                    row.Cells[1].Value = filename;


                                    MatchCollection m2 = Regex.Matches(value, @"href=\""(.*?)\""", RegexOptions.Singleline);

                                    foreach (Match n in m2)

                                    {

                                        //href=태그 검출

                                        string value2 = n.Groups[1].Value;

                                        row.Cells[2].Value = value2;

                                    }


                                    dgFiles.Rows.Add(row);

                                    i = value.Length;

                                }

                            }

                        }

                    }

                }

            }

            else

            {

                MessageBox.Show("URL이 없습니다.");

            }

        }

        /// <summary>

        /// 다운받을 경로변경

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void btnPath_Click(object sender, EventArgs e)

        {

            FolderBrowserDialog dig = new FolderBrowserDialog();

            if (dig.ShowDialog() == DialogResult.OK)

            {

                txtDown.Text = dig.SelectedPath;

            }

        }

        /// <summary>

        /// 다운로드시작

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void btnDown_Click(object sender, EventArgs e)

        {

            maxFile = 0;

            for (int i = 0; i < dgFiles.Rows.Count - 1; i++)

            {

                if ((bool)dgFiles.Rows[i].Cells[0].Value == true)

                {

                    maxFile++;

                }

            }

            proTotal.Style = ProgressBarStyle.Continuous;

            proTotal.Minimum = 0;

            proTotal.Maximum = maxFile;

            proTotal.Step = 1;

            proTotal.Value = 0;


            Thread th = new Thread(down_start);

            th.Start();

        }

        

        delegate void probarCall(int val);

        delegate void enableCtrl(Control btn, bool chk);

        int cntfile = 0;


        /// <summary>

        /// 컨트롤 활성/비활성

        /// 멀티스레드를 활용하므로 다운로드 중에 다른 버튼들을 클릭하지 않도록 한다.

        /// </summary>

        /// <param name="chk"></param>

        private void ctlEnables(bool chk)

        {

            string[] aryCtl = { "btnAll", "btnAll2", "btnLoad", "btnPath", "btnDown", "btnAll", "btnAll2", "txtURL", "txtDown", "txtFilter", "dgFiles" };

            for (int i = 0; i < aryCtl.Length; i++)

            {

                Control[] ctl = Controls.Find(aryCtl[i], false);

                ctl[0].Invoke(new enableCtrl(enable_control), new object[] { ctl[0], chk });

            }

        }

        /// <summary>

        /// 다운로드 시작

        /// </summary>

        private void down_start()

        {

            for (int i = 0; i < dgFiles.Rows.Count - 1; i++)

            {

                if ((bool)dgFiles.Rows[i].Cells[0].Value == true)

                {

                    maxFile++;

                }

            }


            if (maxFile > 0)

            {

                string[] dirs = txtDown.Text.Trim().Split('\\');

                string _dir = "";

                for (int i = 0; i < dirs.Length; i++)

                {

                    if (i == 0)

                    {

                    }

                    else

                    {

                        _dir = _dir + "\\" + dirs[i];


                        DirectoryInfo di = new DirectoryInfo(_dir);

                        if (!di.Exists)

                        {

                            di.Create();

                        }

                    }

                }


                ctlEnables(false);

                WebClient client = new WebClient();

                for (int i = 0; i < dgFiles.Rows.Count - 1; i++)

                {

                    if ((bool)dgFiles.Rows[i].Cells[0].Value == true)

                    {

                        try

                        {

                            string file = dgFiles.Rows[i].Cells[2].Value.ToString();

                            client.DownloadFile(file, txtDown.Text + "\\" + dgFiles.Rows[i].Cells[1].Value.ToString());

                            cntfile++;

                            proTotal.Invoke(new probarCall(downing_per), new object[] { cntfile });

                        }

                        catch(Exception ex)

                        {

                            MessageBox.Show(ex.Message);

                        }

                    }

                }

                MessageBox.Show("다운로드 완료했습니다.");


                ctlEnables(true);

            }

            else

            {

                MessageBox.Show("다운로드 할 파일이 없습니다.");

            }

        }

        /// <summary>

        /// 멀티스레드 상태에서 컨트롤을 제어하기 위해 빼놓은 함수

        /// </summary>

        /// <param name="ctl"></param>

        /// <param name="chk"></param>

        private void enable_control(Control ctl, bool chk)

        {

            ctl.Enabled = chk;

        }

        

        /// <summary>

        /// 전체 파일 다운로드 진행정도

        /// </summary>

        /// <param name="var"></param>

        private void downing_per(int var)

        {

            proTotal.Value = var;

        }

        /// <summary>

        /// 전체파일 선택

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void btnAll_Click(object sender, EventArgs e)

        {

            for (int i = 0; i < dgFiles.Rows.Count - 1; i++)

            {

                dgFiles.Rows[i].Cells[0].Value = true;

            }

        }

        /// <summary>

        /// 전체파일 선택 취소

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void btnAll2_Click(object sender, EventArgs e)

        {

            for (int i = 0; i < dgFiles.Rows.Count - 1; i++)

            {

                dgFiles.Rows[i].Cells[0].Value = false;

            }

        }


        private void btnArea_Click(object sender, EventArgs e)

        {

            for (int i = 0; i < dgFiles.Rows.Count - 1; i++)

            {

                if (dgFiles.Rows[i].Selected == true)

                {

                    dgFiles.Rows[i].Cells[0].Value = true;

                }

            }

        }


        private void btnArea2_Click(object sender, EventArgs e)

        {

            for (int i = 0; i < dgFiles.Rows.Count - 1; i++)

            {

                if (dgFiles.Rows[i].Selected == true)

                {

                    dgFiles.Rows[i].Cells[0].Value = false;

                }

            }

        }

    }

}


-------------------------------------------------------------------------------------

기존에 만들었던 분할 파일 프로그램이 허접하여 새로 만들었다.

기능이 대단하지는 않고 연습/공부 겸 만들었으며 나중에 소스 참조용으로 올린다.

이프로그램에는 멀티스래드, WebClient, DataGridView등의 제어 관련된 부분이 포함되어 있다.

자주사용하지 않다보니 까먹게 되어서 소스를 통째로 올린다.



FileDownloader.zip


반응형

jQuery로 Div객체를 에니메이션 효과를 활용하여 스크롤하는 경우가 있다.

이럴땐 

$('#divID')animate({scrollLeft:'100px'});

와같은 방식으로 사용하면 된다. scrollLeft는 DIV객체의 x좌표를 이동하는 구분자이다.

$('#divID')animate({width:'100px'});와 같이 사용해도 된다. 상황에 맞게 응용하면 되며 

상세한 옵션들은 검색해보자.

반응형

설치 환경은 MS Windows기준

1.오라클서버를 설치한다.




2.계정을 생성한다.

CREATE USER [ID] IDENTIFIED BY [PASSWORD];

3.생성된 계정에 권한을 부여한다.

GRANT CONNECT, RESOURCE TO [ID];

3.Sqlplus에 관리자로 접근한다.

c:/>sqlplus /nolog

SQL> conn SYS/pwd as sysdba;

4.신규생성한 계정에 DBA권한을 부여한다. :원래는 이렇게 하면 안돼지만 귀찮아서...

SQL> grant DBA to admin;
5.sqlplus를 종료한 후 cmd상에서 .dmp파일을 임포트 해준다.
c:>imp userid=admin/1234 file='C:\full.dmp'  full=y
6.잘될거다. 만약 문제가 생긴다면 services.msc에서 오라클 관련 서비스들이 (리스너 라던가) 제대로 살아있는지 확인해보자.


+ Recent posts