2009-10-07 3 views
8

Access 2007 데이터베이스의 각 테이블에서 사용되는 공간을 쉽게 확인할 수있는 방법은 무엇입니까?Access 데이터베이스에서 가장 많은 공간을 차지하는 테이블을 결정하는 방법

나는 비정상적으로 큰 Access 데이터베이스를 가지고 있으며 어떤 테이블이 가장 많은 공간을 사용하는지 알아야합니다. 행 수는 사용 된 공간에 대한 충분한 정보를 제공하지 않습니다.

감사

/프랭크

답변

2

기능 액세스 데이터베이스의 경우는 메모리의 양을 테이블을 보여줍니다 요구와 indices 간단한 도구 Access Memory Reporter 1.0를 얻을 수 있습니다. 이 도구를 직접 사용해 보지 않았습니다.

가장 큰 테이블을 발견하면 무엇을 목표로합니까? MDB의 크기는 얼마입니까? 최근에 압축 했습니까?

압축하면 얼마나 줄어 듭니까? 즉, 많은 테이블/레코드를 만들고 삭제하는 것입니까? 그렇다면 TempTables.MDB page 내 웹 사이트에서 귀하의 응용 프로그램에서 임시 MDB를 사용하는 방법을 보여줍니다 참조하십시오.

테이블에서 많은 그래픽을 사용하고 있습니까?

+0

해당 도구를 지적 해 주셔서 감사합니다. 불행히도이 도구는 대부분의 공간이 "Memo/OLE"데이터로 채워져 있다고 말하면서 "Memo/OLE"데이터의 양이 어느 테이블에 포함되어 있는지 알려주지 않습니다. 대신 모든 "메모/OLE"데이터는 "## 한 테이블과 직접 관련이없는"헤더 아래에 그룹화됩니다. 데이터베이스를 압축해도 도움이되지 않습니다. MDB 파일은 전혀 축소되지 않습니다. - Frank –

+0

해결 방법으로, 이제 MDB 데이터베이스를 SQL Server로 가져 왔고 SQL Server Management Studio에서 "사용 된 데이터 공간"열을 목록보기에 추가했습니다. 이것은 어떤 테이블이 얼마나 많은 공간을 사용하는지 알려줍니다. 이 절차를 사용하여 데이터베이스의 단일 테이블이 거의 모든 디스크 공간을 사용한다는 것을 알게되었습니다. –

+0

메모/OLE 데이터는 실제로 레코드에 저장되지 않습니다. 대신 각 Memo/OLE가 실제로 저장되는 페이지에 대한 포인터가 있습니다. 그래서 그것은 실제로 기록이 아닙니다. 그러나 메모/OLE 필드가있는 테이블과 그 중 몇 개가 있는지 확인할 때 실행할 수있는 VBA 코드가 있습니다. 흠, 그리고 아마도 각각의 크기지만, 그것에 대해 조금 찌르 게 될 것입니다. 당신은 이제 어떤 테이블이 공간을 차지하고 있는지를 알아 낸 것처럼 보입니다. –

3

Access에서 데이터를 저장하기 위해 가변 길이 레코드를 사용하기 때문에 실제로 이것은 흥미로운 문제입니다.

이 작업을 정확하게 수행하는 가장 좋은 방법은 테이블의 모든 레코드와 모든 필드를 살펴보고 필드의 길이를 더하는 것입니다. 테이블이 큰 경우 시간이 걸릴 수 있습니다. 인덱스와 관계로 인해 크기를 선택하지 않습니다.

Total Access Analyzer 프로그램에는 간단한 레코드 크기 추정과 레코드 수를 사용하여 테이블 크기의 예상치를 제공하는 몇 가지 보고서가 있습니다. 다음은 그 예입니다. http://fmsinc.com/MicrosoftAccess/Documentation/Reports/Table_SizeBySize.html

야구장 추정이나 상대 크기 비교에는 충분할 수 있습니다.

측정하는 또 다른, 아마도 매우 정확한 방법은 새 데이터베이스를 만들고 그 안에 테이블을 내보내는 것입니다. 데이터베이스를 압축하고 빈 데이터베이스 크기를 뺀 다음 테이블의 크기를 가져옵니다.

+2

+1 ""새 데이터베이스를 만들고 뻔뻔한 플러그보다는 제안 테이블을 제안;) – onedaywhen

1

Access 2003을 사용 중이므로 테이블 레코드 수를 쉽게 얻을 수 있습니다. 테이블 레코드 수는 테이블 크기의 크기를 의미합니다. 레코드가 많을수록 크기가 커집니다. 테이블 레코드 수를 얻는 방법은 무엇입니까?

  1. 오픈 액세스 2003 데이터베이스,
  2. 클릭 탭 "데이터베이스 도구"
  3. 클릭 "데이터베이스 문서 도구 관리"는 "
  4. 클릭"모든 "(. 다른 이름이 될 수 있음), 및 OK "
  5. 새로운 흰 페이지에는 모든 테이블의 테이블 정보가 표시됩니다. "TXT"(Word 아이콘 아래)를 클릭하여 txt로 내보내기
  6. TXT를 파일로 저장합니다. 그것을 tableinfor.txt라고 부르 자.
  7. "tableinfo.txt"를 txt 편집기로 엽니 다. 검색 키워드 "RecordCount". 나는 어떤 테이블이 가장 많은 공간을 차지하는지 알고 있다고 생각합니다.
+1

나는 도움이 될 것 같지 않아요 : 당신이 두 개의 테이블 T1과 T2를 가지고 있다고 가정하고, 각각 하나의 필드가 메모 유형입니다. T1에는 1 백만 개의 레코드가 있고 각 메모 필드에는 1 개의 문자가 포함되어 있습니다. T2에는 1,000 개의 레코드가 있고 각 메모 필드에는 10,000자를 포함합니다. T2는 분명히 T1보다 더 많은 공간을 소비합니다 (즉, 약 10 배). 그러나 T2의 레코드 수는 T1보다 훨씬 적습니다. –

0

Access 데이터베이스를 구분하기 위해 각 테이블을 개별적으로 복사 한 다음 각 테이블의 크기를 비교할 수 있습니다. 그것은 테이블 자체의 정확한 크기를 제공하지는 않지만 각 파일의 크기는 대략 각 테이블의 크기를 보여줍니다.

2

나는 이것이 오래된 게시물 인 것을 알고 있지만, 같은 질문에 대한 나의 경험에 근거한 해결책이있다. 내 솔루션은 모든 테이블을 텍스트 파일로 내보내는 것입니다. 각 텍스트 파일의 크기는 mdb/accdb 파일에서 사용되는 공간의 양에 대략 비례합니다.

아래 코드는 현재 데이터베이스 폴더 아래에 하위 폴더 "temp_table_size"을 만들고 모든 테이블을 내 보냅니다. 로컬 테이블 만 처리하기위한 매개 변수를 전달할 수 있습니다. 끝나면 얼마나 많은 표가 내보내 졌는지 알려주고 폴더를 열 것인지 묻습니다. 크기별로 폴더를 정렬하면 범인을 빨리 식별 할 수 있습니다. 이 루틴을 사용하여 배포하기 전에 잊어 버린 테이블을 찾거나 다른 사람의 데이터베이스를 상속 할 때 큰 테이블의 위치를 ​​파악할 수 있습니다.

나를 위해이 루틴을 더욱 편리하게 만들기 위해이 코드를 Access 추가 기능에 추가하여 모든 데이터베이스에 대해 실행할 수 있도록했습니다. 이 추가 기능에는 다른 모든 Access 개체를 내보내는 기능이 있으므로 어떤 양식/보고서가 데이터베이스의 공간을 차지하는 지 확인할 수 있습니다. 관심이 있다면 공유 할 곳을 찾을 것입니다.

Public Sub DocDatabase_Table(Optional bolLocalTablesOnly As Boolean = False) 
'==================================================================== 
' Name: DocDatabase_Table 
' Purpose: Exports the tables in this database to a series of 
'   text files. The size of each text file will give you 
'   an idea of what tables use the most disk space. 
' 
' Author: Ben Sacherich 
' Date: 5/2/2011 
'==================================================================== 
    On Error GoTo ErrorHandler 

    Dim dbs As Database 
    Dim td As TableDef 
    Dim strSaveDir As String 
    Dim lngObjectCount As Long 
    Dim lngCount As Long 
    Dim strMsg As String 
    Dim varReturn As Variant 

    Set dbs = CurrentDb() ' use CurrentDb() to refresh Collections 

    ' Export to a subfolder of the current database folder. 
    strSaveDir = CurrentProject.path & "\temp_table_size\" 

    If Len(strSaveDir) > 0 Then 

     strMsg = "This feature exports all of the tables in this database to a series of " _ 
      & "comma delimited text files. The size of each text file will give you " _ 
      & "an idea of what tables use the most disk space." & vbCrLf & vbCrLf 

     ' Get a count of the tables, minus the system tables. 
     If bolLocalTablesOnly = True Then 
      lngObjectCount = DCount("Name", "MSysObjects", "Type=1 AND Name not like 'MSys*' AND Name not like '~*'") 
      strMsg = strMsg & "There are " & lngObjectCount & " local tables in this database. " _ 
       & vbCrLf & vbCrLf 
     Else 
      ' Include Local, Linked, and ODBC tables 
      lngObjectCount = DCount("Name", "MSysObjects", "Type in (1,4,6) AND Name not like 'MSys*' AND Name not like '~*'") 
      strMsg = strMsg & "There are " & lngObjectCount & " tables in this database " _ 
       & "(including local, linked, and ODBC)." & vbCrLf & vbCrLf 
     End If 
     strMsg = strMsg & "The tables will be exported to a subfolder of the current database: " _ 
      & strSaveDir & vbCrLf & vbCrLf 
     strMsg = strMsg & "Do you want to continue?" 

     If MsgBox(strMsg, vbYesNo + vbInformation, "Export Tables") = vbYes Then 

      If Dir(strSaveDir, vbDirectory) = "" Then 
       MkDir strSaveDir 
      End If 

      ' Initialize and display message in status bar. 
      varReturn = SysCmd(acSysCmdInitMeter, "(" & Format((lngCount)/lngObjectCount, "0%") & ") Preparing tables", lngObjectCount) 

      dbs.TableDefs.Refresh 
      For Each td In dbs.TableDefs ' Tables 
       If (bolLocalTablesOnly = True And Len(td.Connect) = 0) _ 
        Or (bolLocalTablesOnly = False) Then 

        If Left(td.Name, 4) <> "MSys" And Left(td.Name, 1) <> "~" Then 
         Debug.Print td.Name, td.Attributes 

         ' Update message in status bar. 
         varReturn = SysCmd(acSysCmdSetStatus, "(" & Format((lngCount + 1)/lngObjectCount, "0%") _ 
          & ") Exporting table: " + td.Name) 

         DoCmd.TransferText acExportDelim, , td.Name, strSaveDir & "Table_" & td.Name & ".txt", True 
         lngCount = lngCount + 1 

        End If 
       End If 
      Next td 

      'Remove the Progress Meter 
      varReturn = SysCmd(acSysCmdRemoveMeter) 

      If MsgBox("Exported " & lngCount & " object(s)." _ 
       & vbCrLf & vbCrLf & "Do you want to open the destination folder: " & strSaveDir & " ? " _ 
       , vbSystemModal + vbYesNo + vbInformation, "Table Size") = vbYes Then 

       ' Open the output folder in Windows Explorer 
       Call Shell("explorer.exe " & strSaveDir, vbNormalFocus) 
      End If 
     End If 
    End If 

Exit_Sub: 
    Set td = Nothing 
    Set dbs = Nothing 

    Exit Sub 

ErrorHandler: 

    Debug.Print Err.Number, Err.Description 
    Select Case Err 
     Case "3011" 
      MsgBox "Table '" & td.Name & "' could not be found or has a broken link." _ 
       & vbCrLf & vbCrLf & "Link: " & td.Connect _ 
       & vbCrLf & vbCrLf & "Click OK to continue.", vbExclamation, "Error 3011" 
      Resume Next 
     Case "75" 
      ' This happens when you try to create a folder name that already exists. 
      ' For this Q&D function, ignore the error. 
      Resume Next 
     Case Else 
      MsgBox Err.Description 
      Resume Next 
    End Select 

    GoTo Exit_Sub 

End Sub 
관련 문제