Anteckningar om databashanterare
Diverse anteckningar rörande några olika SQL-databashnaterare.
RDBMS | Port | Admin user | Admin pwd | System DB | Template DB | Terminology |
---|---|---|---|---|---|---|
PostgreSQL | 5432 | postgres | <depends> | postgres | template1 | cluster -> database -> schema |
Microsoft SQL Server | 1433 | sa | <blank> | master | model | database engine -> database -> schema |
Oracle Database | 1521 | system | manager | system | instance -> schema(/role) | |
MySQL | 3306 | root | <blank> | mysql | server -> database/schema | |
IBM DB2 | 446 | db2inst1 | ? | instance/manager -> database -> schema |
Integration
Att ansluta till datakällor utanför databasen.
RDBMS | Service or technique for connecting external data sources |
---|---|
PostgreSQL | Foreign Data Wrapper (FDW), tidigare användes dblink för PG <-> PG datakällor |
Microsoft SQL Server | SQL Server Integration Services (SSIS), gjordes tidigare med Data Transformation Services (DTS) |
Oracle Database | Database Links |
MySQL | ? |
IBM DB2 | Federation |
Support, End Of Life och RDBMS Version
PostgreSQL
select version()
Microsoft SQL Server
Version name | Internal Version | Compatibility Levels | EOL | Extended EOL |
---|---|---|---|---|
2000 | 80 | -- | 2008-04-08 | 2013-04-09 |
2005 | 90 | 60 65 70 80 90 | 2011-04-12 | 2016-04-12 |
2008 | 100 | 80 90 100 | 2014-07-08 | 2019-07-09 |
2012 | 110 | 90 100 110 | 2017-07-11 | 2022-07-12 |
- Sources:
select @@VERSION select name, compatibility_level from sys.databases
Oracle
select * from v$version
Resurser
Oracle
- http://www.oracle.com/technetwork/indexes/documentation/index.html
- http://en.wikipedia.org/wiki/Oracle_database
- http://www.orafaq.com/wiki/List_of_default_database_users
- http://www.oracle-base.com/articles/misc/schema-owners-and-application-users.php
- http://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_admin002.htm
Datatyper
Detta är inte en total jämförelse. Jag har försökt undvika att ta med förlegade datatyper.
Database | Integer | Floating point | Decimal | String | Binary | Date/Time | Boolean | Other |
---|---|---|---|---|---|---|---|---|
PostgreSQL | smallint, integer, bigint | real, double precision | decimal, numeric | char, varchar, text | bytea | date, time, timestamp, interval | boolean | enum, point, line, lseg, box, path, polygon, circle, cidr, inet, macaddr, bit, uuid, xml, arrays |
Microsoft SQL Server | tinyint, smallint, int, bigint | float, real | numeric, decimal, smallmoney money | nvarchar, varchar | binary, varbinary, filestream | date, time, datetimeoffset datetime2 | bit | cursor, timestamp, hierarchyid, uuid, sql_variant, xml, table |
Oracle Database | number | binary_float, binary_double | number | char, varchar2, clob, nclob, nvarchar2, nchar | blob, raw, longraw, bfile | date, timestamp, interval | N/A | spatial, image, audio,video, dicom, xmltype |
MySQL | tinyint, smallint, mediumint, int, bigint | float, double | decimal | char, binary, varchar, varbinary, text, tinytext, mediumtext longtext | tinyblob, blob, mediumblob longblob | datetime, date, timestamp, year | boolean (tinyint) | enum, set, gis data types |
Not.: PostgreSQL och Oracle hanterar också tidszon med WITH TIMEZONE för date/time-typer
Slumpmässiga rader
Kan låta enkelt men kräver eftertanke för att lyckas.
Undra vad Celko har att säga om detta?
Versionshantering av databas-schema
Versionshantering av databas-schemat är en viktig del i utveckling- och underhålls-arbetet av en applikation.
En utvecklare måste alltid kunna plocka ut den senaste koden och testköra den mot en fräsch och opåverkad databas.
En utvecklare måste alltid kunna laborera och ändra databas- schemat utan att behöva oroa sig för att störa sina kollegors arbete.
För att åstadkomma detta bör databas-schemat, grunddata samt eventuell testdata, versionshanteras tillsammans med övrig applikationskod. Varje utvecklare bör också köra mot en egen databas för att vara ostörd samt undvika att störa andras arbete.
Under initial utveckling då databasen är i ständig flux behöver man inte versionshantera schmat så länge man ser till att kod och databas-schema är i synk i kodarkivet.
När förvaltningsarbetet kommer i gång är det av största vikt att utvecklare kan plocka ut en specifik version av koden och utifrån den skapa en databas för felsökning etc.
Ett hyfsat bra sätt att göra detta på är att i kodarkivet ha senaste versionens databas-schema samt ett patch-skript för ändringar. När en ny version släpps bokför man detta i en tabell i databasen samt uppdaterar schema-filer/n i kodarkivet och tömmer patch-skriptet.
Jobbar man på ovan beskrivet vis minskar riskerna för konflikter och förvirring. Felkällor vid släpp av nya versioner minskas, felsökning i redan släppta versioner underlättas och man får en bra grund för att ytterligare förstärka sitt arbete med nattliga byggen och automatisk testning.
Exempel på versionstabell
Nedanstående skript kan användas för att skapa en tabell för versionshantering.
Lägg märke till att skriptet måste anpassas beroende på vilken databashanterare som det ska köras i.
I nuvarande utförande fungerar det på PostgreSQL, Oracle samt Microsoft SQL Server.
DROP TABLE db_version; CREATE TABLE db_version ( id integer default 1 not null unique check(id=1), -- version number(18,2) not null, -- oracle version numeric(18,2) NOT NULL, -- mssql, pgsql -- upgraded_on datetime NOT NULL, -- mssql upgraded_on timestamp not null, -- pgsql, oracle -- script varchar2(254) not null -- oracle script text not null -- mssql, pgsql ); COMMIT; -- Insert one initial row works: insert into db_version(id, version, upgraded_on, script) values(1, 1.00, current_timestamp, 'Initial creation'); -- Verify: select * from db_version; -- Make sure check constraint works: insert into db_version(id, version, upgraded_on, script) values(2, 2.22, current_timestamp, 'Failing insert'); -- Update is the only operation that should work: update db_version set version=1.123 where id=1; -- Delete should be prevented by trigger but that's an exercise for another day delete from db_version;
Prestanda
Microsoft SQL Server
Rensa cache:
CHECKPOINT; GO DBCC DROPCLEANBUFFERS; GO DBCC FREESESSIONCACHE GO
See: Analyzing a Query
PostgreSQL
Pg relies on the OS's disk cache, which it has no way to clear or control. On Linux, check out the "drop_caches"