Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

SQL Server zrzut bazy

19 views
Skip to first unread message

Cezary Grądys

unread,
Feb 5, 2021, 1:29:14 PM2/5/21
to
Witam.

Sorry za lamerskie pytanie, ale potrzebuje zrobić zrzut bazy w formie
czytelnej dla człowieka, żeby znaleźć w której konkretnie tabeli sa
zapisywane wartości. Tak, żeby się dało użyć grep (pewnie jakiegoś
odpowiednika z windy) i znaleźć.
Widze możliwość eksportu do pliku, ale tam trzeba podać tabelę, a jakbym
wiedział którą, to już bym tego nie potrzebował robić, od razu bym
zrobił SELECT ;)

Pomożecie? Grozi mi spisywanie z ekranu ok 100 wartości co miesiąc.


--
Cezary Grądys
czar...@wa.onet.pl

Adam

unread,
Feb 5, 2021, 4:33:58 PM2/5/21
to
W dniu 2021-02-05 o 19:28, Cezary Grądys pisze:
Zrzut bazy?

Może wystarczy Ci skrypt, pokazujący ilość rekordów w tabelach, a
później będziesz porównywał liczniki bazy starszej z nowszą.


/*
--------------------------------------------------------------------------------
Script : ListTableInBase.sql
Author : Dariusz 'DBSoft' Brejnak (c) 2010
Created : 2010-09-01

Skrypt wyświetla listę tabel zawartych w aktualnej bazie danych.
Za pomocą procedura sp_spaceused
zwracane są informacje o liczbie wierszy, wielkości plików bazy danych
w KB lub obiektów bazodanowych i liczbie pustych stron w
poszczególnych plikach.

wynik:
servername basename name rows reserved data
index_size unsed
MSSQLEXPRESS AdventureWorks Address 19614 4984
2224 2472 288
MSSQLEXPRESS AdventureWorks AddressType 6 48
8 40 0
MSSQLEXPRESS AdventureWorks AWBuildVersion 1 16
8 8 0
........
*/

use Twoja_Baza_SQL

CREATE TABLE #tmp
(
[name] varchar(50),
[rows] int,
[reserved] varchar (20),
[data] varchar (20),
[index_size]varchar(20),
[unsed] varchar(20)
)
CREATE TABLE #tmprows
(
[servername] varchar(50),
[basename] varchar(50),
[name] varchar(50),
[rows] int,
[reserved] varchar (20),
[data] varchar (20),
[index_size]varchar(20),
[unsed] varchar(20)
)

INSERT #tmp EXEC sp_MSforeachtable 'exec sp_spaceused ''?'''

INSERT #tmprows SELECT @@SERVERNAME,
DB_NAME(),
[name],
[rows],
replace(reserved,'KB',''),
replace(data,'KB',''),
replace(index_size,'KB',''),
replace(unsed,'KB','')
FROM #tmp

SELECT [servername],
[basename],
[name],
[rows],
[reserved],
[data],
[index_size],
[unsed]
FROM #tmprows
ORDER BY [name]

DROP TABLE #tmp
DROP TABLE #tmprows



--
Pozdrawiam.

Adam

Cezary Grądys

unread,
Feb 6, 2021, 3:12:55 AM2/6/21
to
W dniu 05.02.2021 o 22:33, Adam pisze:

>
> Zrzut bazy?
>
> Może wystarczy Ci skrypt, pokazujący ilość rekordów w tabelach, a
> później będziesz porównywał liczniki bazy starszej z nowszą.
>
>
> /*

Dzięki, w poniedziałek postaram się sprawdzić, ale pewnie nie zadziała,
raczej granta na tworzenie tabel i INSERT nie mam.
Mam wytypowaną jedną tabelę z względnie dużą liczbą wierszyn nawet
wydaje się, że wiem która kolumna, ale na razie machnąłem ręką, bo
wartosci liczbowe są typu varchar ;)
Ale kierunek dobry, można wszelkie małe tabele odrzucić.


--
Cezary Grądys
czar...@wa.onet.pl

Adam

unread,
Feb 6, 2021, 9:14:24 AM2/6/21
to
W dniu 2021-02-06 o 09:12, Cezary Grądys pisze:
> W dniu 05.02.2021 o 22:33, Adam pisze:
>
>>
>> Zrzut bazy?
>>
>> Może wystarczy Ci skrypt, pokazujący ilość rekordów w tabelach, a
>> później będziesz porównywał liczniki bazy starszej z nowszą.
>>
>>
>> /*
>
> Dzięki, w poniedziałek postaram się sprawdzić, ale pewnie nie zadziała,
> raczej granta na tworzenie tabel i INSERT nie mam.

Możesz jeszcze raz, ale po polsku bądź angielsku?
Nie bardzo rozumiem, co masz na myśli.

> Mam wytypowaną jedną tabelę z względnie dużą liczbą wierszyn nawet
> wydaje się, że wiem która kolumna, ale na razie machnąłem ręką, bo
> wartosci liczbowe są typu varchar ;)
> Ale kierunek dobry, można wszelkie małe tabele odrzucić.
>

Możesz tabelę albo wynik zapytania SELECT wyrzucić do pliku csv bądź xml:

bcp "SELECT ... from ... [where ...] [ORDER BY ...]" queryout
"c:\pliki\plik.csv|xml"

dla xml dodaj w zapytaniu:
for xml raw, root('JAKIS_STRING')

Oczywiście w pytaniu możes zawrzeć jeszcze inne warunki, np JOIN.
Ewentualnie choćby kursorem jechać, korzystać z dodatkowej tabeli i
szukać zmian.


--
Pozdrawiam.

Adam

Cezary Grądys

unread,
Feb 7, 2021, 6:39:50 AM2/7/21
to
W dniu 06.02.2021 o 15:14, Adam pisze:

> Możesz jeszcze raz, ale po polsku bądź angielsku?
> Nie bardzo rozumiem, co masz na myśli.
>

Granta mam chyba tylko na SELECT i prawdopodobnie nic innego.


>
> Możesz tabelę albo wynik zapytania SELECT wyrzucić do pliku csv bądź xml:
>
> bcp "SELECT ... from ... [where ...] [ORDER BY ...]" queryout
> "c:\pliki\plik.csv|xml"
>


Problemem jest, ze nie wiem, która to tabela, muszę to ustalić, wtedy
nie będę potrzebował tworzyć plików, tylko od razu napiszę zapytanie.
Nie wiem co dać we FROM...

Na razie wytypuję tabele mające powiedzmy powyżej kilku tysięcy wierszy
(na pewno mało ich będzie) i te tabele pobadam.

Konkretnie chcę znaleźć odczyty liczników prądu i ciepła. Nawet nie mam
pewności, czy są one trzymane w bazie, ale raczej tak. Bo jak tego nie
znajdę, to będe musiał spisywać z ekranu, na 2 komputer ;) Typowy sposób
w firmie, w której teraz pracuję ;)
Gdyby to był postgres to pg_dump|grep załatwiły by problem.



--
Cezary Grądys
czar...@wa.onet.pl

Adam

unread,
Feb 7, 2021, 9:40:29 AM2/7/21
to
W dniu 2021-02-07 o 12:39, Cezary Grądys pisze:
> W dniu 06.02.2021 o 15:14, Adam pisze:
>
>> Możesz jeszcze raz, ale po polsku bądź angielsku?
>> Nie bardzo rozumiem, co masz na myśli.
>>
>
> Granta mam chyba tylko na SELECT i prawdopodobnie nic innego.
>

Zdefiniuj pojęcie "grant".

>
>>
>> Możesz tabelę albo wynik zapytania SELECT wyrzucić do pliku csv bądź xml:
>>
>> bcp "SELECT ... from ... [where ...] [ORDER BY ...]" queryout
>> "c:\pliki\plik.csv|xml"
>>
>
>
> Problemem jest, ze nie wiem, która to tabela, muszę to ustalić, wtedy

Na znalezienie tabeli dostałeś rozwiązanie w pierwszym poście.

> nie będę potrzebował tworzyć plików, tylko od razu napiszę zapytanie.
> Nie wiem co dać we FROM...
>
> Na razie wytypuję tabele mające powiedzmy powyżej kilku tysięcy wierszy
> (na pewno mało ich będzie) i te tabele pobadam.
>
> Konkretnie chcę znaleźć odczyty liczników prądu i ciepła. Nawet nie mam
> pewności, czy są one trzymane w bazie, ale raczej tak. Bo jak tego nie
> znajdę, to będe musiał spisywać z ekranu, na 2 komputer ;) Typowy sposób
> w firmie, w której teraz pracuję ;)
> Gdyby to był postgres to pg_dump|grep załatwiły by problem.
>
>
>


--
Pozdrawiam.

Adam

Cezary Grądys

unread,
Feb 7, 2021, 11:24:21 AM2/7/21
to
W dniu 07.02.2021 o 15:40, Adam pisze:
> Zdefiniuj pojęcie "grant".


No co tu definiować? Komenda do nadawania uprawnień.

https://www.postgresql.org/docs/13/sql-grant.html

Może niezrecznie użyte, ale każdy chyba wie o co chodzi.



--
Cezary Grądys
czar...@wa.onet.pl

Adam

unread,
Feb 7, 2021, 12:26:21 PM2/7/21
to
W dniu 2021-02-07 o 17:24, Cezary Grądys pisze:
> W dniu 07.02.2021 o 15:40, Adam pisze:
>> Zdefiniuj pojęcie "grant".
>
>
> No co tu definiować? Komenda do nadawania uprawnień.
>
> https://www.postgresql.org/docs/13/sql-grant.html
>
> Może niezrecznie użyte, ale każdy chyba wie o co chodzi.
>

Sorry, nie znałem.
To może następnym razem zacznij od tego, o jaki SQL Ci chodzi, bo nie
wszystko jest zgodne z ANSI.
Ja pisałem w kontekście MS-SQL.


--
Pozdrawiam.

Adam

DarekPn

unread,
Feb 8, 2021, 2:15:00 PM2/8/21
to
W dniu 07.02.2021 o 18:26, Adam pisze:
Dobre ;)

--
Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe Avast.
https://www.avast.com/antivirus

Adam

unread,
Feb 9, 2021, 6:58:24 AM2/9/21
to
W dniu 2021-02-08 o 20:12, DarekPn pisze:
> W dniu 07.02.2021 o 18:26, Adam pisze:
>> W dniu 2021-02-07 o 17:24, Cezary Grądys pisze:
>>> W dniu 07.02.2021 o 15:40, Adam pisze:
>>>> Zdefiniuj pojęcie "grant".
>>>
>>>
>>> No co tu definiować? Komenda do nadawania uprawnień.
>>>
>>> https://www.postgresql.org/docs/13/sql-grant.html
>>>
>>> Może niezrecznie użyte, ale każdy chyba wie o co chodzi.
>>>
>>
>> Sorry, nie znałem.
>> To może następnym razem zacznij od tego, o jaki SQL Ci chodzi, bo nie
>> wszystko jest zgodne z ANSI.
>> Ja pisałem w kontekście MS-SQL.
>>
>>
>
> Dobre ;)
>

Wiesz, różne ciekawostki wychodzą. Nawet w kontekście różnych wersji
tego samego silnika, jak chociażby AdHoc w MS-SQL, które można sprawdzić np:

select objtype,
count(*) as number_of_plans,
sum(cast(size_in_bytes as bigint))/1024/1024 as size_in_MBs,
avg(usecounts) as avg_use_count
from sys.dm_exec_cached_plans
group by objtype

Natomiast polecenie
DBCC FREESYSTEMCACHE('SQL Plans')
działa OIDP dopiero od wersji ms-sql 2008.

Też mam ciekawe zapytania ze składnią:

select ... where ... and 1=1 and ...

i bez tego 1=1 nie działa. Nie wiem, dlaczego.
A nie znam innych wersji SQL, więc niechcący mogę coś źle powiedzieć.


--
Pozdrawiam.

Adam

DarekPn

unread,
Feb 9, 2021, 2:16:32 PM2/9/21
to
W dniu 09.02.2021 o 12:58, Adam pisze:
W sumie moja uwaga dotyczyła polecenia "grant". Nie wiedziałem, że to
taka egzotyka...
0 new messages