DB2 How to check current number of objects in tablespace - db2

I've got message in Alert Monitor about number of objects in tablespace.
The tablespace has almost reached .
My question is how check how many object are already in tablespace?.
I have found in DB2 docs that Max # of table 'objects' in a DMS tablespace: 51000.

Related

"row is too big (...) maximum size 8160" when running "grant connect on database"

I'm facing weird issue with postgres 11.
I'm creating a bunch of users and then assigning them some roles but also letting them to connect to certain database.
After successfully creating 2478 roles when I try to create new user I get this error:
db=# create user foo;
CREATE ROLE
db=# grant connect on database db to foo;
ERROR: row is too big: size 8168, maximum size 8160
Same error shows up in db log.
I checked if db volume is not running out of space, there is still 1T to spare there...
I can't imagine postgres trying to insert more than 8k when running simple grant...?
edit:
It seems there was similar question asked already (usage privileges on schema):
ERROR: row is too big: size 8168, maximum size 8164
So the solution would be to create one role, say connect_to_my_db and grant connect to that role, and then instead of running GRANT connect to each user do GRANT connect_to_my_db.
You found the solution yourself, let me add an explanation of the cause of the error:
Each table row is stored in one of the 8KB blocks of the table, so that is its size limit.
Normal tables have a TOAST table, where long attributes can be stored out-of-line. This allows PostgreSQL to store very long rows.
Now system catalog tables do not have TOAST tables, so rows are limited to 8KB size.
The access control list of an object is stored in the object's catalog, so many permissions on a table can exceed the limit.
Be glad — if you had to manage permissions for thousands of users individually, you'd end up in DBA hell anyway.

Failed to enable db2gse spatial commands

I created a database called mapdata in which I will create a table called school. One of the datatypes for one of the columns is db2gse.ST_Point. I have tried creating the table school with the column with that datatype but it gave me an error saying db2gse.ST_Point is an undefined name. So then I figured I had to enable the spatial commands using this statement:
db2se enable_db mapdata
But that gives me error as well. It says a temporary table space could not be created because there is no available system temporary table space that has a compatible page size.
How can I resolve this problem?
If you take a look at the db2se enable_db page in the manual you will probably notice this, among other things:
Usage notes
Ensure that you have a system temporary table space with a page size of 8 KB or larger and with a minimum size of 500 pages. This is a requirement to run the db2se enable_db command successfully.
The error message tells you that there is no such tablespace. I suspect that your database also does not have a matching bufferpool.
To create a system temporary tablespace you might use the following commands (assuming your database is configured with automatic storage):
db2 "create bufferpool bp8k pagesize 8 k"
db2 "create system temporary tablespace tmpsys8k pagesize 8 k bufferpool bp8k"

default tablespace for schema in DB2

We have got some DDLs for our schema. These DDLs create tables and indexes in a given tablespace. Something like:
CREATE TABLE mySchema.myTable
(
someField1 CHAR(2) NOT NULL ,
someField2 VARCHAR(70) NOT NULL
)
IN MY_TBSPC
INDEX IN MY_TBSPC;
We want to reuse this DDLs to run some integration tests using APACHE DERBY. The problem is that such syntax is not accepted by DERBY. Is there any way to define a kind of default tablespace for tables and indexes, so we can remove this 'IN TABLESPACE' statements.
There is no deterministic way of defining a "default" tablespace in DB2 (I'm assuming we're dealing with DB2 for LUW here). If the tablespaces are not explicitly indicated in the CREATE TABLE statement, the database manager will pick for table data the first tablespace with the suitable page size that you are authorized to use, and indexes will be stored in the same tablespace as data.
This means that if you only have one user tablespace it will always be used for both data and indexes, so in a way it becomes the default. However, if you have more than one tablespace with different page sizes you may end up with tables (and their indexes) in different tablespaces.

How a Table space for a query execution is chosen? - DB2

For one of my issue, I am trying to understand the functionalities of below DB2 entities,
System Temporary table space.
Page Size.
Table Space.
Buffer Pool.
And below is my observation,
There is a TableSpace linked to a table in the DB2 table syscat.tables
The TableSpaces are linked to BufferPool with the relation defined in syscat.tablespaces
System Temporary table space is the table space that the DB might use while executing the query.
Page Size is an unit that defines the limit of a TableSpace and says how much data can a TableSpace can hold.
Is there something wrong in my above understandings? And when I excute a query how does the DB chooses which TableSpace to choose?

DB2 create table and insert in tablespace

my DBA created three different tablespaces in DB2 in order to store the same table (TABLE_IN_TBS), switching on a date field.
CREATE LARGE TABLESPACE "TBS_x" IN DATABASE PARTITION GROUP NODO0 PAGESIZE 32768 MANAGED BY DATABASE
USING (FILE 'x.LRG' 1G) ON DBPARTITIONNUMS (0)
EXTENTSIZE 32
PREFETCHSIZE AUTOMATIC
BUFFERPOOL BP32K0
OVERHEAD 12.670000
TRANSFERRATE 0.180000
AUTORESIZE YES
MAXSIZE 30 G
NO FILE SYSTEM CACHING
DROPPED TABLE RECOVERY ON;
Then I have TBS_x in which data in predefined range will be add, TBS_x+1 for the next range and so on..
My question is: I have to create the same table TABLE_IN_TBS in the different tablespaces? With the following syntax?
CREATE TABLE TABLE_IN_TBS
(
SomeColumns....
) TABLESPACE TBS_x;
And in which way I can refer to different tablespaces in order to insert data in the right tablespace based on my date field to switch?
I think you're talking about a partitioned table. It is defined like this:
CREATE TABLE TABLE_IN_TBS
(
SomeColumns....
)
PARTITION BY (your_date_column)
(STARTING FROM '2013-09-30' ENDING AT '2013-09-30' IN TABLESPACE TBS_1),
(STARTING FROM '2013-10-01' ENDING AT '2013-10-01' IN TABLESPACE TBS_2),
...;