Dbeaver: migrating a table between Oracle schemas truncate CLOB column - oracle

Using DBeaver, I'm trying to migrate a table from an Oracle Instance to another. I just right-click over the desired table, select Export Data and follow the wizard.
My problem is that the CLOB column is truncated. In the source database instance the max CLOB length is 6046297, but in the target it is 970823. The source has 340 records with the CLOB column value larger than 970823.
I've just noticed now that the source table has 24806 rows and the target has 12876. The table sequence id, the max value is 70191 in the source and 58185 in the target. The source has 22716 registers with id less than 58185 and the target has 12876, so it wasn't just a truncation. DBeaver is not transferring half of the registers.
I'm connecting to Oracle with the JDBC driver. Is there an configuration in DBeaver or in the connection or in the driver that would allow me to transfer this table? Maybe I just try to use another tool.

Related

Precision Issue when using OPENQUERY to insert values into Oracle table

I need to insert values with a precision of 5 decimal places into an Oracle interface table via OPENQUERY because the values are originally stored in an SQL database. The data type of the Oracle table column is NUMBER (with no scale/precision specified). Using OPENQUERY to insert a value of 1.4, results in a value of 1.3999999999999999 stored in the Oracle table. I cannot change the data type of the Oracle table to NUMBER(38,5) because it is a standard Oracle table (GL_DAILY_RATES_INTERFACE).
According to Oracle https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832
"If a precision is not specified, the column stores values as given."
Which means that if I insert 1.4, it should be stored in a NUMBER column as is. But it doesn't. So does that mean that when inserting through OPENQUERY to a linked Oracle server, the Oracle Provider for OLE DB does some addition conversion that results in a floating point error?
How do I insert values to a precision of 5 decimal places into an Oracle table NUMBER column that does not have precision or scale specified?
Update:
My insert statement does round the values when inserting. But it doesn't solve the issue.
For example:
INSERT INTO OPENQUERY(LINKEDSERVER, "SELECT CONVERSION_RATE FROM GL_DAILY_RATES_INTERFACE") VALUES(ROUND(1.4,5))
Since inserting values through OPENQUERY to a linked Oracle server causes some floating point error, I tried using EXEC('') AT LINKEDSERVER and it worked. Because the statement is executed directly on the ORACLE server, there is no longer any issue of the Oracle Provider for OLE DB doing any unexpected conversion.
My overall solution was to first insert values from the SQL table to the Oracle table using OPENQUERY, then use EXEC() to update and round the values in the Oracle table again.

Oracle Managed Data Access Bulk Copy Error pasing insert statement for table (virtual columns)

We've recently moved to use Oracle.ManagedDataAccess in our application now it supports Bulk Copy. The problem is it seems to have a hard time dealing with tables that have virtual columns where the unmanaged client did not.
Oracle.ManagedDataAccess.Client.OracleException: 'ORA-02373: Error parsing insert statement for table SFOL.BUILDRECORD.
ORA-54013: INSERT operation disallowed on virtual columns'
The specific error above seems to suggest that it doesn't like the DataTable provided but the DataTable clearly specifies the columns and does not include any virtual columns. The underlying table itself does have virtual columns but we're not inserting into them.
The database is Oracle 19c and the ManagedDataAccess client is 19.10.0
Any ideas?

Sybase to Oracle table move

I want to move tables from my sybase database to my oracle database. However, some tables in my sybase database have long identifiers or table names (above 30chars) so the "copy to oracle" function on Oracle SQL Developer keeps failing.
How can I migrate TABLE DATA only to my oracle schema?
Also note, I tired doing the data migration flow but when i get to the step to move data, it doesn't let me move table data. It just isn't visible. It'll only let me move procedures and such.
Do i have something disabled?
You need to enable long identifiers in your 12cR2 (12.2.x.y) or newer version of Oracle Database.
As soon as you set COMPATIBLE to “12.2.0” or higher for your Database, you can use the Long identifiers for every object in Oracle with the following exceptions:
Database name ≤ 8 byte
Disk groups ≤ 30 byte
PDB names ≤ 30 byte
Rollback segments ≤ 30 byte
Tablespace names ≤ 30 byte
Tablespace sets ≤ 30 byte
So let's do a table then...I'm running 12.2 in this scenario, but it would be find in 18c or 19c as well.
Click OK and I get - Success!
Copied Objects:
Sybase.copy_to_oracle.dbo.TABLE.this_is_a_table_to_hold_employees_please_dont_put_customers_in_it
Drop Target: HR
Copy DDL: Yes
Do Not Replace Existing Objects
Copy Data: Yes
Append Existing Objects
Task Succeeded.
1 table(s) copied.
Created table this_is_a_table_to_hold_employees_please_dont_put_customers_in_it and inserted 0 row(s)

Populating Tables into Oracle in-memory segments

I am trying to load the tables into oracle in-memory database. I have enable the tables for INMEMORY by using sql+ command ALTER TABLE table_name INMEMORY. The table also contains data i.e. the table is populated. But when I try to use the command SELECT v.owner, v.segment_name name, v.populate_status status from v$im_segments v;, it shows no rows selected.
What can be the problem?
Have you considered this?
https://docs.oracle.com/database/121/CNCPT/memory.htm#GUID-DF723C06-62FE-4E5A-8BE0-0703695A7886
Population of the IM Column Store in Response to Queries
Setting the INMEMORY attribute on an object means that this object is a candidate for population in the IM column store, not that the database immediately populates the object in memory.
By default (INMEMORY PRIORITY is set to NONE), the database delays population of a table in the IM column store until the database considers it useful. When the INMEMORY attribute is set for an object, the database may choose not to materialize all columns when the database determines that the memory is better used elsewhere. Also, the IM column store may populate a subset of columns from a table.
You probably need to run a select against the date first

How does partitioning is generated on oracle Exadata?

I want to know how oracle created it because i want to be able to have all month partition in single TBS for back-up purposes ,example of partition name oracle automatically generated is 'SYS_P321847'

Resources